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):
6868for obj in abc.__subclasses__() + [abc]:
6969abcs[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+7179nwarmup, ntracked, fname = huntrleaks
7280fname = os.path.join(support.SAVEDCWD, fname)
7381repcount = nwarmup + ntracked
@@ -86,9 +94,9 @@ def dash_R(the_module, test, indirect_test, huntrleaks):
8694abcs)
8795print('.', end='', file=sys.stderr, flush=True)
8896if 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)
92100alloc_before = alloc_after
93101rc_before = rc_after
94102fd_before = fd_after