summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArmin Rigo <arigo@tunes.org>2005-05-15 13:29:26 (GMT)
committerArmin Rigo <arigo@tunes.org>2005-05-15 13:29:26 (GMT)
commit57179feec8b0b22a81ec70b4f4037a17f06fd415 (patch)
tree93af30951953d1dda9a829471baac83b10e75491
parent174dd2219de2e9ff312d6541089d9d9b7ff785d6 (diff)
downloadcpython-57179feec8b0b22a81ec70b4f4037a17f06fd415.zip
cpython-57179feec8b0b22a81ec70b4f4037a17f06fd415.tar.gz
cpython-57179feec8b0b22a81ec70b4f4037a17f06fd415.tar.bz2
This test relied on short-circuiting details of dictobject.py to avoid
crashing, and indirectly on the fact that hash codes in random.randrange(1000000000) were very unlikely to exhibit collisions. To see the problem, replace this number with 500 and observe the crash on either del target[key] or del keys[i]. The fix prevents recursive mutation, just as in the key insertion case.
-rw-r--r--Lib/test/test_mutants.py6
1 files changed, 2 insertions, 4 deletions
diff --git a/Lib/test/test_mutants.py b/Lib/test/test_mutants.py
index 60a17aa..d495704 100644
--- a/Lib/test/test_mutants.py
+++ b/Lib/test/test_mutants.py
@@ -69,14 +69,12 @@ def maybe_mutate():
elif keys:
# Delete a key at random.
+ mutate = 0 # disable mutation until key deleted
i = random.randrange(len(keys))
key = keys[i]
del target[key]
- # CAUTION: don't use keys.remove(key) here. Or do <wink>. The
- # point is that .remove() would trigger more comparisons, and so
- # also more calls to this routine. We're mutating often enough
- # without that.
del keys[i]
+ mutate = 1
# A horrid class that triggers random mutations of dict1 and dict2 when
# instances are compared.