Initial commit of OpenSPARC T2 architecture model.
[OpenSPARC-T2-SAM] / sam-t2 / devtools / v9 / lib / python2.4 / test / list_tests.py
CommitLineData
920dae64
AT
1"""
2Tests common to list and UserList.UserList
3"""
4
5import sys
6import os
7
8import unittest
9from test import test_support, seq_tests
10
11class CommonTest(seq_tests.CommonTest):
12
13 def test_init(self):
14 # Iterable arg is optional
15 self.assertEqual(self.type2test([]), self.type2test())
16
17 # Init clears previous values
18 a = self.type2test([1, 2, 3])
19 a.__init__()
20 self.assertEqual(a, self.type2test([]))
21
22 # Init overwrites previous values
23 a = self.type2test([1, 2, 3])
24 a.__init__([4, 5, 6])
25 self.assertEqual(a, self.type2test([4, 5, 6]))
26
27 # Mutables always return a new object
28 b = self.type2test(a)
29 self.assertNotEqual(id(a), id(b))
30 self.assertEqual(a, b)
31
32 def test_repr(self):
33 l0 = []
34 l2 = [0, 1, 2]
35 a0 = self.type2test(l0)
36 a2 = self.type2test(l2)
37
38 self.assertEqual(str(a0), str(l0))
39 self.assertEqual(repr(a0), repr(l0))
40 self.assertEqual(`a2`, `l2`)
41 self.assertEqual(str(a2), "[0, 1, 2]")
42 self.assertEqual(repr(a2), "[0, 1, 2]")
43
44 a2.append(a2)
45 a2.append(3)
46 self.assertEqual(str(a2), "[0, 1, 2, [...], 3]")
47 self.assertEqual(repr(a2), "[0, 1, 2, [...], 3]")
48
49 def test_print(self):
50 d = self.type2test(xrange(200))
51 d.append(d)
52 d.extend(xrange(200,400))
53 d.append(d)
54 d.append(400)
55 try:
56 fo = open(test_support.TESTFN, "wb")
57 print >> fo, d,
58 fo.close()
59 fo = open(test_support.TESTFN, "rb")
60 self.assertEqual(fo.read(), repr(d))
61 finally:
62 fo.close()
63 os.remove(test_support.TESTFN)
64
65 def test_set_subscript(self):
66 a = self.type2test(range(20))
67 self.assertRaises(ValueError, a.__setitem__, slice(0, 10, 0), [1,2,3])
68 self.assertRaises(TypeError, a.__setitem__, slice(0, 10), 1)
69 self.assertRaises(ValueError, a.__setitem__, slice(0, 10, 2), [1,2])
70 self.assertRaises(TypeError, a.__getitem__, 'x', 1)
71 a[slice(2,10,3)] = [1,2,3]
72 self.assertEqual(a, self.type2test([0, 1, 1, 3, 4, 2, 6, 7, 3,
73 9, 10, 11, 12, 13, 14, 15,
74 16, 17, 18, 19]))
75
76 def test_reversed(self):
77 a = self.type2test(range(20))
78 r = reversed(a)
79 self.assertEqual(list(r), self.type2test(range(19, -1, -1)))
80 self.assertRaises(StopIteration, r.next)
81 self.assertEqual(list(reversed(self.type2test())),
82 self.type2test())
83
84 def test_setitem(self):
85 a = self.type2test([0, 1])
86 a[0] = 0
87 a[1] = 100
88 self.assertEqual(a, self.type2test([0, 100]))
89 a[-1] = 200
90 self.assertEqual(a, self.type2test([0, 200]))
91 a[-2] = 100
92 self.assertEqual(a, self.type2test([100, 200]))
93 self.assertRaises(IndexError, a.__setitem__, -3, 200)
94 self.assertRaises(IndexError, a.__setitem__, 2, 200)
95
96 a = self.type2test([])
97 self.assertRaises(IndexError, a.__setitem__, 0, 200)
98 self.assertRaises(IndexError, a.__setitem__, -1, 200)
99 self.assertRaises(TypeError, a.__setitem__)
100
101 a = self.type2test([0,1,2,3,4])
102 a[0L] = 1
103 a[1L] = 2
104 a[2L] = 3
105 self.assertEqual(a, self.type2test([1,2,3,3,4]))
106 a[0] = 5
107 a[1] = 6
108 a[2] = 7
109 self.assertEqual(a, self.type2test([5,6,7,3,4]))
110 a[-2L] = 88
111 a[-1L] = 99
112 self.assertEqual(a, self.type2test([5,6,7,88,99]))
113 a[-2] = 8
114 a[-1] = 9
115 self.assertEqual(a, self.type2test([5,6,7,8,9]))
116
117 def test_delitem(self):
118 a = self.type2test([0, 1])
119 del a[1]
120 self.assertEqual(a, [0])
121 del a[0]
122 self.assertEqual(a, [])
123
124 a = self.type2test([0, 1])
125 del a[-2]
126 self.assertEqual(a, [1])
127 del a[-1]
128 self.assertEqual(a, [])
129
130 a = self.type2test([0, 1])
131 self.assertRaises(IndexError, a.__delitem__, -3)
132 self.assertRaises(IndexError, a.__delitem__, 2)
133
134 a = self.type2test([])
135 self.assertRaises(IndexError, a.__delitem__, 0)
136
137 self.assertRaises(TypeError, a.__delitem__)
138
139 def test_setslice(self):
140 l = [0, 1]
141 a = self.type2test(l)
142
143 for i in range(-3, 4):
144 a[:i] = l[:i]
145 self.assertEqual(a, l)
146 a2 = a[:]
147 a2[:i] = a[:i]
148 self.assertEqual(a2, a)
149 a[i:] = l[i:]
150 self.assertEqual(a, l)
151 a2 = a[:]
152 a2[i:] = a[i:]
153 self.assertEqual(a2, a)
154 for j in range(-3, 4):
155 a[i:j] = l[i:j]
156 self.assertEqual(a, l)
157 a2 = a[:]
158 a2[i:j] = a[i:j]
159 self.assertEqual(a2, a)
160
161 aa2 = a2[:]
162 aa2[:0] = [-2, -1]
163 self.assertEqual(aa2, [-2, -1, 0, 1])
164 aa2[0:] = []
165 self.assertEqual(aa2, [])
166
167 a = self.type2test([1, 2, 3, 4, 5])
168 a[:-1] = a
169 self.assertEqual(a, self.type2test([1, 2, 3, 4, 5, 5]))
170 a = self.type2test([1, 2, 3, 4, 5])
171 a[1:] = a
172 self.assertEqual(a, self.type2test([1, 1, 2, 3, 4, 5]))
173 a = self.type2test([1, 2, 3, 4, 5])
174 a[1:-1] = a
175 self.assertEqual(a, self.type2test([1, 1, 2, 3, 4, 5, 5]))
176
177 a = self.type2test([])
178 a[:] = tuple(range(10))
179 self.assertEqual(a, self.type2test(range(10)))
180
181 self.assertRaises(TypeError, a.__setslice__, 0, 1, 5)
182
183 self.assertRaises(TypeError, a.__setslice__)
184
185 def test_delslice(self):
186 a = self.type2test([0, 1])
187 del a[1:2]
188 del a[0:1]
189 self.assertEqual(a, self.type2test([]))
190
191 a = self.type2test([0, 1])
192 del a[1L:2L]
193 del a[0L:1L]
194 self.assertEqual(a, self.type2test([]))
195
196 a = self.type2test([0, 1])
197 del a[-2:-1]
198 self.assertEqual(a, self.type2test([1]))
199
200 a = self.type2test([0, 1])
201 del a[-2L:-1L]
202 self.assertEqual(a, self.type2test([1]))
203
204 a = self.type2test([0, 1])
205 del a[1:]
206 del a[:1]
207 self.assertEqual(a, self.type2test([]))
208
209 a = self.type2test([0, 1])
210 del a[1L:]
211 del a[:1L]
212 self.assertEqual(a, self.type2test([]))
213
214 a = self.type2test([0, 1])
215 del a[-1:]
216 self.assertEqual(a, self.type2test([0]))
217
218 a = self.type2test([0, 1])
219 del a[-1L:]
220 self.assertEqual(a, self.type2test([0]))
221
222 a = self.type2test([0, 1])
223 del a[:]
224 self.assertEqual(a, self.type2test([]))
225
226 def test_append(self):
227 a = self.type2test([])
228 a.append(0)
229 a.append(1)
230 a.append(2)
231 self.assertEqual(a, self.type2test([0, 1, 2]))
232
233 self.assertRaises(TypeError, a.append)
234
235 def test_extend(self):
236 a1 = self.type2test([0])
237 a2 = self.type2test((0, 1))
238 a = a1[:]
239 a.extend(a2)
240 self.assertEqual(a, a1 + a2)
241
242 a.extend(self.type2test([]))
243 self.assertEqual(a, a1 + a2)
244
245 a.extend(a)
246 self.assertEqual(a, self.type2test([0, 0, 1, 0, 0, 1]))
247
248 a = self.type2test("spam")
249 a.extend("eggs")
250 self.assertEqual(a, list("spameggs"))
251
252 self.assertRaises(TypeError, a.extend, None)
253
254 self.assertRaises(TypeError, a.extend)
255
256 def test_insert(self):
257 a = self.type2test([0, 1, 2])
258 a.insert(0, -2)
259 a.insert(1, -1)
260 a.insert(2, 0)
261 self.assertEqual(a, [-2, -1, 0, 0, 1, 2])
262
263 b = a[:]
264 b.insert(-2, "foo")
265 b.insert(-200, "left")
266 b.insert(200, "right")
267 self.assertEqual(b, self.type2test(["left",-2,-1,0,0,"foo",1,2,"right"]))
268
269 self.assertRaises(TypeError, a.insert)
270
271 def test_pop(self):
272 from decimal import Decimal
273 a = self.type2test([-1, 0, 1])
274 a.pop()
275 self.assertEqual(a, [-1, 0])
276 a.pop(0)
277 self.assertEqual(a, [0])
278 self.assertRaises(IndexError, a.pop, 5)
279 a.pop(0)
280 self.assertEqual(a, [])
281 self.assertRaises(IndexError, a.pop)
282 self.assertRaises(TypeError, a.pop, 42, 42)
283 a = self.type2test([0, 10, 20, 30, 40])
284 self.assertEqual(a.pop(Decimal(2)), 20)
285 self.assertRaises(IndexError, a.pop, Decimal(25))
286
287 def test_remove(self):
288 a = self.type2test([0, 0, 1])
289 a.remove(1)
290 self.assertEqual(a, [0, 0])
291 a.remove(0)
292 self.assertEqual(a, [0])
293 a.remove(0)
294 self.assertEqual(a, [])
295
296 self.assertRaises(ValueError, a.remove, 0)
297
298 self.assertRaises(TypeError, a.remove)
299
300 class BadExc(Exception):
301 pass
302
303 class BadCmp:
304 def __eq__(self, other):
305 if other == 2:
306 raise BadExc()
307 return False
308
309 a = self.type2test([0, 1, 2, 3])
310 self.assertRaises(BadExc, a.remove, BadCmp())
311
312 def test_count(self):
313 a = self.type2test([0, 1, 2])*3
314 self.assertEqual(a.count(0), 3)
315 self.assertEqual(a.count(1), 3)
316 self.assertEqual(a.count(3), 0)
317
318 self.assertRaises(TypeError, a.count)
319
320 class BadExc(Exception):
321 pass
322
323 class BadCmp:
324 def __eq__(self, other):
325 if other == 2:
326 raise BadExc()
327 return False
328
329 self.assertRaises(BadExc, a.count, BadCmp())
330
331 def test_index(self):
332 u = self.type2test([0, 1])
333 self.assertEqual(u.index(0), 0)
334 self.assertEqual(u.index(1), 1)
335 self.assertRaises(ValueError, u.index, 2)
336
337 u = self.type2test([-2, -1, 0, 0, 1, 2])
338 self.assertEqual(u.count(0), 2)
339 self.assertEqual(u.index(0), 2)
340 self.assertEqual(u.index(0, 2), 2)
341 self.assertEqual(u.index(-2, -10), 0)
342 self.assertEqual(u.index(0, 3), 3)
343 self.assertEqual(u.index(0, 3, 4), 3)
344 self.assertRaises(ValueError, u.index, 2, 0, -10)
345
346 self.assertRaises(TypeError, u.index)
347
348 class BadExc(Exception):
349 pass
350
351 class BadCmp:
352 def __eq__(self, other):
353 if other == 2:
354 raise BadExc()
355 return False
356
357 a = self.type2test([0, 1, 2, 3])
358 self.assertRaises(BadExc, a.index, BadCmp())
359
360 a = self.type2test([-2, -1, 0, 0, 1, 2])
361 self.assertEqual(a.index(0), 2)
362 self.assertEqual(a.index(0, 2), 2)
363 self.assertEqual(a.index(0, -4), 2)
364 self.assertEqual(a.index(-2, -10), 0)
365 self.assertEqual(a.index(0, 3), 3)
366 self.assertEqual(a.index(0, -3), 3)
367 self.assertEqual(a.index(0, 3, 4), 3)
368 self.assertEqual(a.index(0, -3, -2), 3)
369 self.assertEqual(a.index(0, -4*sys.maxint, 4*sys.maxint), 2)
370 self.assertRaises(ValueError, a.index, 0, 4*sys.maxint,-4*sys.maxint)
371 self.assertRaises(ValueError, a.index, 2, 0, -10)
372 a.remove(0)
373 self.assertRaises(ValueError, a.index, 2, 0, 4)
374 self.assertEqual(a, self.type2test([-2, -1, 0, 1, 2]))
375
376 # Test modifying the list during index's iteration
377 class EvilCmp:
378 def __init__(self, victim):
379 self.victim = victim
380 def __eq__(self, other):
381 del self.victim[:]
382 return False
383 a = self.type2test()
384 a[:] = [EvilCmp(a) for _ in xrange(100)]
385 # This used to seg fault before patch #1005778
386 self.assertRaises(ValueError, a.index, None)
387
388 def test_reverse(self):
389 u = self.type2test([-2, -1, 0, 1, 2])
390 u2 = u[:]
391 u.reverse()
392 self.assertEqual(u, [2, 1, 0, -1, -2])
393 u.reverse()
394 self.assertEqual(u, u2)
395
396 self.assertRaises(TypeError, u.reverse, 42)
397
398 def test_sort(self):
399 u = self.type2test([1, 0])
400 u.sort()
401 self.assertEqual(u, [0, 1])
402
403 u = self.type2test([2,1,0,-1,-2])
404 u.sort()
405 self.assertEqual(u, self.type2test([-2,-1,0,1,2]))
406
407 self.assertRaises(TypeError, u.sort, 42, 42)
408
409 def revcmp(a, b):
410 return cmp(b, a)
411 u.sort(revcmp)
412 self.assertEqual(u, self.type2test([2,1,0,-1,-2]))
413
414 # The following dumps core in unpatched Python 1.5:
415 def myComparison(x,y):
416 return cmp(x%3, y%7)
417 z = self.type2test(range(12))
418 z.sort(myComparison)
419
420 self.assertRaises(TypeError, z.sort, 2)
421
422 def selfmodifyingComparison(x,y):
423 z.append(1)
424 return cmp(x, y)
425 self.assertRaises(ValueError, z.sort, selfmodifyingComparison)
426
427 self.assertRaises(TypeError, z.sort, lambda x, y: 's')
428
429 self.assertRaises(TypeError, z.sort, 42, 42, 42, 42)
430
431 def test_slice(self):
432 u = self.type2test("spam")
433 u[:2] = "h"
434 self.assertEqual(u, list("ham"))
435
436 def test_iadd(self):
437 super(CommonTest, self).test_iadd()
438 u = self.type2test([0, 1])
439 u2 = u
440 u += [2, 3]
441 self.assert_(u is u2)
442
443 u = self.type2test("spam")
444 u += "eggs"
445 self.assertEqual(u, self.type2test("spameggs"))
446
447 self.assertRaises(TypeError, u.__iadd__, None)
448
449 def test_imul(self):
450 u = self.type2test([0, 1])
451 u *= 3
452 self.assertEqual(u, self.type2test([0, 1, 0, 1, 0, 1]))
453 u *= 0
454 self.assertEqual(u, self.type2test([]))
455 s = self.type2test([])
456 oldid = id(s)
457 s *= 10
458 self.assertEqual(id(s), oldid)
459
460 def test_extendedslicing(self):
461 # subscript
462 a = self.type2test([0,1,2,3,4])
463
464 # deletion
465 del a[::2]
466 self.assertEqual(a, self.type2test([1,3]))
467 a = self.type2test(range(5))
468 del a[1::2]
469 self.assertEqual(a, self.type2test([0,2,4]))
470 a = self.type2test(range(5))
471 del a[1::-2]
472 self.assertEqual(a, self.type2test([0,2,3,4]))
473 a = self.type2test(range(10))
474 del a[::1000]
475 self.assertEqual(a, self.type2test([1, 2, 3, 4, 5, 6, 7, 8, 9]))
476 # assignment
477 a = self.type2test(range(10))
478 a[::2] = [-1]*5
479 self.assertEqual(a, self.type2test([-1, 1, -1, 3, -1, 5, -1, 7, -1, 9]))
480 a = self.type2test(range(10))
481 a[::-4] = [10]*3
482 self.assertEqual(a, self.type2test([0, 10, 2, 3, 4, 10, 6, 7, 8 ,10]))
483 a = self.type2test(range(4))
484 a[::-1] = a
485 self.assertEqual(a, self.type2test([3, 2, 1, 0]))
486 a = self.type2test(range(10))
487 b = a[:]
488 c = a[:]
489 a[2:3] = self.type2test(["two", "elements"])
490 b[slice(2,3)] = self.type2test(["two", "elements"])
491 c[2:3:] = self.type2test(["two", "elements"])
492 self.assertEqual(a, b)
493 self.assertEqual(a, c)
494 a = self.type2test(range(10))
495 a[::2] = tuple(range(5))
496 self.assertEqual(a, self.type2test([0, 1, 1, 3, 2, 5, 3, 7, 4, 9]))
497
498 def test_constructor_exception_handling(self):
499 # Bug #1242657
500 class F(object):
501 def __iter__(self):
502 yield 23
503 def __len__(self):
504 raise KeyboardInterrupt
505 self.assertRaises(KeyboardInterrupt, list, F())