annotate Lib/test/test_mutants.py @ 54294:dba767bc3155 legacy-trunk

remove mention of old ctypes version
author Benjamin Peterson <benjamin@python.org>
date Sat, 23 May 2009 20:59:09 +0000
parents 08ca476f8a34
children 7caf54ce529e
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
24364
aa0d2d51fbde Get rid of relative imports in all unittests. Now anything that
Barry Warsaw <barry@python.org>
parents: 18023
diff changeset
1 from test.test_support import verbose, TESTFN
17756
a06a704260e9 SF bug #422121 Insecurities in dict comparison.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
2 import random
18017
facff5f50fcc Coredumpers from Michael Hudson, mutating dicts while printing or
Tim Peters <tim.peters@gmail.com>
parents: 17774
diff changeset
3 import os
17756
a06a704260e9 SF bug #422121 Insecurities in dict comparison.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
4
a06a704260e9 SF bug #422121 Insecurities in dict comparison.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
5 # From SF bug #422121: Insecurities in dict comparison.
a06a704260e9 SF bug #422121 Insecurities in dict comparison.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
6
17772
01b5043a4509 Repair typos in comments.
Tim Peters <tim.peters@gmail.com>
parents: 17756
diff changeset
7 # Safety of code doing comparisons has been an historical Python weak spot.
01b5043a4509 Repair typos in comments.
Tim Peters <tim.peters@gmail.com>
parents: 17756
diff changeset
8 # The problem is that comparison of structures written in C *naturally*
17756
a06a704260e9 SF bug #422121 Insecurities in dict comparison.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
9 # wants to hold on to things like the size of the container, or "the
a06a704260e9 SF bug #422121 Insecurities in dict comparison.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
10 # biggest" containee so far, across a traversal of the container; but
a06a704260e9 SF bug #422121 Insecurities in dict comparison.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
11 # code to do containee comparisons can call back into Python and mutate
a06a704260e9 SF bug #422121 Insecurities in dict comparison.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
12 # the container in arbitrary ways while the C loop is in midstream. If the
a06a704260e9 SF bug #422121 Insecurities in dict comparison.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
13 # C code isn't extremely paranoid about digging things out of memory on
a06a704260e9 SF bug #422121 Insecurities in dict comparison.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
14 # each trip, and artificially boosting refcounts for the duration, anything
a06a704260e9 SF bug #422121 Insecurities in dict comparison.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
15 # from infinite loops to OS crashes can result (yes, I use Windows <wink>).
a06a704260e9 SF bug #422121 Insecurities in dict comparison.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
16 #
a06a704260e9 SF bug #422121 Insecurities in dict comparison.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
17 # The other problem is that code designed to provoke a weakness is usually
a06a704260e9 SF bug #422121 Insecurities in dict comparison.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
18 # white-box code, and so catches only the particular vulnerabilities the
a06a704260e9 SF bug #422121 Insecurities in dict comparison.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
19 # author knew to protect against. For example, Python's list.sort() code
a06a704260e9 SF bug #422121 Insecurities in dict comparison.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
20 # went thru many iterations as one "new" vulnerability after another was
a06a704260e9 SF bug #422121 Insecurities in dict comparison.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
21 # discovered.
a06a704260e9 SF bug #422121 Insecurities in dict comparison.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
22 #
a06a704260e9 SF bug #422121 Insecurities in dict comparison.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
23 # So the dict comparison test here uses a black-box approach instead,
a06a704260e9 SF bug #422121 Insecurities in dict comparison.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
24 # generating dicts of various sizes at random, and performing random
a06a704260e9 SF bug #422121 Insecurities in dict comparison.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
25 # mutations on them at random times. This proved very effective,
a06a704260e9 SF bug #422121 Insecurities in dict comparison.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
26 # triggering at least six distinct failure modes the first 20 times I
a06a704260e9 SF bug #422121 Insecurities in dict comparison.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
27 # ran it. Indeed, at the start, the driver never got beyond 6 iterations
a06a704260e9 SF bug #422121 Insecurities in dict comparison.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
28 # before the test died.
a06a704260e9 SF bug #422121 Insecurities in dict comparison.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
29
a06a704260e9 SF bug #422121 Insecurities in dict comparison.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
30 # The dicts are global to make it easy to mutate tham from within functions.
a06a704260e9 SF bug #422121 Insecurities in dict comparison.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
31 dict1 = {}
a06a704260e9 SF bug #422121 Insecurities in dict comparison.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
32 dict2 = {}
a06a704260e9 SF bug #422121 Insecurities in dict comparison.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
33
a06a704260e9 SF bug #422121 Insecurities in dict comparison.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
34 # The current set of keys in dict1 and dict2. These are materialized as
a06a704260e9 SF bug #422121 Insecurities in dict comparison.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
35 # lists to make it easy to pick a dict key at random.
a06a704260e9 SF bug #422121 Insecurities in dict comparison.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
36 dict1keys = []
a06a704260e9 SF bug #422121 Insecurities in dict comparison.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
37 dict2keys = []
a06a704260e9 SF bug #422121 Insecurities in dict comparison.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
38
35940
cb1ff2a85e3d Fix typo in comment.
Neal Norwitz <nnorwitz@gmail.com>
parents: 34957
diff changeset
39 # Global flag telling maybe_mutate() whether to *consider* mutating.
17756
a06a704260e9 SF bug #422121 Insecurities in dict comparison.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
40 mutate = 0
a06a704260e9 SF bug #422121 Insecurities in dict comparison.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
41
a06a704260e9 SF bug #422121 Insecurities in dict comparison.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
42 # If global mutate is true, consider mutating a dict. May or may not
a06a704260e9 SF bug #422121 Insecurities in dict comparison.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
43 # mutate a dict even if mutate is true. If it does decide to mutate a
a06a704260e9 SF bug #422121 Insecurities in dict comparison.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
44 # dict, it picks one of {dict1, dict2} at random, and deletes a random
17774
4b2fdaebbfe5 Make test_mutants stronger by also adding random keys during comparisons.
Tim Peters <tim.peters@gmail.com>
parents: 17772
diff changeset
45 # entry from it; or, more rarely, adds a random element.
17756
a06a704260e9 SF bug #422121 Insecurities in dict comparison.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
46
a06a704260e9 SF bug #422121 Insecurities in dict comparison.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
47 def maybe_mutate():
17774
4b2fdaebbfe5 Make test_mutants stronger by also adding random keys during comparisons.
Tim Peters <tim.peters@gmail.com>
parents: 17772
diff changeset
48 global mutate
17756
a06a704260e9 SF bug #422121 Insecurities in dict comparison.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
49 if not mutate:
a06a704260e9 SF bug #422121 Insecurities in dict comparison.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
50 return
a06a704260e9 SF bug #422121 Insecurities in dict comparison.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
51 if random.random() < 0.5:
a06a704260e9 SF bug #422121 Insecurities in dict comparison.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
52 return
17774
4b2fdaebbfe5 Make test_mutants stronger by also adding random keys during comparisons.
Tim Peters <tim.peters@gmail.com>
parents: 17772
diff changeset
53
17756
a06a704260e9 SF bug #422121 Insecurities in dict comparison.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
54 if random.random() < 0.5:
a06a704260e9 SF bug #422121 Insecurities in dict comparison.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
55 target, keys = dict1, dict1keys
a06a704260e9 SF bug #422121 Insecurities in dict comparison.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
56 else:
a06a704260e9 SF bug #422121 Insecurities in dict comparison.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
57 target, keys = dict2, dict2keys
17774
4b2fdaebbfe5 Make test_mutants stronger by also adding random keys during comparisons.
Tim Peters <tim.peters@gmail.com>
parents: 17772
diff changeset
58
4b2fdaebbfe5 Make test_mutants stronger by also adding random keys during comparisons.
Tim Peters <tim.peters@gmail.com>
parents: 17772
diff changeset
59 if random.random() < 0.2:
4b2fdaebbfe5 Make test_mutants stronger by also adding random keys during comparisons.
Tim Peters <tim.peters@gmail.com>
parents: 17772
diff changeset
60 # Insert a new key.
4b2fdaebbfe5 Make test_mutants stronger by also adding random keys during comparisons.
Tim Peters <tim.peters@gmail.com>
parents: 17772
diff changeset
61 mutate = 0 # disable mutation until key inserted
4b2fdaebbfe5 Make test_mutants stronger by also adding random keys during comparisons.
Tim Peters <tim.peters@gmail.com>
parents: 17772
diff changeset
62 while 1:
4b2fdaebbfe5 Make test_mutants stronger by also adding random keys during comparisons.
Tim Peters <tim.peters@gmail.com>
parents: 17772
diff changeset
63 newkey = Horrid(random.randrange(100))
4b2fdaebbfe5 Make test_mutants stronger by also adding random keys during comparisons.
Tim Peters <tim.peters@gmail.com>
parents: 17772
diff changeset
64 if newkey not in target:
4b2fdaebbfe5 Make test_mutants stronger by also adding random keys during comparisons.
Tim Peters <tim.peters@gmail.com>
parents: 17772
diff changeset
65 break
4b2fdaebbfe5 Make test_mutants stronger by also adding random keys during comparisons.
Tim Peters <tim.peters@gmail.com>
parents: 17772
diff changeset
66 target[newkey] = Horrid(random.randrange(100))
4b2fdaebbfe5 Make test_mutants stronger by also adding random keys during comparisons.
Tim Peters <tim.peters@gmail.com>
parents: 17772
diff changeset
67 keys.append(newkey)
4b2fdaebbfe5 Make test_mutants stronger by also adding random keys during comparisons.
Tim Peters <tim.peters@gmail.com>
parents: 17772
diff changeset
68 mutate = 1
4b2fdaebbfe5 Make test_mutants stronger by also adding random keys during comparisons.
Tim Peters <tim.peters@gmail.com>
parents: 17772
diff changeset
69
4b2fdaebbfe5 Make test_mutants stronger by also adding random keys during comparisons.
Tim Peters <tim.peters@gmail.com>
parents: 17772
diff changeset
70 elif keys:
4b2fdaebbfe5 Make test_mutants stronger by also adding random keys during comparisons.
Tim Peters <tim.peters@gmail.com>
parents: 17772
diff changeset
71 # Delete a key at random.
34957
3767cdaa6728 This test relied on short-circuiting details of dictobject.py to avoid
Armin Rigo <arigo@tunes.org>
parents: 24364
diff changeset
72 mutate = 0 # disable mutation until key deleted
17756
a06a704260e9 SF bug #422121 Insecurities in dict comparison.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
73 i = random.randrange(len(keys))
a06a704260e9 SF bug #422121 Insecurities in dict comparison.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
74 key = keys[i]
a06a704260e9 SF bug #422121 Insecurities in dict comparison.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
75 del target[key]
a06a704260e9 SF bug #422121 Insecurities in dict comparison.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
76 del keys[i]
34957
3767cdaa6728 This test relied on short-circuiting details of dictobject.py to avoid
Armin Rigo <arigo@tunes.org>
parents: 24364
diff changeset
77 mutate = 1
17756
a06a704260e9 SF bug #422121 Insecurities in dict comparison.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
78
a06a704260e9 SF bug #422121 Insecurities in dict comparison.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
79 # A horrid class that triggers random mutations of dict1 and dict2 when
a06a704260e9 SF bug #422121 Insecurities in dict comparison.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
80 # instances are compared.
a06a704260e9 SF bug #422121 Insecurities in dict comparison.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
81
a06a704260e9 SF bug #422121 Insecurities in dict comparison.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
82 class Horrid:
a06a704260e9 SF bug #422121 Insecurities in dict comparison.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
83 def __init__(self, i):
a06a704260e9 SF bug #422121 Insecurities in dict comparison.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
84 # Comparison outcomes are determined by the value of i.
a06a704260e9 SF bug #422121 Insecurities in dict comparison.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
85 self.i = i
a06a704260e9 SF bug #422121 Insecurities in dict comparison.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
86
a06a704260e9 SF bug #422121 Insecurities in dict comparison.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
87 # An artificial hashcode is selected at random so that we don't
17772
01b5043a4509 Repair typos in comments.
Tim Peters <tim.peters@gmail.com>
parents: 17756
diff changeset
88 # have any systematic relationship between comparison outcomes
17756
a06a704260e9 SF bug #422121 Insecurities in dict comparison.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
89 # (based on self.i and other.i) and relative position within the
17772
01b5043a4509 Repair typos in comments.
Tim Peters <tim.peters@gmail.com>
parents: 17756
diff changeset
90 # hash vector (based on hashcode).
17756
a06a704260e9 SF bug #422121 Insecurities in dict comparison.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
91 self.hashcode = random.randrange(1000000000)
a06a704260e9 SF bug #422121 Insecurities in dict comparison.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
92
a06a704260e9 SF bug #422121 Insecurities in dict comparison.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
93 def __hash__(self):
39745
08ca476f8a34 Fix SF bug #1546288, crash in dict_equal.
Neal Norwitz <nnorwitz@gmail.com>
parents: 35940
diff changeset
94 return 42
17756
a06a704260e9 SF bug #422121 Insecurities in dict comparison.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
95 return self.hashcode
a06a704260e9 SF bug #422121 Insecurities in dict comparison.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
96
a06a704260e9 SF bug #422121 Insecurities in dict comparison.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
97 def __cmp__(self, other):
a06a704260e9 SF bug #422121 Insecurities in dict comparison.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
98 maybe_mutate() # The point of the test.
a06a704260e9 SF bug #422121 Insecurities in dict comparison.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
99 return cmp(self.i, other.i)
a06a704260e9 SF bug #422121 Insecurities in dict comparison.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
100
39745
08ca476f8a34 Fix SF bug #1546288, crash in dict_equal.
Neal Norwitz <nnorwitz@gmail.com>
parents: 35940
diff changeset
101 def __eq__(self, other):
08ca476f8a34 Fix SF bug #1546288, crash in dict_equal.
Neal Norwitz <nnorwitz@gmail.com>
parents: 35940
diff changeset
102 maybe_mutate() # The point of the test.
08ca476f8a34 Fix SF bug #1546288, crash in dict_equal.
Neal Norwitz <nnorwitz@gmail.com>
parents: 35940
diff changeset
103 return self.i == other.i
08ca476f8a34 Fix SF bug #1546288, crash in dict_equal.
Neal Norwitz <nnorwitz@gmail.com>
parents: 35940
diff changeset
104
17756
a06a704260e9 SF bug #422121 Insecurities in dict comparison.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
105 def __repr__(self):
a06a704260e9 SF bug #422121 Insecurities in dict comparison.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
106 return "Horrid(%d)" % self.i
a06a704260e9 SF bug #422121 Insecurities in dict comparison.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
107
a06a704260e9 SF bug #422121 Insecurities in dict comparison.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
108 # Fill dict d with numentries (Horrid(i), Horrid(j)) key-value pairs,
a06a704260e9 SF bug #422121 Insecurities in dict comparison.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
109 # where i and j are selected at random from the candidates list.
a06a704260e9 SF bug #422121 Insecurities in dict comparison.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
110 # Return d.keys() after filling.
a06a704260e9 SF bug #422121 Insecurities in dict comparison.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
111
a06a704260e9 SF bug #422121 Insecurities in dict comparison.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
112 def fill_dict(d, candidates, numentries):
a06a704260e9 SF bug #422121 Insecurities in dict comparison.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
113 d.clear()
a06a704260e9 SF bug #422121 Insecurities in dict comparison.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
114 for i in xrange(numentries):
a06a704260e9 SF bug #422121 Insecurities in dict comparison.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
115 d[Horrid(random.choice(candidates))] = \
a06a704260e9 SF bug #422121 Insecurities in dict comparison.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
116 Horrid(random.choice(candidates))
a06a704260e9 SF bug #422121 Insecurities in dict comparison.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
117 return d.keys()
a06a704260e9 SF bug #422121 Insecurities in dict comparison.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
118
a06a704260e9 SF bug #422121 Insecurities in dict comparison.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
119 # Test one pair of randomly generated dicts, each with n entries.
a06a704260e9 SF bug #422121 Insecurities in dict comparison.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
120 # Note that dict comparison is trivial if they don't have the same number
a06a704260e9 SF bug #422121 Insecurities in dict comparison.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
121 # of entires (then the "shorter" dict is instantly considered to be the
a06a704260e9 SF bug #422121 Insecurities in dict comparison.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
122 # smaller one, without even looking at the entries).
a06a704260e9 SF bug #422121 Insecurities in dict comparison.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
123
a06a704260e9 SF bug #422121 Insecurities in dict comparison.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
124 def test_one(n):
a06a704260e9 SF bug #422121 Insecurities in dict comparison.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
125 global mutate, dict1, dict2, dict1keys, dict2keys
a06a704260e9 SF bug #422121 Insecurities in dict comparison.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
126
a06a704260e9 SF bug #422121 Insecurities in dict comparison.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
127 # Fill the dicts without mutating them.
a06a704260e9 SF bug #422121 Insecurities in dict comparison.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
128 mutate = 0
a06a704260e9 SF bug #422121 Insecurities in dict comparison.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
129 dict1keys = fill_dict(dict1, range(n), n)
a06a704260e9 SF bug #422121 Insecurities in dict comparison.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
130 dict2keys = fill_dict(dict2, range(n), n)
a06a704260e9 SF bug #422121 Insecurities in dict comparison.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
131
a06a704260e9 SF bug #422121 Insecurities in dict comparison.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
132 # Enable mutation, then compare the dicts so long as they have the
a06a704260e9 SF bug #422121 Insecurities in dict comparison.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
133 # same size.
a06a704260e9 SF bug #422121 Insecurities in dict comparison.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
134 mutate = 1
a06a704260e9 SF bug #422121 Insecurities in dict comparison.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
135 if verbose:
a06a704260e9 SF bug #422121 Insecurities in dict comparison.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
136 print "trying w/ lengths", len(dict1), len(dict2),
a06a704260e9 SF bug #422121 Insecurities in dict comparison.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
137 while dict1 and len(dict1) == len(dict2):
a06a704260e9 SF bug #422121 Insecurities in dict comparison.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
138 if verbose:
a06a704260e9 SF bug #422121 Insecurities in dict comparison.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
139 print ".",
39745
08ca476f8a34 Fix SF bug #1546288, crash in dict_equal.
Neal Norwitz <nnorwitz@gmail.com>
parents: 35940
diff changeset
140 if random.random() < 0.5:
08ca476f8a34 Fix SF bug #1546288, crash in dict_equal.
Neal Norwitz <nnorwitz@gmail.com>
parents: 35940
diff changeset
141 c = cmp(dict1, dict2)
08ca476f8a34 Fix SF bug #1546288, crash in dict_equal.
Neal Norwitz <nnorwitz@gmail.com>
parents: 35940
diff changeset
142 else:
08ca476f8a34 Fix SF bug #1546288, crash in dict_equal.
Neal Norwitz <nnorwitz@gmail.com>
parents: 35940
diff changeset
143 c = dict1 == dict2
17756
a06a704260e9 SF bug #422121 Insecurities in dict comparison.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
144 if verbose:
a06a704260e9 SF bug #422121 Insecurities in dict comparison.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
145 print
a06a704260e9 SF bug #422121 Insecurities in dict comparison.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
146
a06a704260e9 SF bug #422121 Insecurities in dict comparison.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
147 # Run test_one n times. At the start (before the bugs were fixed), 20
a06a704260e9 SF bug #422121 Insecurities in dict comparison.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
148 # consecutive runs of this test each blew up on or before the sixth time
a06a704260e9 SF bug #422121 Insecurities in dict comparison.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
149 # test_one was run. So n doesn't have to be large to get an interesting
a06a704260e9 SF bug #422121 Insecurities in dict comparison.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
150 # test.
a06a704260e9 SF bug #422121 Insecurities in dict comparison.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
151 # OTOH, calling with large n is also interesting, to ensure that the fixed
a06a704260e9 SF bug #422121 Insecurities in dict comparison.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
152 # code doesn't hold on to refcounts *too* long (in which case memory would
a06a704260e9 SF bug #422121 Insecurities in dict comparison.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
153 # leak).
a06a704260e9 SF bug #422121 Insecurities in dict comparison.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
154
a06a704260e9 SF bug #422121 Insecurities in dict comparison.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
155 def test(n):
a06a704260e9 SF bug #422121 Insecurities in dict comparison.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
156 for i in xrange(n):
a06a704260e9 SF bug #422121 Insecurities in dict comparison.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
157 test_one(random.randrange(1, 100))
a06a704260e9 SF bug #422121 Insecurities in dict comparison.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
158
a06a704260e9 SF bug #422121 Insecurities in dict comparison.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
159 # See last comment block for clues about good values for n.
a06a704260e9 SF bug #422121 Insecurities in dict comparison.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
160 test(100)
18017
facff5f50fcc Coredumpers from Michael Hudson, mutating dicts while printing or
Tim Peters <tim.peters@gmail.com>
parents: 17774
diff changeset
161
facff5f50fcc Coredumpers from Michael Hudson, mutating dicts while printing or
Tim Peters <tim.peters@gmail.com>
parents: 17774
diff changeset
162 ##########################################################################
18018
038e2f74800d Fix comment.
Tim Peters <tim.peters@gmail.com>
parents: 18017
diff changeset
163 # Another segfault bug, distilled by Michael Hudson from a c.l.py post.
18017
facff5f50fcc Coredumpers from Michael Hudson, mutating dicts while printing or
Tim Peters <tim.peters@gmail.com>
parents: 17774
diff changeset
164
facff5f50fcc Coredumpers from Michael Hudson, mutating dicts while printing or
Tim Peters <tim.peters@gmail.com>
parents: 17774
diff changeset
165 class Child:
facff5f50fcc Coredumpers from Michael Hudson, mutating dicts while printing or
Tim Peters <tim.peters@gmail.com>
parents: 17774
diff changeset
166 def __init__(self, parent):
facff5f50fcc Coredumpers from Michael Hudson, mutating dicts while printing or
Tim Peters <tim.peters@gmail.com>
parents: 17774
diff changeset
167 self.__dict__['parent'] = parent
facff5f50fcc Coredumpers from Michael Hudson, mutating dicts while printing or
Tim Peters <tim.peters@gmail.com>
parents: 17774
diff changeset
168 def __getattr__(self, attr):
facff5f50fcc Coredumpers from Michael Hudson, mutating dicts while printing or
Tim Peters <tim.peters@gmail.com>
parents: 17774
diff changeset
169 self.parent.a = 1
facff5f50fcc Coredumpers from Michael Hudson, mutating dicts while printing or
Tim Peters <tim.peters@gmail.com>
parents: 17774
diff changeset
170 self.parent.b = 1
facff5f50fcc Coredumpers from Michael Hudson, mutating dicts while printing or
Tim Peters <tim.peters@gmail.com>
parents: 17774
diff changeset
171 self.parent.c = 1
facff5f50fcc Coredumpers from Michael Hudson, mutating dicts while printing or
Tim Peters <tim.peters@gmail.com>
parents: 17774
diff changeset
172 self.parent.d = 1
facff5f50fcc Coredumpers from Michael Hudson, mutating dicts while printing or
Tim Peters <tim.peters@gmail.com>
parents: 17774
diff changeset
173 self.parent.e = 1
facff5f50fcc Coredumpers from Michael Hudson, mutating dicts while printing or
Tim Peters <tim.peters@gmail.com>
parents: 17774
diff changeset
174 self.parent.f = 1
facff5f50fcc Coredumpers from Michael Hudson, mutating dicts while printing or
Tim Peters <tim.peters@gmail.com>
parents: 17774
diff changeset
175 self.parent.g = 1
facff5f50fcc Coredumpers from Michael Hudson, mutating dicts while printing or
Tim Peters <tim.peters@gmail.com>
parents: 17774
diff changeset
176 self.parent.h = 1
facff5f50fcc Coredumpers from Michael Hudson, mutating dicts while printing or
Tim Peters <tim.peters@gmail.com>
parents: 17774
diff changeset
177 self.parent.i = 1
facff5f50fcc Coredumpers from Michael Hudson, mutating dicts while printing or
Tim Peters <tim.peters@gmail.com>
parents: 17774
diff changeset
178 return getattr(self.parent, attr)
facff5f50fcc Coredumpers from Michael Hudson, mutating dicts while printing or
Tim Peters <tim.peters@gmail.com>
parents: 17774
diff changeset
179
facff5f50fcc Coredumpers from Michael Hudson, mutating dicts while printing or
Tim Peters <tim.peters@gmail.com>
parents: 17774
diff changeset
180 class Parent:
facff5f50fcc Coredumpers from Michael Hudson, mutating dicts while printing or
Tim Peters <tim.peters@gmail.com>
parents: 17774
diff changeset
181 def __init__(self):
facff5f50fcc Coredumpers from Michael Hudson, mutating dicts while printing or
Tim Peters <tim.peters@gmail.com>
parents: 17774
diff changeset
182 self.a = Child(self)
facff5f50fcc Coredumpers from Michael Hudson, mutating dicts while printing or
Tim Peters <tim.peters@gmail.com>
parents: 17774
diff changeset
183
facff5f50fcc Coredumpers from Michael Hudson, mutating dicts while printing or
Tim Peters <tim.peters@gmail.com>
parents: 17774
diff changeset
184 # Hard to say what this will print! May vary from time to time. But
facff5f50fcc Coredumpers from Michael Hudson, mutating dicts while printing or
Tim Peters <tim.peters@gmail.com>
parents: 17774
diff changeset
185 # we're specifically trying to test the tp_print slot here, and this is
facff5f50fcc Coredumpers from Michael Hudson, mutating dicts while printing or
Tim Peters <tim.peters@gmail.com>
parents: 17774
diff changeset
186 # the clearest way to do it. We print the result to a temp file so that
facff5f50fcc Coredumpers from Michael Hudson, mutating dicts while printing or
Tim Peters <tim.peters@gmail.com>
parents: 17774
diff changeset
187 # the expected-output file doesn't need to change.
facff5f50fcc Coredumpers from Michael Hudson, mutating dicts while printing or
Tim Peters <tim.peters@gmail.com>
parents: 17774
diff changeset
188
facff5f50fcc Coredumpers from Michael Hudson, mutating dicts while printing or
Tim Peters <tim.peters@gmail.com>
parents: 17774
diff changeset
189 f = open(TESTFN, "w")
facff5f50fcc Coredumpers from Michael Hudson, mutating dicts while printing or
Tim Peters <tim.peters@gmail.com>
parents: 17774
diff changeset
190 print >> f, Parent().__dict__
facff5f50fcc Coredumpers from Michael Hudson, mutating dicts while printing or
Tim Peters <tim.peters@gmail.com>
parents: 17774
diff changeset
191 f.close()
facff5f50fcc Coredumpers from Michael Hudson, mutating dicts while printing or
Tim Peters <tim.peters@gmail.com>
parents: 17774
diff changeset
192 os.unlink(TESTFN)
facff5f50fcc Coredumpers from Michael Hudson, mutating dicts while printing or
Tim Peters <tim.peters@gmail.com>
parents: 17774
diff changeset
193
facff5f50fcc Coredumpers from Michael Hudson, mutating dicts while printing or
Tim Peters <tim.peters@gmail.com>
parents: 17774
diff changeset
194 ##########################################################################
facff5f50fcc Coredumpers from Michael Hudson, mutating dicts while printing or
Tim Peters <tim.peters@gmail.com>
parents: 17774
diff changeset
195 # And another core-dumper from Michael Hudson.
facff5f50fcc Coredumpers from Michael Hudson, mutating dicts while printing or
Tim Peters <tim.peters@gmail.com>
parents: 17774
diff changeset
196
facff5f50fcc Coredumpers from Michael Hudson, mutating dicts while printing or
Tim Peters <tim.peters@gmail.com>
parents: 17774
diff changeset
197 dict = {}
facff5f50fcc Coredumpers from Michael Hudson, mutating dicts while printing or
Tim Peters <tim.peters@gmail.com>
parents: 17774
diff changeset
198
facff5f50fcc Coredumpers from Michael Hudson, mutating dicts while printing or
Tim Peters <tim.peters@gmail.com>
parents: 17774
diff changeset
199 # Force dict to malloc its table.
facff5f50fcc Coredumpers from Michael Hudson, mutating dicts while printing or
Tim Peters <tim.peters@gmail.com>
parents: 17774
diff changeset
200 for i in range(1, 10):
facff5f50fcc Coredumpers from Michael Hudson, mutating dicts while printing or
Tim Peters <tim.peters@gmail.com>
parents: 17774
diff changeset
201 dict[i] = i
facff5f50fcc Coredumpers from Michael Hudson, mutating dicts while printing or
Tim Peters <tim.peters@gmail.com>
parents: 17774
diff changeset
202
facff5f50fcc Coredumpers from Michael Hudson, mutating dicts while printing or
Tim Peters <tim.peters@gmail.com>
parents: 17774
diff changeset
203 f = open(TESTFN, "w")
facff5f50fcc Coredumpers from Michael Hudson, mutating dicts while printing or
Tim Peters <tim.peters@gmail.com>
parents: 17774
diff changeset
204
facff5f50fcc Coredumpers from Michael Hudson, mutating dicts while printing or
Tim Peters <tim.peters@gmail.com>
parents: 17774
diff changeset
205 class Machiavelli:
facff5f50fcc Coredumpers from Michael Hudson, mutating dicts while printing or
Tim Peters <tim.peters@gmail.com>
parents: 17774
diff changeset
206 def __repr__(self):
facff5f50fcc Coredumpers from Michael Hudson, mutating dicts while printing or
Tim Peters <tim.peters@gmail.com>
parents: 17774
diff changeset
207 dict.clear()
facff5f50fcc Coredumpers from Michael Hudson, mutating dicts while printing or
Tim Peters <tim.peters@gmail.com>
parents: 17774
diff changeset
208
facff5f50fcc Coredumpers from Michael Hudson, mutating dicts while printing or
Tim Peters <tim.peters@gmail.com>
parents: 17774
diff changeset
209 # Michael sez: "doesn't crash without this. don't know why."
facff5f50fcc Coredumpers from Michael Hudson, mutating dicts while printing or
Tim Peters <tim.peters@gmail.com>
parents: 17774
diff changeset
210 # Tim sez: "luck of the draw; crashes with or without for me."
facff5f50fcc Coredumpers from Michael Hudson, mutating dicts while printing or
Tim Peters <tim.peters@gmail.com>
parents: 17774
diff changeset
211 print >> f
facff5f50fcc Coredumpers from Michael Hudson, mutating dicts while printing or
Tim Peters <tim.peters@gmail.com>
parents: 17774
diff changeset
212
facff5f50fcc Coredumpers from Michael Hudson, mutating dicts while printing or
Tim Peters <tim.peters@gmail.com>
parents: 17774
diff changeset
213 return `"machiavelli"`
facff5f50fcc Coredumpers from Michael Hudson, mutating dicts while printing or
Tim Peters <tim.peters@gmail.com>
parents: 17774
diff changeset
214
facff5f50fcc Coredumpers from Michael Hudson, mutating dicts while printing or
Tim Peters <tim.peters@gmail.com>
parents: 17774
diff changeset
215 def __hash__(self):
facff5f50fcc Coredumpers from Michael Hudson, mutating dicts while printing or
Tim Peters <tim.peters@gmail.com>
parents: 17774
diff changeset
216 return 0
facff5f50fcc Coredumpers from Michael Hudson, mutating dicts while printing or
Tim Peters <tim.peters@gmail.com>
parents: 17774
diff changeset
217
facff5f50fcc Coredumpers from Michael Hudson, mutating dicts while printing or
Tim Peters <tim.peters@gmail.com>
parents: 17774
diff changeset
218 dict[Machiavelli()] = Machiavelli()
facff5f50fcc Coredumpers from Michael Hudson, mutating dicts while printing or
Tim Peters <tim.peters@gmail.com>
parents: 17774
diff changeset
219
facff5f50fcc Coredumpers from Michael Hudson, mutating dicts while printing or
Tim Peters <tim.peters@gmail.com>
parents: 17774
diff changeset
220 print >> f, str(dict)
facff5f50fcc Coredumpers from Michael Hudson, mutating dicts while printing or
Tim Peters <tim.peters@gmail.com>
parents: 17774
diff changeset
221 f.close()
facff5f50fcc Coredumpers from Michael Hudson, mutating dicts while printing or
Tim Peters <tim.peters@gmail.com>
parents: 17774
diff changeset
222 os.unlink(TESTFN)
facff5f50fcc Coredumpers from Michael Hudson, mutating dicts while printing or
Tim Peters <tim.peters@gmail.com>
parents: 17774
diff changeset
223 del f, dict
18023
8d2bbbbf2cb9 lookdict: stop more insane core-dump mutating comparison cases. Should
Tim Peters <tim.peters@gmail.com>
parents: 18018
diff changeset
224
8d2bbbbf2cb9 lookdict: stop more insane core-dump mutating comparison cases. Should
Tim Peters <tim.peters@gmail.com>
parents: 18018
diff changeset
225
8d2bbbbf2cb9 lookdict: stop more insane core-dump mutating comparison cases. Should
Tim Peters <tim.peters@gmail.com>
parents: 18018
diff changeset
226 ##########################################################################
8d2bbbbf2cb9 lookdict: stop more insane core-dump mutating comparison cases. Should
Tim Peters <tim.peters@gmail.com>
parents: 18018
diff changeset
227 # And another core-dumper from Michael Hudson.
8d2bbbbf2cb9 lookdict: stop more insane core-dump mutating comparison cases. Should
Tim Peters <tim.peters@gmail.com>
parents: 18018
diff changeset
228
8d2bbbbf2cb9 lookdict: stop more insane core-dump mutating comparison cases. Should
Tim Peters <tim.peters@gmail.com>
parents: 18018
diff changeset
229 dict = {}
8d2bbbbf2cb9 lookdict: stop more insane core-dump mutating comparison cases. Should
Tim Peters <tim.peters@gmail.com>
parents: 18018
diff changeset
230
8d2bbbbf2cb9 lookdict: stop more insane core-dump mutating comparison cases. Should
Tim Peters <tim.peters@gmail.com>
parents: 18018
diff changeset
231 # let's force dict to malloc its table
8d2bbbbf2cb9 lookdict: stop more insane core-dump mutating comparison cases. Should
Tim Peters <tim.peters@gmail.com>
parents: 18018
diff changeset
232 for i in range(1, 10):
8d2bbbbf2cb9 lookdict: stop more insane core-dump mutating comparison cases. Should
Tim Peters <tim.peters@gmail.com>
parents: 18018
diff changeset
233 dict[i] = i
8d2bbbbf2cb9 lookdict: stop more insane core-dump mutating comparison cases. Should
Tim Peters <tim.peters@gmail.com>
parents: 18018
diff changeset
234
8d2bbbbf2cb9 lookdict: stop more insane core-dump mutating comparison cases. Should
Tim Peters <tim.peters@gmail.com>
parents: 18018
diff changeset
235 class Machiavelli2:
8d2bbbbf2cb9 lookdict: stop more insane core-dump mutating comparison cases. Should
Tim Peters <tim.peters@gmail.com>
parents: 18018
diff changeset
236 def __eq__(self, other):
8d2bbbbf2cb9 lookdict: stop more insane core-dump mutating comparison cases. Should
Tim Peters <tim.peters@gmail.com>
parents: 18018
diff changeset
237 dict.clear()
8d2bbbbf2cb9 lookdict: stop more insane core-dump mutating comparison cases. Should
Tim Peters <tim.peters@gmail.com>
parents: 18018
diff changeset
238 return 1
8d2bbbbf2cb9 lookdict: stop more insane core-dump mutating comparison cases. Should
Tim Peters <tim.peters@gmail.com>
parents: 18018
diff changeset
239
8d2bbbbf2cb9 lookdict: stop more insane core-dump mutating comparison cases. Should
Tim Peters <tim.peters@gmail.com>
parents: 18018
diff changeset
240 def __hash__(self):
8d2bbbbf2cb9 lookdict: stop more insane core-dump mutating comparison cases. Should
Tim Peters <tim.peters@gmail.com>
parents: 18018
diff changeset
241 return 0
8d2bbbbf2cb9 lookdict: stop more insane core-dump mutating comparison cases. Should
Tim Peters <tim.peters@gmail.com>
parents: 18018
diff changeset
242
8d2bbbbf2cb9 lookdict: stop more insane core-dump mutating comparison cases. Should
Tim Peters <tim.peters@gmail.com>
parents: 18018
diff changeset
243 dict[Machiavelli2()] = Machiavelli2()
8d2bbbbf2cb9 lookdict: stop more insane core-dump mutating comparison cases. Should
Tim Peters <tim.peters@gmail.com>
parents: 18018
diff changeset
244
8d2bbbbf2cb9 lookdict: stop more insane core-dump mutating comparison cases. Should
Tim Peters <tim.peters@gmail.com>
parents: 18018
diff changeset
245 try:
8d2bbbbf2cb9 lookdict: stop more insane core-dump mutating comparison cases. Should
Tim Peters <tim.peters@gmail.com>
parents: 18018
diff changeset
246 dict[Machiavelli2()]
8d2bbbbf2cb9 lookdict: stop more insane core-dump mutating comparison cases. Should
Tim Peters <tim.peters@gmail.com>
parents: 18018
diff changeset
247 except KeyError:
8d2bbbbf2cb9 lookdict: stop more insane core-dump mutating comparison cases. Should
Tim Peters <tim.peters@gmail.com>
parents: 18018
diff changeset
248 pass
8d2bbbbf2cb9 lookdict: stop more insane core-dump mutating comparison cases. Should
Tim Peters <tim.peters@gmail.com>
parents: 18018
diff changeset
249
8d2bbbbf2cb9 lookdict: stop more insane core-dump mutating comparison cases. Should
Tim Peters <tim.peters@gmail.com>
parents: 18018
diff changeset
250 del dict
8d2bbbbf2cb9 lookdict: stop more insane core-dump mutating comparison cases. Should
Tim Peters <tim.peters@gmail.com>
parents: 18018
diff changeset
251
8d2bbbbf2cb9 lookdict: stop more insane core-dump mutating comparison cases. Should
Tim Peters <tim.peters@gmail.com>
parents: 18018
diff changeset
252 ##########################################################################
8d2bbbbf2cb9 lookdict: stop more insane core-dump mutating comparison cases. Should
Tim Peters <tim.peters@gmail.com>
parents: 18018
diff changeset
253 # And another core-dumper from Michael Hudson.
8d2bbbbf2cb9 lookdict: stop more insane core-dump mutating comparison cases. Should
Tim Peters <tim.peters@gmail.com>
parents: 18018
diff changeset
254
8d2bbbbf2cb9 lookdict: stop more insane core-dump mutating comparison cases. Should
Tim Peters <tim.peters@gmail.com>
parents: 18018
diff changeset
255 dict = {}
8d2bbbbf2cb9 lookdict: stop more insane core-dump mutating comparison cases. Should
Tim Peters <tim.peters@gmail.com>
parents: 18018
diff changeset
256
8d2bbbbf2cb9 lookdict: stop more insane core-dump mutating comparison cases. Should
Tim Peters <tim.peters@gmail.com>
parents: 18018
diff changeset
257 # let's force dict to malloc its table
8d2bbbbf2cb9 lookdict: stop more insane core-dump mutating comparison cases. Should
Tim Peters <tim.peters@gmail.com>
parents: 18018
diff changeset
258 for i in range(1, 10):
8d2bbbbf2cb9 lookdict: stop more insane core-dump mutating comparison cases. Should
Tim Peters <tim.peters@gmail.com>
parents: 18018
diff changeset
259 dict[i] = i
8d2bbbbf2cb9 lookdict: stop more insane core-dump mutating comparison cases. Should
Tim Peters <tim.peters@gmail.com>
parents: 18018
diff changeset
260
8d2bbbbf2cb9 lookdict: stop more insane core-dump mutating comparison cases. Should
Tim Peters <tim.peters@gmail.com>
parents: 18018
diff changeset
261 class Machiavelli3:
8d2bbbbf2cb9 lookdict: stop more insane core-dump mutating comparison cases. Should
Tim Peters <tim.peters@gmail.com>
parents: 18018
diff changeset
262 def __init__(self, id):
8d2bbbbf2cb9 lookdict: stop more insane core-dump mutating comparison cases. Should
Tim Peters <tim.peters@gmail.com>
parents: 18018
diff changeset
263 self.id = id
8d2bbbbf2cb9 lookdict: stop more insane core-dump mutating comparison cases. Should
Tim Peters <tim.peters@gmail.com>
parents: 18018
diff changeset
264
8d2bbbbf2cb9 lookdict: stop more insane core-dump mutating comparison cases. Should
Tim Peters <tim.peters@gmail.com>
parents: 18018
diff changeset
265 def __eq__(self, other):
8d2bbbbf2cb9 lookdict: stop more insane core-dump mutating comparison cases. Should
Tim Peters <tim.peters@gmail.com>
parents: 18018
diff changeset
266 if self.id == other.id:
8d2bbbbf2cb9 lookdict: stop more insane core-dump mutating comparison cases. Should
Tim Peters <tim.peters@gmail.com>
parents: 18018
diff changeset
267 dict.clear()
8d2bbbbf2cb9 lookdict: stop more insane core-dump mutating comparison cases. Should
Tim Peters <tim.peters@gmail.com>
parents: 18018
diff changeset
268 return 1
8d2bbbbf2cb9 lookdict: stop more insane core-dump mutating comparison cases. Should
Tim Peters <tim.peters@gmail.com>
parents: 18018
diff changeset
269 else:
8d2bbbbf2cb9 lookdict: stop more insane core-dump mutating comparison cases. Should
Tim Peters <tim.peters@gmail.com>
parents: 18018
diff changeset
270 return 0
8d2bbbbf2cb9 lookdict: stop more insane core-dump mutating comparison cases. Should
Tim Peters <tim.peters@gmail.com>
parents: 18018
diff changeset
271
8d2bbbbf2cb9 lookdict: stop more insane core-dump mutating comparison cases. Should
Tim Peters <tim.peters@gmail.com>
parents: 18018
diff changeset
272 def __repr__(self):
8d2bbbbf2cb9 lookdict: stop more insane core-dump mutating comparison cases. Should
Tim Peters <tim.peters@gmail.com>
parents: 18018
diff changeset
273 return "%s(%s)"%(self.__class__.__name__, self.id)
8d2bbbbf2cb9 lookdict: stop more insane core-dump mutating comparison cases. Should
Tim Peters <tim.peters@gmail.com>
parents: 18018
diff changeset
274
8d2bbbbf2cb9 lookdict: stop more insane core-dump mutating comparison cases. Should
Tim Peters <tim.peters@gmail.com>
parents: 18018
diff changeset
275 def __hash__(self):
8d2bbbbf2cb9 lookdict: stop more insane core-dump mutating comparison cases. Should
Tim Peters <tim.peters@gmail.com>
parents: 18018
diff changeset
276 return 0
8d2bbbbf2cb9 lookdict: stop more insane core-dump mutating comparison cases. Should
Tim Peters <tim.peters@gmail.com>
parents: 18018
diff changeset
277
8d2bbbbf2cb9 lookdict: stop more insane core-dump mutating comparison cases. Should
Tim Peters <tim.peters@gmail.com>
parents: 18018
diff changeset
278 dict[Machiavelli3(1)] = Machiavelli3(0)
8d2bbbbf2cb9 lookdict: stop more insane core-dump mutating comparison cases. Should
Tim Peters <tim.peters@gmail.com>
parents: 18018
diff changeset
279 dict[Machiavelli3(2)] = Machiavelli3(0)
8d2bbbbf2cb9 lookdict: stop more insane core-dump mutating comparison cases. Should
Tim Peters <tim.peters@gmail.com>
parents: 18018
diff changeset
280
8d2bbbbf2cb9 lookdict: stop more insane core-dump mutating comparison cases. Should
Tim Peters <tim.peters@gmail.com>
parents: 18018
diff changeset
281 f = open(TESTFN, "w")
8d2bbbbf2cb9 lookdict: stop more insane core-dump mutating comparison cases. Should
Tim Peters <tim.peters@gmail.com>
parents: 18018
diff changeset
282 try:
8d2bbbbf2cb9 lookdict: stop more insane core-dump mutating comparison cases. Should
Tim Peters <tim.peters@gmail.com>
parents: 18018
diff changeset
283 try:
8d2bbbbf2cb9 lookdict: stop more insane core-dump mutating comparison cases. Should
Tim Peters <tim.peters@gmail.com>
parents: 18018
diff changeset
284 print >> f, dict[Machiavelli3(2)]
8d2bbbbf2cb9 lookdict: stop more insane core-dump mutating comparison cases. Should
Tim Peters <tim.peters@gmail.com>
parents: 18018
diff changeset
285 except KeyError:
8d2bbbbf2cb9 lookdict: stop more insane core-dump mutating comparison cases. Should
Tim Peters <tim.peters@gmail.com>
parents: 18018
diff changeset
286 pass
8d2bbbbf2cb9 lookdict: stop more insane core-dump mutating comparison cases. Should
Tim Peters <tim.peters@gmail.com>
parents: 18018
diff changeset
287 finally:
8d2bbbbf2cb9 lookdict: stop more insane core-dump mutating comparison cases. Should
Tim Peters <tim.peters@gmail.com>
parents: 18018
diff changeset
288 f.close()
8d2bbbbf2cb9 lookdict: stop more insane core-dump mutating comparison cases. Should
Tim Peters <tim.peters@gmail.com>
parents: 18018
diff changeset
289 os.unlink(TESTFN)
8d2bbbbf2cb9 lookdict: stop more insane core-dump mutating comparison cases. Should
Tim Peters <tim.peters@gmail.com>
parents: 18018
diff changeset
290
8d2bbbbf2cb9 lookdict: stop more insane core-dump mutating comparison cases. Should
Tim Peters <tim.peters@gmail.com>
parents: 18018
diff changeset
291 del dict
35940
cb1ff2a85e3d Fix typo in comment.
Neal Norwitz <nnorwitz@gmail.com>
parents: 34957
diff changeset
292 del dict1, dict2, dict1keys, dict2keys