summaryrefslogtreecommitdiffstats
path: root/Lib/test
diff options
context:
space:
mode:
authorTim Peters <tim.peters@gmail.com>2001-05-10 20:18:30 (GMT)
committerTim Peters <tim.peters@gmail.com>2001-05-10 20:18:30 (GMT)
commit4c02fecf9c1f8a890b04ed3501aa68a636050e38 (patch)
treed9c2c358524f6343585370ab0842704458e1a22f /Lib/test
parentfd69208b78de964f978b6a070c0fa0729e8d5285 (diff)
downloadcpython-4c02fecf9c1f8a890b04ed3501aa68a636050e38.zip
cpython-4c02fecf9c1f8a890b04ed3501aa68a636050e38.tar.gz
cpython-4c02fecf9c1f8a890b04ed3501aa68a636050e38.tar.bz2
Make test_mutants stronger by also adding random keys during comparisons.
A Mystery: test_mutants ran amazingly slowly even before dictobject.c "got fixed". I don't have a clue as to why. dict comparison was and remains linear-time in the size of the dicts, and test_mutants only tries 100 dict pairs, of size averaging just 50. So "it should" run in less than an eyeblink; but it takes at least a second on this 800MHz box.
Diffstat (limited to 'Lib/test')
-rw-r--r--Lib/test/test_mutants.py19
1 files changed, 17 insertions, 2 deletions
diff --git a/Lib/test/test_mutants.py b/Lib/test/test_mutants.py
index 1bcb801..3cd35d1 100644
--- a/Lib/test/test_mutants.py
+++ b/Lib/test/test_mutants.py
@@ -41,18 +41,33 @@ mutate = 0
# If global mutate is true, consider mutating a dict. May or may not
# mutate a dict even if mutate is true. If it does decide to mutate a
# dict, it picks one of {dict1, dict2} at random, and deletes a random
-# entry from it.
+# entry from it; or, more rarely, adds a random element.
def maybe_mutate():
+ global mutate
if not mutate:
return
if random.random() < 0.5:
return
+
if random.random() < 0.5:
target, keys = dict1, dict1keys
else:
target, keys = dict2, dict2keys
- if keys:
+
+ if random.random() < 0.2:
+ # Insert a new key.
+ mutate = 0 # disable mutation until key inserted
+ while 1:
+ newkey = Horrid(random.randrange(100))
+ if newkey not in target:
+ break
+ target[newkey] = Horrid(random.randrange(100))
+ keys.append(newkey)
+ mutate = 1
+
+ elif keys:
+ # Delete a key at random.
i = random.randrange(len(keys))
key = keys[i]
del target[key]