]> granicus.if.org Git - python/commitdiff
Make test_mutants stronger by also adding random keys during comparisons.
authorTim Peters <tim.peters@gmail.com>
Thu, 10 May 2001 20:18:30 +0000 (20:18 +0000)
committerTim Peters <tim.peters@gmail.com>
Thu, 10 May 2001 20:18:30 +0000 (20:18 +0000)
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

index 1bcb801ca577c6a0bbfb4e1db494396df1179959..3cd35d17a5ffce4eefe1ea1df258f8fd38bbc85e 100644 (file)
@@ -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]