Initial commit of OpenSPARC T2 design and verification files.
[OpenSPARC-T2-DV] / tools / src / nas,5.n2.os.2 / lib / python / lib / python2.4 / test / test_operations.py
CommitLineData
86530b38
AT
1# Python test set -- part 3, built-in operations.
2
3
4print '3. Operations'
5print 'XXX Mostly not yet implemented'
6
7
8print '3.1 Dictionary lookups succeed even if __cmp__() raises an exception'
9
10# SourceForge bug #112558:
11# http://sourceforge.net/bugs/?func=detailbug&bug_id=112558&group_id=5470
12
13class BadDictKey:
14 already_printed_raising_error = 0
15
16 def __hash__(self):
17 return hash(self.__class__)
18
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
31
32d = {}
33x1 = BadDictKey()
34x2 = BadDictKey()
35d[x1] = 1
36d[x2] = 2
37print "No exception passed through."
38
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.
45
46d = {}
47for i in range(5):
48 d[i] = i
49for i in range(5):
50 del d[i]
51for i in range(5, 9): # i==8 was the problem
52 d[i] = i