Exceptions raised during renaming in rotating file handlers are now passed to handleE...
[python.git] / Lib / test / test_operations.py
blobb599c9da9e3fb135d1167c9fb1d8a8f0ff614cbf
1 # Python test set -- part 3, built-in operations.
4 print '3. Operations'
5 print 'XXX Mostly not yet implemented'
8 print '3.1 Dictionary lookups succeed even if __cmp__() raises an exception'
10 # SourceForge bug #112558:
11 # http://sourceforge.net/bugs/?func=detailbug&bug_id=112558&group_id=5470
13 class BadDictKey:
14 already_printed_raising_error = 0
16 def __hash__(self):
17 return hash(self.__class__)
19 def __cmp__(self, other):
20 if isinstance(other, self.__class__):
21 if not BadDictKey.already_printed_raising_error:
22 # How many times __cmp__ gets called depends on the hash
23 # code and the internals of the dict implementation; we
24 # know it will be called at least once, but that's it.
25 # already_printed_raising_error makes sure the expected-
26 # output file prints the msg at most once.
27 BadDictKey.already_printed_raising_error = 1
28 print "raising error"
29 raise RuntimeError, "gotcha"
30 return other
32 d = {}
33 x1 = BadDictKey()
34 x2 = BadDictKey()
35 d[x1] = 1
36 d[x2] = 2
37 print "No exception passed through."
39 # Dict resizing bug, found by Jack Jansen in 2.2 CVS development.
40 # This version got an assert failure in debug build, infinite loop in
41 # release build. Unfortunately, provoking this kind of stuff requires
42 # a mix of inserts and deletes hitting exactly the right hash codes in
43 # exactly the right order, and I can't think of a randomized approach
44 # that would be *likely* to hit a failing case in reasonable time.
46 d = {}
47 for i in range(5):
48 d[i] = i
49 for i in range(5):
50 del d[i]
51 for i in range(5, 9): # i==8 was the problem
52 d[i] = i