blob: 0c656fd098b311e37906fbe079195935b9382c28 [file] [log] [blame]
Walter Dörwald1dde95d2003-12-08 11:38:45 +00001"""
2Tests common to list and UserList.UserList
3"""
4
5import sys
Raymond Hettingerbcab2b22004-09-29 08:03:17 +00006import os
Walter Dörwald1dde95d2003-12-08 11:38:45 +00007
Benjamin Petersonee8712c2008-05-20 21:35:26 +00008from test import support, seq_tests
Walter Dörwald1dde95d2003-12-08 11:38:45 +00009
Raymond Hettinger70b64fc2008-01-30 20:15:17 +000010def CmpToKey(mycmp):
11 'Convert a cmp= function into a key= function'
12 class K(object):
13 def __init__(self, obj):
14 self.obj = obj
15 def __lt__(self, other):
16 return mycmp(self.obj, other.obj) == -1
17 return K
18
Walter Dörwald1dde95d2003-12-08 11:38:45 +000019class CommonTest(seq_tests.CommonTest):
20
Raymond Hettingerbcab2b22004-09-29 08:03:17 +000021 def test_init(self):
22 # Iterable arg is optional
23 self.assertEqual(self.type2test([]), self.type2test())
24
25 # Init clears previous values
26 a = self.type2test([1, 2, 3])
27 a.__init__()
28 self.assertEqual(a, self.type2test([]))
29
30 # Init overwrites previous values
31 a = self.type2test([1, 2, 3])
32 a.__init__([4, 5, 6])
33 self.assertEqual(a, self.type2test([4, 5, 6]))
34
35 # Mutables always return a new object
36 b = self.type2test(a)
37 self.assertNotEqual(id(a), id(b))
38 self.assertEqual(a, b)
39
Walter Dörwald1dde95d2003-12-08 11:38:45 +000040 def test_repr(self):
41 l0 = []
42 l2 = [0, 1, 2]
43 a0 = self.type2test(l0)
44 a2 = self.type2test(l2)
45
46 self.assertEqual(str(a0), str(l0))
47 self.assertEqual(repr(a0), repr(l0))
Brett Cannon0b70cca2006-08-25 02:59:59 +000048 self.assertEqual(repr(a2), repr(l2))
Walter Dörwald1dde95d2003-12-08 11:38:45 +000049 self.assertEqual(str(a2), "[0, 1, 2]")
50 self.assertEqual(repr(a2), "[0, 1, 2]")
51
Raymond Hettingerbcab2b22004-09-29 08:03:17 +000052 a2.append(a2)
53 a2.append(3)
54 self.assertEqual(str(a2), "[0, 1, 2, [...], 3]")
55 self.assertEqual(repr(a2), "[0, 1, 2, [...], 3]")
56
Thomas Wouters1b7f8912007-09-19 03:06:30 +000057 l0 = []
58 for i in range(sys.getrecursionlimit() + 100):
59 l0 = [l0]
60 self.assertRaises(RuntimeError, repr, l0)
61
Raymond Hettingerbcab2b22004-09-29 08:03:17 +000062 def test_print(self):
Guido van Rossum805365e2007-05-07 22:24:25 +000063 d = self.type2test(range(200))
Raymond Hettingerbcab2b22004-09-29 08:03:17 +000064 d.append(d)
Guido van Rossum805365e2007-05-07 22:24:25 +000065 d.extend(range(200,400))
Raymond Hettingerbcab2b22004-09-29 08:03:17 +000066 d.append(d)
67 d.append(400)
68 try:
Victor Stinner7ac5cb12010-05-16 00:36:38 +000069 with open(support.TESTFN, "w") as fo:
70 fo.write(str(d))
71 with open(support.TESTFN, "r") as fo:
72 self.assertEqual(fo.read(), repr(d))
Raymond Hettingerbcab2b22004-09-29 08:03:17 +000073 finally:
Benjamin Petersonee8712c2008-05-20 21:35:26 +000074 os.remove(support.TESTFN)
Raymond Hettingerbcab2b22004-09-29 08:03:17 +000075
Raymond Hettingerbcab2b22004-09-29 08:03:17 +000076 def test_set_subscript(self):
77 a = self.type2test(range(20))
78 self.assertRaises(ValueError, a.__setitem__, slice(0, 10, 0), [1,2,3])
79 self.assertRaises(TypeError, a.__setitem__, slice(0, 10), 1)
80 self.assertRaises(ValueError, a.__setitem__, slice(0, 10, 2), [1,2])
81 self.assertRaises(TypeError, a.__getitem__, 'x', 1)
82 a[slice(2,10,3)] = [1,2,3]
83 self.assertEqual(a, self.type2test([0, 1, 1, 3, 4, 2, 6, 7, 3,
84 9, 10, 11, 12, 13, 14, 15,
85 16, 17, 18, 19]))
86
87 def test_reversed(self):
88 a = self.type2test(range(20))
89 r = reversed(a)
90 self.assertEqual(list(r), self.type2test(range(19, -1, -1)))
Georg Brandla18af4e2007-04-21 15:47:16 +000091 self.assertRaises(StopIteration, next, r)
Raymond Hettingerbcab2b22004-09-29 08:03:17 +000092 self.assertEqual(list(reversed(self.type2test())),
93 self.type2test())
Raymond Hettingerf5b64112008-12-02 21:33:45 +000094 # Bug 3689: make sure list-reversed-iterator doesn't have __len__
95 self.assertRaises(TypeError, len, reversed([1,2,3]))
Raymond Hettingerbcab2b22004-09-29 08:03:17 +000096
Walter Dörwald1dde95d2003-12-08 11:38:45 +000097 def test_setitem(self):
98 a = self.type2test([0, 1])
99 a[0] = 0
100 a[1] = 100
101 self.assertEqual(a, self.type2test([0, 100]))
102 a[-1] = 200
103 self.assertEqual(a, self.type2test([0, 200]))
104 a[-2] = 100
105 self.assertEqual(a, self.type2test([100, 200]))
106 self.assertRaises(IndexError, a.__setitem__, -3, 200)
107 self.assertRaises(IndexError, a.__setitem__, 2, 200)
108
109 a = self.type2test([])
110 self.assertRaises(IndexError, a.__setitem__, 0, 200)
111 self.assertRaises(IndexError, a.__setitem__, -1, 200)
Walter Dörwald1dde95d2003-12-08 11:38:45 +0000112 self.assertRaises(TypeError, a.__setitem__)
113
114 a = self.type2test([0,1,2,3,4])
Guido van Rossume2a383d2007-01-15 16:59:06 +0000115 a[0] = 1
116 a[1] = 2
117 a[2] = 3
Walter Dörwald1dde95d2003-12-08 11:38:45 +0000118 self.assertEqual(a, self.type2test([1,2,3,3,4]))
119 a[0] = 5
120 a[1] = 6
121 a[2] = 7
122 self.assertEqual(a, self.type2test([5,6,7,3,4]))
Guido van Rossume2a383d2007-01-15 16:59:06 +0000123 a[-2] = 88
124 a[-1] = 99
Walter Dörwald1dde95d2003-12-08 11:38:45 +0000125 self.assertEqual(a, self.type2test([5,6,7,88,99]))
126 a[-2] = 8
127 a[-1] = 9
128 self.assertEqual(a, self.type2test([5,6,7,8,9]))
129
130 def test_delitem(self):
131 a = self.type2test([0, 1])
132 del a[1]
133 self.assertEqual(a, [0])
134 del a[0]
135 self.assertEqual(a, [])
136
137 a = self.type2test([0, 1])
138 del a[-2]
139 self.assertEqual(a, [1])
140 del a[-1]
141 self.assertEqual(a, [])
142
143 a = self.type2test([0, 1])
144 self.assertRaises(IndexError, a.__delitem__, -3)
145 self.assertRaises(IndexError, a.__delitem__, 2)
146
147 a = self.type2test([])
148 self.assertRaises(IndexError, a.__delitem__, 0)
149
150 self.assertRaises(TypeError, a.__delitem__)
151
152 def test_setslice(self):
153 l = [0, 1]
154 a = self.type2test(l)
155
156 for i in range(-3, 4):
157 a[:i] = l[:i]
158 self.assertEqual(a, l)
159 a2 = a[:]
160 a2[:i] = a[:i]
161 self.assertEqual(a2, a)
162 a[i:] = l[i:]
163 self.assertEqual(a, l)
164 a2 = a[:]
165 a2[i:] = a[i:]
166 self.assertEqual(a2, a)
167 for j in range(-3, 4):
168 a[i:j] = l[i:j]
169 self.assertEqual(a, l)
170 a2 = a[:]
171 a2[i:j] = a[i:j]
172 self.assertEqual(a2, a)
173
174 aa2 = a2[:]
175 aa2[:0] = [-2, -1]
176 self.assertEqual(aa2, [-2, -1, 0, 1])
177 aa2[0:] = []
178 self.assertEqual(aa2, [])
179
180 a = self.type2test([1, 2, 3, 4, 5])
181 a[:-1] = a
182 self.assertEqual(a, self.type2test([1, 2, 3, 4, 5, 5]))
183 a = self.type2test([1, 2, 3, 4, 5])
184 a[1:] = a
185 self.assertEqual(a, self.type2test([1, 1, 2, 3, 4, 5]))
186 a = self.type2test([1, 2, 3, 4, 5])
187 a[1:-1] = a
188 self.assertEqual(a, self.type2test([1, 1, 2, 3, 4, 5, 5]))
189
190 a = self.type2test([])
191 a[:] = tuple(range(10))
192 self.assertEqual(a, self.type2test(range(10)))
193
Thomas Woutersed03b412007-08-28 21:37:11 +0000194 self.assertRaises(TypeError, a.__setitem__, slice(0, 1, 5))
Walter Dörwald1dde95d2003-12-08 11:38:45 +0000195
Thomas Woutersed03b412007-08-28 21:37:11 +0000196 self.assertRaises(TypeError, a.__setitem__)
Walter Dörwald1dde95d2003-12-08 11:38:45 +0000197
198 def test_delslice(self):
199 a = self.type2test([0, 1])
200 del a[1:2]
201 del a[0:1]
202 self.assertEqual(a, self.type2test([]))
203
204 a = self.type2test([0, 1])
Guido van Rossume2a383d2007-01-15 16:59:06 +0000205 del a[1:2]
206 del a[0:1]
Walter Dörwald1dde95d2003-12-08 11:38:45 +0000207 self.assertEqual(a, self.type2test([]))
208
209 a = self.type2test([0, 1])
210 del a[-2:-1]
211 self.assertEqual(a, self.type2test([1]))
212
213 a = self.type2test([0, 1])
Guido van Rossume2a383d2007-01-15 16:59:06 +0000214 del a[-2:-1]
Walter Dörwald1dde95d2003-12-08 11:38:45 +0000215 self.assertEqual(a, self.type2test([1]))
216
217 a = self.type2test([0, 1])
218 del a[1:]
219 del a[:1]
220 self.assertEqual(a, self.type2test([]))
221
222 a = self.type2test([0, 1])
Guido van Rossume2a383d2007-01-15 16:59:06 +0000223 del a[1:]
224 del a[:1]
Walter Dörwald1dde95d2003-12-08 11:38:45 +0000225 self.assertEqual(a, self.type2test([]))
226
227 a = self.type2test([0, 1])
228 del a[-1:]
229 self.assertEqual(a, self.type2test([0]))
230
231 a = self.type2test([0, 1])
Guido van Rossume2a383d2007-01-15 16:59:06 +0000232 del a[-1:]
Walter Dörwald1dde95d2003-12-08 11:38:45 +0000233 self.assertEqual(a, self.type2test([0]))
234
235 a = self.type2test([0, 1])
236 del a[:]
237 self.assertEqual(a, self.type2test([]))
238
239 def test_append(self):
240 a = self.type2test([])
241 a.append(0)
242 a.append(1)
243 a.append(2)
244 self.assertEqual(a, self.type2test([0, 1, 2]))
245
246 self.assertRaises(TypeError, a.append)
247
248 def test_extend(self):
249 a1 = self.type2test([0])
250 a2 = self.type2test((0, 1))
251 a = a1[:]
252 a.extend(a2)
253 self.assertEqual(a, a1 + a2)
254
255 a.extend(self.type2test([]))
256 self.assertEqual(a, a1 + a2)
257
258 a.extend(a)
259 self.assertEqual(a, self.type2test([0, 0, 1, 0, 0, 1]))
260
261 a = self.type2test("spam")
262 a.extend("eggs")
263 self.assertEqual(a, list("spameggs"))
264
265 self.assertRaises(TypeError, a.extend, None)
266
267 self.assertRaises(TypeError, a.extend)
268
269 def test_insert(self):
270 a = self.type2test([0, 1, 2])
271 a.insert(0, -2)
272 a.insert(1, -1)
273 a.insert(2, 0)
274 self.assertEqual(a, [-2, -1, 0, 0, 1, 2])
275
276 b = a[:]
277 b.insert(-2, "foo")
278 b.insert(-200, "left")
279 b.insert(200, "right")
280 self.assertEqual(b, self.type2test(["left",-2,-1,0,0,"foo",1,2,"right"]))
281
282 self.assertRaises(TypeError, a.insert)
283
284 def test_pop(self):
285 a = self.type2test([-1, 0, 1])
286 a.pop()
287 self.assertEqual(a, [-1, 0])
288 a.pop(0)
289 self.assertEqual(a, [0])
290 self.assertRaises(IndexError, a.pop, 5)
291 a.pop(0)
292 self.assertEqual(a, [])
293 self.assertRaises(IndexError, a.pop)
Walter Dörwald1dde95d2003-12-08 11:38:45 +0000294 self.assertRaises(TypeError, a.pop, 42, 42)
Raymond Hettingerbcab2b22004-09-29 08:03:17 +0000295 a = self.type2test([0, 10, 20, 30, 40])
Walter Dörwald1dde95d2003-12-08 11:38:45 +0000296
297 def test_remove(self):
298 a = self.type2test([0, 0, 1])
299 a.remove(1)
300 self.assertEqual(a, [0, 0])
301 a.remove(0)
302 self.assertEqual(a, [0])
303 a.remove(0)
304 self.assertEqual(a, [])
305
306 self.assertRaises(ValueError, a.remove, 0)
Tim Peters13018922004-01-18 21:03:23 +0000307
Walter Dörwald1dde95d2003-12-08 11:38:45 +0000308 self.assertRaises(TypeError, a.remove)
309
310 class BadExc(Exception):
311 pass
312
313 class BadCmp:
314 def __eq__(self, other):
315 if other == 2:
316 raise BadExc()
317 return False
318
319 a = self.type2test([0, 1, 2, 3])
320 self.assertRaises(BadExc, a.remove, BadCmp())
321
Walter Dörwald7355e812005-03-21 21:31:47 +0000322 class BadCmp2:
323 def __eq__(self, other):
324 raise BadExc()
325
326 d = self.type2test('abcdefghcij')
327 d.remove('c')
328 self.assertEqual(d, self.type2test('abdefghcij'))
329 d.remove('c')
330 self.assertEqual(d, self.type2test('abdefghij'))
331 self.assertRaises(ValueError, d.remove, 'c')
332 self.assertEqual(d, self.type2test('abdefghij'))
333
334 # Handle comparison errors
335 d = self.type2test(['a', 'b', BadCmp2(), 'c'])
336 e = self.type2test(d)
337 self.assertRaises(BadExc, d.remove, 'c')
338 for x, y in zip(d, e):
339 # verify that original order and values are retained.
Ezio Melottib3aedd42010-11-20 19:04:17 +0000340 self.assertIs(x, y)
Walter Dörwald7355e812005-03-21 21:31:47 +0000341
Walter Dörwald1dde95d2003-12-08 11:38:45 +0000342 def test_count(self):
343 a = self.type2test([0, 1, 2])*3
344 self.assertEqual(a.count(0), 3)
345 self.assertEqual(a.count(1), 3)
346 self.assertEqual(a.count(3), 0)
347
348 self.assertRaises(TypeError, a.count)
Tim Peters13018922004-01-18 21:03:23 +0000349
Walter Dörwald1dde95d2003-12-08 11:38:45 +0000350 class BadExc(Exception):
351 pass
352
353 class BadCmp:
354 def __eq__(self, other):
355 if other == 2:
356 raise BadExc()
357 return False
358
359 self.assertRaises(BadExc, a.count, BadCmp())
360
361 def test_index(self):
362 u = self.type2test([0, 1])
363 self.assertEqual(u.index(0), 0)
364 self.assertEqual(u.index(1), 1)
365 self.assertRaises(ValueError, u.index, 2)
366
367 u = self.type2test([-2, -1, 0, 0, 1, 2])
368 self.assertEqual(u.count(0), 2)
369 self.assertEqual(u.index(0), 2)
370 self.assertEqual(u.index(0, 2), 2)
371 self.assertEqual(u.index(-2, -10), 0)
372 self.assertEqual(u.index(0, 3), 3)
373 self.assertEqual(u.index(0, 3, 4), 3)
374 self.assertRaises(ValueError, u.index, 2, 0, -10)
375
376 self.assertRaises(TypeError, u.index)
377
378 class BadExc(Exception):
379 pass
380
381 class BadCmp:
382 def __eq__(self, other):
383 if other == 2:
384 raise BadExc()
385 return False
386
387 a = self.type2test([0, 1, 2, 3])
388 self.assertRaises(BadExc, a.index, BadCmp())
389
390 a = self.type2test([-2, -1, 0, 0, 1, 2])
391 self.assertEqual(a.index(0), 2)
392 self.assertEqual(a.index(0, 2), 2)
393 self.assertEqual(a.index(0, -4), 2)
394 self.assertEqual(a.index(-2, -10), 0)
395 self.assertEqual(a.index(0, 3), 3)
396 self.assertEqual(a.index(0, -3), 3)
397 self.assertEqual(a.index(0, 3, 4), 3)
398 self.assertEqual(a.index(0, -3, -2), 3)
Christian Heimesa37d4c62007-12-04 23:02:19 +0000399 self.assertEqual(a.index(0, -4*sys.maxsize, 4*sys.maxsize), 2)
400 self.assertRaises(ValueError, a.index, 0, 4*sys.maxsize,-4*sys.maxsize)
Walter Dörwald1dde95d2003-12-08 11:38:45 +0000401 self.assertRaises(ValueError, a.index, 2, 0, -10)
402 a.remove(0)
403 self.assertRaises(ValueError, a.index, 2, 0, 4)
404 self.assertEqual(a, self.type2test([-2, -1, 0, 1, 2]))
405
Neal Norwitzf0769532004-08-13 03:18:29 +0000406 # Test modifying the list during index's iteration
407 class EvilCmp:
408 def __init__(self, victim):
409 self.victim = victim
410 def __eq__(self, other):
411 del self.victim[:]
412 return False
413 a = self.type2test()
Guido van Rossum805365e2007-05-07 22:24:25 +0000414 a[:] = [EvilCmp(a) for _ in range(100)]
Neal Norwitzf0769532004-08-13 03:18:29 +0000415 # This used to seg fault before patch #1005778
416 self.assertRaises(ValueError, a.index, None)
417
Walter Dörwald1dde95d2003-12-08 11:38:45 +0000418 def test_reverse(self):
419 u = self.type2test([-2, -1, 0, 1, 2])
420 u2 = u[:]
421 u.reverse()
422 self.assertEqual(u, [2, 1, 0, -1, -2])
423 u.reverse()
424 self.assertEqual(u, u2)
Tim Peters13018922004-01-18 21:03:23 +0000425
Walter Dörwald1dde95d2003-12-08 11:38:45 +0000426 self.assertRaises(TypeError, u.reverse, 42)
427
Eli Benderskycbbaa962011-02-25 05:47:53 +0000428 def test_clear(self):
429 u = self.type2test([2, 3, 4])
430 u.clear()
431 self.assertEqual(u, [])
432
433 u = self.type2test([])
434 u.clear()
435 self.assertEqual(u, [])
436
437 u = self.type2test([])
438 u.append(1)
439 u.clear()
440 u.append(2)
441 self.assertEqual(u, [2])
442
443 self.assertRaises(TypeError, u.clear, None)
444
445 def test_copy(self):
446 u = self.type2test([1, 2, 3])
447 v = u.copy()
448 self.assertEqual(v, [1, 2, 3])
449
450 u = self.type2test([])
451 v = u.copy()
452 self.assertEqual(v, [])
453
454 # test that it's indeed a copy and not a reference
455 u = self.type2test(['a', 'b'])
456 v = u.copy()
457 v.append('i')
458 self.assertEqual(u, ['a', 'b'])
459 self.assertEqual(v, u + ['i'])
460
461 # test that it's a shallow, not a deep copy
462 u = self.type2test([1, 2, [3, 4], 5])
463 v = u.copy()
Eli Benderskycbbaa962011-02-25 05:47:53 +0000464 self.assertEqual(u, v)
Benjamin Peterson2ec8cbc2011-02-25 14:05:42 +0000465 self.assertIs(v[3], u[3])
Eli Benderskycbbaa962011-02-25 05:47:53 +0000466
467 self.assertRaises(TypeError, u.copy, None)
468
Walter Dörwald1dde95d2003-12-08 11:38:45 +0000469 def test_sort(self):
470 u = self.type2test([1, 0])
471 u.sort()
472 self.assertEqual(u, [0, 1])
Tim Peters13018922004-01-18 21:03:23 +0000473
Walter Dörwald1dde95d2003-12-08 11:38:45 +0000474 u = self.type2test([2,1,0,-1,-2])
475 u.sort()
476 self.assertEqual(u, self.type2test([-2,-1,0,1,2]))
Tim Peters13018922004-01-18 21:03:23 +0000477
Walter Dörwald1dde95d2003-12-08 11:38:45 +0000478 self.assertRaises(TypeError, u.sort, 42, 42)
479
480 def revcmp(a, b):
Mark Dickinsona56c4672009-01-27 18:17:45 +0000481 if a == b:
482 return 0
483 elif a < b:
484 return 1
485 else: # a > b
486 return -1
Raymond Hettinger70b64fc2008-01-30 20:15:17 +0000487 u.sort(key=CmpToKey(revcmp))
Walter Dörwald1dde95d2003-12-08 11:38:45 +0000488 self.assertEqual(u, self.type2test([2,1,0,-1,-2]))
489
490 # The following dumps core in unpatched Python 1.5:
491 def myComparison(x,y):
Mark Dickinsona56c4672009-01-27 18:17:45 +0000492 xmod, ymod = x%3, y%7
493 if xmod == ymod:
494 return 0
495 elif xmod < ymod:
496 return -1
497 else: # xmod > ymod
498 return 1
Walter Dörwald1dde95d2003-12-08 11:38:45 +0000499 z = self.type2test(range(12))
Raymond Hettinger70b64fc2008-01-30 20:15:17 +0000500 z.sort(key=CmpToKey(myComparison))
Tim Peters13018922004-01-18 21:03:23 +0000501
Walter Dörwald1dde95d2003-12-08 11:38:45 +0000502 self.assertRaises(TypeError, z.sort, 2)
Tim Peters13018922004-01-18 21:03:23 +0000503
Walter Dörwald1dde95d2003-12-08 11:38:45 +0000504 def selfmodifyingComparison(x,y):
505 z.append(1)
Mark Dickinsona56c4672009-01-27 18:17:45 +0000506 if x == y:
507 return 0
508 elif x < y:
509 return -1
510 else: # x > y
511 return 1
Raymond Hettinger70b64fc2008-01-30 20:15:17 +0000512 self.assertRaises(ValueError, z.sort, key=CmpToKey(selfmodifyingComparison))
Walter Dörwald1dde95d2003-12-08 11:38:45 +0000513
514 self.assertRaises(TypeError, z.sort, 42, 42, 42, 42)
515
516 def test_slice(self):
517 u = self.type2test("spam")
518 u[:2] = "h"
519 self.assertEqual(u, list("ham"))
520
521 def test_iadd(self):
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000522 super().test_iadd()
Walter Dörwald1dde95d2003-12-08 11:38:45 +0000523 u = self.type2test([0, 1])
524 u2 = u
525 u += [2, 3]
Ezio Melottib3aedd42010-11-20 19:04:17 +0000526 self.assertIs(u, u2)
Walter Dörwald1dde95d2003-12-08 11:38:45 +0000527
528 u = self.type2test("spam")
529 u += "eggs"
530 self.assertEqual(u, self.type2test("spameggs"))
531
532 self.assertRaises(TypeError, u.__iadd__, None)
533
534 def test_imul(self):
535 u = self.type2test([0, 1])
536 u *= 3
537 self.assertEqual(u, self.type2test([0, 1, 0, 1, 0, 1]))
538 u *= 0
539 self.assertEqual(u, self.type2test([]))
Raymond Hettingerbcab2b22004-09-29 08:03:17 +0000540 s = self.type2test([])
541 oldid = id(s)
542 s *= 10
543 self.assertEqual(id(s), oldid)
Walter Dörwald1dde95d2003-12-08 11:38:45 +0000544
545 def test_extendedslicing(self):
546 # subscript
547 a = self.type2test([0,1,2,3,4])
548
549 # deletion
550 del a[::2]
551 self.assertEqual(a, self.type2test([1,3]))
552 a = self.type2test(range(5))
553 del a[1::2]
554 self.assertEqual(a, self.type2test([0,2,4]))
555 a = self.type2test(range(5))
556 del a[1::-2]
557 self.assertEqual(a, self.type2test([0,2,3,4]))
558 a = self.type2test(range(10))
559 del a[::1000]
560 self.assertEqual(a, self.type2test([1, 2, 3, 4, 5, 6, 7, 8, 9]))
561 # assignment
562 a = self.type2test(range(10))
563 a[::2] = [-1]*5
564 self.assertEqual(a, self.type2test([-1, 1, -1, 3, -1, 5, -1, 7, -1, 9]))
565 a = self.type2test(range(10))
566 a[::-4] = [10]*3
567 self.assertEqual(a, self.type2test([0, 10, 2, 3, 4, 10, 6, 7, 8 ,10]))
568 a = self.type2test(range(4))
569 a[::-1] = a
570 self.assertEqual(a, self.type2test([3, 2, 1, 0]))
571 a = self.type2test(range(10))
572 b = a[:]
573 c = a[:]
574 a[2:3] = self.type2test(["two", "elements"])
575 b[slice(2,3)] = self.type2test(["two", "elements"])
576 c[2:3:] = self.type2test(["two", "elements"])
577 self.assertEqual(a, b)
578 self.assertEqual(a, c)
579 a = self.type2test(range(10))
580 a[::2] = tuple(range(5))
581 self.assertEqual(a, self.type2test([0, 1, 1, 3, 2, 5, 3, 7, 4, 9]))
Mark Dickinsonbc099642010-01-29 17:27:24 +0000582 # test issue7788
583 a = self.type2test(range(10))
584 del a[9::1<<333]
Raymond Hettingera710b332005-08-21 11:03:59 +0000585
586 def test_constructor_exception_handling(self):
587 # Bug #1242657
588 class F(object):
589 def __iter__(self):
Raymond Hettingera710b332005-08-21 11:03:59 +0000590 raise KeyboardInterrupt
591 self.assertRaises(KeyboardInterrupt, list, F())