diff options
author | Tim Peters <tim.peters@gmail.com> | 2001-05-10 20:18:30 (GMT) |
---|---|---|
committer | Tim Peters <tim.peters@gmail.com> | 2001-05-10 20:18:30 (GMT) |
commit | 4c02fecf9c1f8a890b04ed3501aa68a636050e38 (patch) | |
tree | d9c2c358524f6343585370ab0842704458e1a22f | |
parent | fd69208b78de964f978b6a070c0fa0729e8d5285 (diff) | |
download | cpython-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.
-rw-r--r-- | Lib/test/test_mutants.py | 19 |
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] |