From 4c02fecf9c1f8a890b04ed3501aa68a636050e38 Mon Sep 17 00:00:00 2001 From: Tim Peters Date: Thu, 10 May 2001 20:18:30 +0000 Subject: [PATCH] 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. --- Lib/test/test_mutants.py | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/Lib/test/test_mutants.py b/Lib/test/test_mutants.py index 1bcb801ca57..3cd35d17a5f 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]