- Got rid of newmodule.c
[python/dscho.git] / Lib / test / test_userlist.py
blobe655d1f6cbbaa88d437f97ccaa9ec82256b06d5d
1 # Check every path through every method of UserList
3 from UserList import UserList
4 from test_support import TestFailed
6 # Use check instead of assert so -O doesn't render the
7 # test useless.
8 # XXX: could use the verify function in test_support instead
9 def check(predicate, msg):
10 if not predicate:
11 raise TestFailed(msg + " failed")
13 l0 = []
14 l1 = [0]
15 l2 = [0, 1]
17 # Test constructors
19 u = UserList()
20 u0 = UserList(l0)
21 u1 = UserList(l1)
22 u2 = UserList(l2)
24 uu = UserList(u)
25 uu0 = UserList(u0)
26 uu1 = UserList(u1)
27 uu2 = UserList(u2)
29 v = UserList(tuple(u))
30 class OtherList:
31 def __init__(self, initlist):
32 self.__data = initlist
33 def __len__(self):
34 return len(self.__data)
35 def __getitem__(self, i):
36 return self.__data[i]
37 v0 = UserList(OtherList(u0))
38 vv = UserList("this is also a sequence")
40 # Test __repr__
42 check(str(u0) == str(l0), "str(u0) == str(l0)")
43 check(repr(u1) == repr(l1), "repr(u1) == repr(l1)")
44 check(`u2` == `l2`, "`u2` == `l2`")
46 # Test __cmp__ and __len__
48 def mycmp(a, b):
49 r = cmp(a, b)
50 if r < 0: return -1
51 if r > 0: return 1
52 return r
54 all = [l0, l1, l2, u, u0, u1, u2, uu, uu0, uu1, uu2]
55 for a in all:
56 for b in all:
57 check(mycmp(a, b) == mycmp(len(a), len(b)),
58 "mycmp(a, b) == mycmp(len(a), len(b))")
60 # Test __getitem__
62 for i in range(len(u2)):
63 check(u2[i] == i, "u2[i] == i")
65 # Test __setitem__
67 uu2[0] = 0
68 uu2[1] = 100
69 try:
70 uu2[2] = 200
71 except IndexError:
72 pass
73 else:
74 raise TestFailed("uu2[2] shouldn't be assignable")
76 # Test __delitem__
78 del uu2[1]
79 del uu2[0]
80 try:
81 del uu2[0]
82 except IndexError:
83 pass
84 else:
85 raise TestFailed("uu2[0] shouldn't be deletable")
87 # Test __getslice__
89 for i in range(-3, 4):
90 check(u2[:i] == l2[:i], "u2[:i] == l2[:i]")
91 check(u2[i:] == l2[i:], "u2[i:] == l2[i:]")
92 for j in range(-3, 4):
93 check(u2[i:j] == l2[i:j], "u2[i:j] == l2[i:j]")
95 # Test __setslice__
97 for i in range(-3, 4):
98 u2[:i] = l2[:i]
99 check(u2 == l2, "u2 == l2")
100 u2[i:] = l2[i:]
101 check(u2 == l2, "u2 == l2")
102 for j in range(-3, 4):
103 u2[i:j] = l2[i:j]
104 check(u2 == l2, "u2 == l2")
106 uu2 = u2[:]
107 uu2[:0] = [-2, -1]
108 check(uu2 == [-2, -1, 0, 1], "uu2 == [-2, -1, 0, 1]")
109 uu2[0:] = []
110 check(uu2 == [], "uu2 == []")
112 # Test __contains__
113 for i in u2:
114 check(i in u2, "i in u2")
115 for i in min(u2)-1, max(u2)+1:
116 check(i not in u2, "i not in u2")
118 # Test __delslice__
120 uu2 = u2[:]
121 del uu2[1:2]
122 del uu2[0:1]
123 check(uu2 == [], "uu2 == []")
125 uu2 = u2[:]
126 del uu2[1:]
127 del uu2[:1]
128 check(uu2 == [], "uu2 == []")
130 # Test __add__, __radd__, __mul__ and __rmul__
132 check(u1 + [] == [] + u1 == u1, "u1 + [] == [] + u1 == u1")
133 check(u1 + [1] == u2, "u1 + [1] == u2")
134 check([-1] + u1 == [-1, 0], "[-1] + u1 == [-1, 0]")
135 check(u2 == u2*1 == 1*u2, "u2 == u2*1 == 1*u2")
136 check(u2+u2 == u2*2 == 2*u2, "u2+u2 == u2*2 == 2*u2")
137 check(u2+u2+u2 == u2*3 == 3*u2, "u2+u2+u2 == u2*3 == 3*u2")
139 # Test append
141 u = u1[:]
142 u.append(1)
143 check(u == u2, "u == u2")
145 # Test insert
147 u = u2[:]
148 u.insert(0, -1)
149 check(u == [-1, 0, 1], "u == [-1, 0, 1]")
151 # Test pop
153 u = [-1] + u2
154 u.pop()
155 check(u == [-1, 0], "u == [-1, 0]")
156 u.pop(0)
157 check(u == [0], "u == [0]")
159 # Test remove
161 u = u2[:]
162 u.remove(1)
163 check(u == u1, "u == u1")
165 # Test count
166 u = u2*3
167 check(u.count(0) == 3, "u.count(0) == 3")
168 check(u.count(1) == 3, "u.count(1) == 3")
169 check(u.count(2) == 0, "u.count(2) == 0")
172 # Test index
174 check(u2.index(0) == 0, "u2.index(0) == 0")
175 check(u2.index(1) == 1, "u2.index(1) == 1")
176 try:
177 u2.index(2)
178 except ValueError:
179 pass
180 else:
181 raise TestFailed("expected ValueError")
183 # Test reverse
185 u = u2[:]
186 u.reverse()
187 check(u == [1, 0], "u == [1, 0]")
188 u.reverse()
189 check(u == u2, "u == u2")
191 # Test sort
193 u = UserList([1, 0])
194 u.sort()
195 check(u == u2, "u == u2")
197 # Test extend
199 u = u1[:]
200 u.extend(u2)
201 check(u == u1 + u2, "u == u1 + u2")