bpo-31217: Fix regrtest -R for small integer (#3260) (#3261) · python/cpython@98c849a

@@ -68,6 +68,14 @@ def dash_R(the_module, test, indirect_test, huntrleaks):

6868

for obj in abc.__subclasses__() + [abc]:

6969

abcs[obj] = obj._abc_registry.copy()

707071+

# bpo-31217: Integer pool to get a single integer object for the same

72+

# value. The pool is used to prevent false alarm when checking for memory

73+

# block leaks. Fill the pool with values in -1000..1000 which are the most

74+

# common (reference, memory block, file descriptor) differences.

75+

int_pool = {value: value for value in range(-1000, 1000)}

76+

def get_pooled_int(value):

77+

return int_pool.setdefault(value, value)

78+7179

nwarmup, ntracked, fname = huntrleaks

7280

fname = os.path.join(support.SAVEDCWD, fname)

7381

repcount = nwarmup + ntracked

@@ -86,9 +94,9 @@ def dash_R(the_module, test, indirect_test, huntrleaks):

8694

abcs)

8795

print('.', end='', file=sys.stderr, flush=True)

8896

if i >= nwarmup:

89-

rc_deltas[i] = rc_after - rc_before

90-

alloc_deltas[i] = alloc_after - alloc_before

91-

fd_deltas[i] = fd_after - fd_before

97+

rc_deltas[i] = get_pooled_int(rc_after - rc_before)

98+

alloc_deltas[i] = get_pooled_int(alloc_after - alloc_before)

99+

fd_deltas[i] = get_pooled_int(fd_after - fd_before)

92100

alloc_before = alloc_after

93101

rc_before = rc_after

94102

fd_before = fd_after