blob: e8d9cb066e10b9faa963df50183885151a9c14b4 [file] [log] [blame]
Guido van Rossum447b4a01999-03-26 16:20:45 +00001# Check every path through every method of UserList
2
3from UserList import UserList
Tim Petersf5fa0fc2000-09-19 20:31:24 +00004from test_support import TestFailed
5
6# Use check instead of assert so -O doesn't render the
7# test useless.
8def check(predicate, msg):
9 if not predicate:
10 raise TestFailed(msg + " failed")
Guido van Rossum447b4a01999-03-26 16:20:45 +000011
12l0 = []
13l1 = [0]
14l2 = [0, 1]
15
16# Test constructors
17
18u = UserList()
19u0 = UserList(l0)
20u1 = UserList(l1)
21u2 = UserList(l2)
22
23uu = UserList(u)
24uu0 = UserList(u0)
25uu1 = UserList(u1)
26uu2 = UserList(u2)
27
Jeremy Hylton6a973c72000-03-31 00:17:46 +000028v = UserList(tuple(u))
29class OtherList:
30 def __init__(self, initlist):
31 self.__data = initlist
32 def __len__(self):
33 return len(self.__data)
34 def __getitem__(self, i):
35 return self.__data[i]
36v0 = UserList(OtherList(u0))
37vv = UserList("this is also a sequence")
38
Guido van Rossum447b4a01999-03-26 16:20:45 +000039# Test __repr__
40
Tim Petersf5fa0fc2000-09-19 20:31:24 +000041check(str(u0) == str(l0), "str(u0) == str(l0)")
42check(repr(u1) == repr(l1), "repr(u1) == repr(l1)")
43check(`u2` == `l2`, "`u2` == `l2`")
Guido van Rossum447b4a01999-03-26 16:20:45 +000044
45# Test __cmp__ and __len__
46
47def mycmp(a, b):
48 r = cmp(a, b)
49 if r < 0: return -1
50 if r > 0: return 1
51 return r
52
53all = [l0, l1, l2, u, u0, u1, u2, uu, uu0, uu1, uu2]
54for a in all:
55 for b in all:
Tim Petersf5fa0fc2000-09-19 20:31:24 +000056 check(mycmp(a, b) == mycmp(len(a), len(b)),
57 "mycmp(a, b) == mycmp(len(a), len(b))")
Guido van Rossum447b4a01999-03-26 16:20:45 +000058
59# Test __getitem__
60
61for i in range(len(u2)):
Tim Petersf5fa0fc2000-09-19 20:31:24 +000062 check(u2[i] == i, "u2[i] == i")
Guido van Rossum447b4a01999-03-26 16:20:45 +000063
64# Test __setitem__
65
66uu2[0] = 0
67uu2[1] = 100
68try:
69 uu2[2] = 200
70except IndexError:
71 pass
72else:
Tim Petersf5fa0fc2000-09-19 20:31:24 +000073 raise TestFailed("uu2[2] shouldn't be assignable")
Guido van Rossum447b4a01999-03-26 16:20:45 +000074
75# Test __delitem__
76
77del uu2[1]
78del uu2[0]
79try:
80 del uu2[0]
81except IndexError:
82 pass
83else:
Tim Petersf5fa0fc2000-09-19 20:31:24 +000084 raise TestFailed("uu2[0] shouldn't be deletable")
Guido van Rossum447b4a01999-03-26 16:20:45 +000085
86# Test __getslice__
87
88for i in range(-3, 4):
Tim Petersf5fa0fc2000-09-19 20:31:24 +000089 check(u2[:i] == l2[:i], "u2[:i] == l2[:i]")
90 check(u2[i:] == l2[i:], "u2[i:] == l2[i:]")
Guido van Rossum447b4a01999-03-26 16:20:45 +000091 for j in range(-3, 4):
Tim Petersf5fa0fc2000-09-19 20:31:24 +000092 check(u2[i:j] == l2[i:j], "u2[i:j] == l2[i:j]")
Guido van Rossum447b4a01999-03-26 16:20:45 +000093
94# Test __setslice__
95
96for i in range(-3, 4):
97 u2[:i] = l2[:i]
Tim Petersf5fa0fc2000-09-19 20:31:24 +000098 check(u2 == l2, "u2 == l2")
Guido van Rossum447b4a01999-03-26 16:20:45 +000099 u2[i:] = l2[i:]
Tim Petersf5fa0fc2000-09-19 20:31:24 +0000100 check(u2 == l2, "u2 == l2")
Guido van Rossum447b4a01999-03-26 16:20:45 +0000101 for j in range(-3, 4):
102 u2[i:j] = l2[i:j]
Tim Petersf5fa0fc2000-09-19 20:31:24 +0000103 check(u2 == l2, "u2 == l2")
Guido van Rossum447b4a01999-03-26 16:20:45 +0000104
105uu2 = u2[:]
106uu2[:0] = [-2, -1]
Tim Petersf5fa0fc2000-09-19 20:31:24 +0000107check(uu2 == [-2, -1, 0, 1], "uu2 == [-2, -1, 0, 1]")
Guido van Rossum447b4a01999-03-26 16:20:45 +0000108uu2[0:] = []
Tim Petersf5fa0fc2000-09-19 20:31:24 +0000109check(uu2 == [], "uu2 == []")
110
111# Test __contains__
112for i in u2:
113 check(i in u2, "i in u2")
114for i in min(u2)-1, max(u2)+1:
115 check(i not in u2, "i not in u2")
Guido van Rossum447b4a01999-03-26 16:20:45 +0000116
117# Test __delslice__
118
119uu2 = u2[:]
120del uu2[1:2]
121del uu2[0:1]
Tim Petersf5fa0fc2000-09-19 20:31:24 +0000122check(uu2 == [], "uu2 == []")
Guido van Rossum447b4a01999-03-26 16:20:45 +0000123
124uu2 = u2[:]
125del uu2[1:]
126del uu2[:1]
Tim Petersf5fa0fc2000-09-19 20:31:24 +0000127check(uu2 == [], "uu2 == []")
Guido van Rossum447b4a01999-03-26 16:20:45 +0000128
129# Test __add__, __radd__, __mul__ and __rmul__
130
Tim Petersf5fa0fc2000-09-19 20:31:24 +0000131check(u1 + [] == [] + u1 == u1, "u1 + [] == [] + u1 == u1")
132check(u1 + [1] == u2, "u1 + [1] == u2")
133check([-1] + u1 == [-1, 0], "[-1] + u1 == [-1, 0]")
134check(u2 == u2*1 == 1*u2, "u2 == u2*1 == 1*u2")
135check(u2+u2 == u2*2 == 2*u2, "u2+u2 == u2*2 == 2*u2")
136check(u2+u2+u2 == u2*3 == 3*u2, "u2+u2+u2 == u2*3 == 3*u2")
Guido van Rossum447b4a01999-03-26 16:20:45 +0000137
138# Test append
139
140u = u1[:]
141u.append(1)
Tim Petersf5fa0fc2000-09-19 20:31:24 +0000142check(u == u2, "u == u2")
Guido van Rossum447b4a01999-03-26 16:20:45 +0000143
144# Test insert
145
146u = u2[:]
147u.insert(0, -1)
Tim Petersf5fa0fc2000-09-19 20:31:24 +0000148check(u == [-1, 0, 1], "u == [-1, 0, 1]")
Guido van Rossum447b4a01999-03-26 16:20:45 +0000149
150# Test pop
151
152u = [-1] + u2
153u.pop()
Tim Petersf5fa0fc2000-09-19 20:31:24 +0000154check(u == [-1, 0], "u == [-1, 0]")
Guido van Rossum447b4a01999-03-26 16:20:45 +0000155u.pop(0)
Tim Petersf5fa0fc2000-09-19 20:31:24 +0000156check(u == [0], "u == [0]")
Guido van Rossum447b4a01999-03-26 16:20:45 +0000157
158# Test remove
159
160u = u2[:]
161u.remove(1)
Tim Petersf5fa0fc2000-09-19 20:31:24 +0000162check(u == u1, "u == u1")
Guido van Rossum447b4a01999-03-26 16:20:45 +0000163
164# Test count
165u = u2*3
Tim Petersf5fa0fc2000-09-19 20:31:24 +0000166check(u.count(0) == 3, "u.count(0) == 3")
167check(u.count(1) == 3, "u.count(1) == 3")
168check(u.count(2) == 0, "u.count(2) == 0")
Guido van Rossum447b4a01999-03-26 16:20:45 +0000169
170
171# Test index
172
Tim Petersf5fa0fc2000-09-19 20:31:24 +0000173check(u2.index(0) == 0, "u2.index(0) == 0")
174check(u2.index(1) == 1, "u2.index(1) == 1")
Guido van Rossum447b4a01999-03-26 16:20:45 +0000175try:
176 u2.index(2)
177except ValueError:
178 pass
179else:
Tim Petersf5fa0fc2000-09-19 20:31:24 +0000180 raise TestFailed("expected ValueError")
Guido van Rossum447b4a01999-03-26 16:20:45 +0000181
182# Test reverse
183
184u = u2[:]
185u.reverse()
Tim Petersf5fa0fc2000-09-19 20:31:24 +0000186check(u == [1, 0], "u == [1, 0]")
Guido van Rossum447b4a01999-03-26 16:20:45 +0000187u.reverse()
Tim Petersf5fa0fc2000-09-19 20:31:24 +0000188check(u == u2, "u == u2")
Guido van Rossum447b4a01999-03-26 16:20:45 +0000189
190# Test sort
191
192u = UserList([1, 0])
193u.sort()
Tim Petersf5fa0fc2000-09-19 20:31:24 +0000194check(u == u2, "u == u2")
Guido van Rossum447b4a01999-03-26 16:20:45 +0000195
196# Test extend
197
198u = u1[:]
199u.extend(u2)
Tim Petersf5fa0fc2000-09-19 20:31:24 +0000200check(u == u1 + u2, "u == u1 + u2")