blob: 40316de220fac2ca2e976f2f60fa686a440c8d6b [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
Éric Araujo41bade92011-07-26 15:13:47 +02007from functools import cmp_to_key
Walter Dörwald1dde95d2003-12-08 11:38:45 +00008
Benjamin Petersonee8712c2008-05-20 21:35:26 +00009from test import support, seq_tests
Walter Dörwald1dde95d2003-12-08 11:38:45 +000010
Raymond Hettinger70b64fc2008-01-30 20:15:17 +000011
Walter Dörwald1dde95d2003-12-08 11:38:45 +000012class CommonTest(seq_tests.CommonTest):
13
Raymond Hettingerbcab2b22004-09-29 08:03:17 +000014 def test_init(self):
15 # Iterable arg is optional
16 self.assertEqual(self.type2test([]), self.type2test())
17
18 # Init clears previous values
19 a = self.type2test([1, 2, 3])
20 a.__init__()
21 self.assertEqual(a, self.type2test([]))
22
23 # Init overwrites previous values
24 a = self.type2test([1, 2, 3])
25 a.__init__([4, 5, 6])
26 self.assertEqual(a, self.type2test([4, 5, 6]))
27
28 # Mutables always return a new object
29 b = self.type2test(a)
30 self.assertNotEqual(id(a), id(b))
31 self.assertEqual(a, b)
32
Terry Jan Reedyffff1442014-08-02 01:30:37 -040033 def test_getitem_error(self):
Serhiy Storchakaf522a572019-02-19 13:53:07 +020034 a = []
Terry Jan Reedyffff1442014-08-02 01:30:37 -040035 msg = "list indices must be integers or slices"
36 with self.assertRaisesRegex(TypeError, msg):
Serhiy Storchakaf522a572019-02-19 13:53:07 +020037 a['a']
38
39 def test_setitem_error(self):
40 a = []
41 msg = "list indices must be integers or slices"
42 with self.assertRaisesRegex(TypeError, msg):
Terry Jan Reedyffff1442014-08-02 01:30:37 -040043 a['a'] = "python"
44
Walter Dörwald1dde95d2003-12-08 11:38:45 +000045 def test_repr(self):
46 l0 = []
47 l2 = [0, 1, 2]
48 a0 = self.type2test(l0)
49 a2 = self.type2test(l2)
50
51 self.assertEqual(str(a0), str(l0))
52 self.assertEqual(repr(a0), repr(l0))
Brett Cannon0b70cca2006-08-25 02:59:59 +000053 self.assertEqual(repr(a2), repr(l2))
Walter Dörwald1dde95d2003-12-08 11:38:45 +000054 self.assertEqual(str(a2), "[0, 1, 2]")
55 self.assertEqual(repr(a2), "[0, 1, 2]")
56
Raymond Hettingerbcab2b22004-09-29 08:03:17 +000057 a2.append(a2)
58 a2.append(3)
59 self.assertEqual(str(a2), "[0, 1, 2, [...], 3]")
60 self.assertEqual(repr(a2), "[0, 1, 2, [...], 3]")
61
Serhiy Storchaka1fb72d22017-12-03 22:12:11 +020062 def test_repr_deep(self):
63 a = self.type2test([])
Thomas Wouters1b7f8912007-09-19 03:06:30 +000064 for i in range(sys.getrecursionlimit() + 100):
Serhiy Storchaka1fb72d22017-12-03 22:12:11 +020065 a = self.type2test([a])
66 self.assertRaises(RecursionError, repr, a)
Thomas Wouters1b7f8912007-09-19 03:06:30 +000067
Raymond Hettingerbcab2b22004-09-29 08:03:17 +000068 def test_print(self):
Guido van Rossum805365e2007-05-07 22:24:25 +000069 d = self.type2test(range(200))
Raymond Hettingerbcab2b22004-09-29 08:03:17 +000070 d.append(d)
Guido van Rossum805365e2007-05-07 22:24:25 +000071 d.extend(range(200,400))
Raymond Hettingerbcab2b22004-09-29 08:03:17 +000072 d.append(d)
73 d.append(400)
74 try:
Victor Stinner7ac5cb12010-05-16 00:36:38 +000075 with open(support.TESTFN, "w") as fo:
76 fo.write(str(d))
77 with open(support.TESTFN, "r") as fo:
78 self.assertEqual(fo.read(), repr(d))
Raymond Hettingerbcab2b22004-09-29 08:03:17 +000079 finally:
Benjamin Petersonee8712c2008-05-20 21:35:26 +000080 os.remove(support.TESTFN)
Raymond Hettingerbcab2b22004-09-29 08:03:17 +000081
Raymond Hettingerbcab2b22004-09-29 08:03:17 +000082 def test_set_subscript(self):
83 a = self.type2test(range(20))
84 self.assertRaises(ValueError, a.__setitem__, slice(0, 10, 0), [1,2,3])
85 self.assertRaises(TypeError, a.__setitem__, slice(0, 10), 1)
86 self.assertRaises(ValueError, a.__setitem__, slice(0, 10, 2), [1,2])
87 self.assertRaises(TypeError, a.__getitem__, 'x', 1)
88 a[slice(2,10,3)] = [1,2,3]
89 self.assertEqual(a, self.type2test([0, 1, 1, 3, 4, 2, 6, 7, 3,
90 9, 10, 11, 12, 13, 14, 15,
91 16, 17, 18, 19]))
92
93 def test_reversed(self):
94 a = self.type2test(range(20))
95 r = reversed(a)
96 self.assertEqual(list(r), self.type2test(range(19, -1, -1)))
Georg Brandla18af4e2007-04-21 15:47:16 +000097 self.assertRaises(StopIteration, next, r)
Raymond Hettingerbcab2b22004-09-29 08:03:17 +000098 self.assertEqual(list(reversed(self.type2test())),
99 self.type2test())
Raymond Hettingerf5b64112008-12-02 21:33:45 +0000100 # Bug 3689: make sure list-reversed-iterator doesn't have __len__
101 self.assertRaises(TypeError, len, reversed([1,2,3]))
Raymond Hettingerbcab2b22004-09-29 08:03:17 +0000102
Walter Dörwald1dde95d2003-12-08 11:38:45 +0000103 def test_setitem(self):
104 a = self.type2test([0, 1])
105 a[0] = 0
106 a[1] = 100
107 self.assertEqual(a, self.type2test([0, 100]))
108 a[-1] = 200
109 self.assertEqual(a, self.type2test([0, 200]))
110 a[-2] = 100
111 self.assertEqual(a, self.type2test([100, 200]))
112 self.assertRaises(IndexError, a.__setitem__, -3, 200)
113 self.assertRaises(IndexError, a.__setitem__, 2, 200)
114
115 a = self.type2test([])
116 self.assertRaises(IndexError, a.__setitem__, 0, 200)
117 self.assertRaises(IndexError, a.__setitem__, -1, 200)
Walter Dörwald1dde95d2003-12-08 11:38:45 +0000118 self.assertRaises(TypeError, a.__setitem__)
119
120 a = self.type2test([0,1,2,3,4])
Guido van Rossume2a383d2007-01-15 16:59:06 +0000121 a[0] = 1
122 a[1] = 2
123 a[2] = 3
Walter Dörwald1dde95d2003-12-08 11:38:45 +0000124 self.assertEqual(a, self.type2test([1,2,3,3,4]))
125 a[0] = 5
126 a[1] = 6
127 a[2] = 7
128 self.assertEqual(a, self.type2test([5,6,7,3,4]))
Guido van Rossume2a383d2007-01-15 16:59:06 +0000129 a[-2] = 88
130 a[-1] = 99
Walter Dörwald1dde95d2003-12-08 11:38:45 +0000131 self.assertEqual(a, self.type2test([5,6,7,88,99]))
132 a[-2] = 8
133 a[-1] = 9
134 self.assertEqual(a, self.type2test([5,6,7,8,9]))
135
Terry Jan Reedyffff1442014-08-02 01:30:37 -0400136 msg = "list indices must be integers or slices"
137 with self.assertRaisesRegex(TypeError, msg):
138 a['a'] = "python"
139
Walter Dörwald1dde95d2003-12-08 11:38:45 +0000140 def test_delitem(self):
141 a = self.type2test([0, 1])
142 del a[1]
143 self.assertEqual(a, [0])
144 del a[0]
145 self.assertEqual(a, [])
146
147 a = self.type2test([0, 1])
148 del a[-2]
149 self.assertEqual(a, [1])
150 del a[-1]
151 self.assertEqual(a, [])
152
153 a = self.type2test([0, 1])
154 self.assertRaises(IndexError, a.__delitem__, -3)
155 self.assertRaises(IndexError, a.__delitem__, 2)
156
157 a = self.type2test([])
158 self.assertRaises(IndexError, a.__delitem__, 0)
159
160 self.assertRaises(TypeError, a.__delitem__)
161
162 def test_setslice(self):
163 l = [0, 1]
164 a = self.type2test(l)
165
166 for i in range(-3, 4):
167 a[:i] = l[:i]
168 self.assertEqual(a, l)
169 a2 = a[:]
170 a2[:i] = a[:i]
171 self.assertEqual(a2, a)
172 a[i:] = l[i:]
173 self.assertEqual(a, l)
174 a2 = a[:]
175 a2[i:] = a[i:]
176 self.assertEqual(a2, a)
177 for j in range(-3, 4):
178 a[i:j] = l[i:j]
179 self.assertEqual(a, l)
180 a2 = a[:]
181 a2[i:j] = a[i:j]
182 self.assertEqual(a2, a)
183
184 aa2 = a2[:]
185 aa2[:0] = [-2, -1]
186 self.assertEqual(aa2, [-2, -1, 0, 1])
187 aa2[0:] = []
188 self.assertEqual(aa2, [])
189
190 a = self.type2test([1, 2, 3, 4, 5])
191 a[:-1] = a
192 self.assertEqual(a, self.type2test([1, 2, 3, 4, 5, 5]))
193 a = self.type2test([1, 2, 3, 4, 5])
194 a[1:] = a
195 self.assertEqual(a, self.type2test([1, 1, 2, 3, 4, 5]))
196 a = self.type2test([1, 2, 3, 4, 5])
197 a[1:-1] = a
198 self.assertEqual(a, self.type2test([1, 1, 2, 3, 4, 5, 5]))
199
200 a = self.type2test([])
201 a[:] = tuple(range(10))
202 self.assertEqual(a, self.type2test(range(10)))
203
Thomas Woutersed03b412007-08-28 21:37:11 +0000204 self.assertRaises(TypeError, a.__setitem__, slice(0, 1, 5))
Walter Dörwald1dde95d2003-12-08 11:38:45 +0000205
Thomas Woutersed03b412007-08-28 21:37:11 +0000206 self.assertRaises(TypeError, a.__setitem__)
Walter Dörwald1dde95d2003-12-08 11:38:45 +0000207
208 def test_delslice(self):
209 a = self.type2test([0, 1])
210 del a[1:2]
211 del a[0:1]
212 self.assertEqual(a, self.type2test([]))
213
214 a = self.type2test([0, 1])
Guido van Rossume2a383d2007-01-15 16:59:06 +0000215 del a[1:2]
216 del a[0:1]
Walter Dörwald1dde95d2003-12-08 11:38:45 +0000217 self.assertEqual(a, self.type2test([]))
218
219 a = self.type2test([0, 1])
220 del a[-2:-1]
221 self.assertEqual(a, self.type2test([1]))
222
223 a = self.type2test([0, 1])
Guido van Rossume2a383d2007-01-15 16:59:06 +0000224 del a[-2:-1]
Walter Dörwald1dde95d2003-12-08 11:38:45 +0000225 self.assertEqual(a, self.type2test([1]))
226
227 a = self.type2test([0, 1])
228 del a[1:]
229 del a[:1]
230 self.assertEqual(a, self.type2test([]))
231
232 a = self.type2test([0, 1])
Guido van Rossume2a383d2007-01-15 16:59:06 +0000233 del a[1:]
234 del a[:1]
Walter Dörwald1dde95d2003-12-08 11:38:45 +0000235 self.assertEqual(a, self.type2test([]))
236
237 a = self.type2test([0, 1])
238 del a[-1:]
239 self.assertEqual(a, self.type2test([0]))
240
241 a = self.type2test([0, 1])
Guido van Rossume2a383d2007-01-15 16:59:06 +0000242 del a[-1:]
Walter Dörwald1dde95d2003-12-08 11:38:45 +0000243 self.assertEqual(a, self.type2test([0]))
244
245 a = self.type2test([0, 1])
246 del a[:]
247 self.assertEqual(a, self.type2test([]))
248
249 def test_append(self):
250 a = self.type2test([])
251 a.append(0)
252 a.append(1)
253 a.append(2)
254 self.assertEqual(a, self.type2test([0, 1, 2]))
255
256 self.assertRaises(TypeError, a.append)
257
258 def test_extend(self):
259 a1 = self.type2test([0])
260 a2 = self.type2test((0, 1))
261 a = a1[:]
262 a.extend(a2)
263 self.assertEqual(a, a1 + a2)
264
265 a.extend(self.type2test([]))
266 self.assertEqual(a, a1 + a2)
267
268 a.extend(a)
269 self.assertEqual(a, self.type2test([0, 0, 1, 0, 0, 1]))
270
271 a = self.type2test("spam")
272 a.extend("eggs")
273 self.assertEqual(a, list("spameggs"))
274
275 self.assertRaises(TypeError, a.extend, None)
Walter Dörwald1dde95d2003-12-08 11:38:45 +0000276 self.assertRaises(TypeError, a.extend)
277
Martin Panterb93d8632016-07-25 02:39:20 +0000278 # overflow test. issue1621
279 class CustomIter:
280 def __iter__(self):
281 return self
282 def __next__(self):
283 raise StopIteration
284 def __length_hint__(self):
285 return sys.maxsize
286 a = self.type2test([1,2,3,4])
287 a.extend(CustomIter())
288 self.assertEqual(a, [1,2,3,4])
289
290
Walter Dörwald1dde95d2003-12-08 11:38:45 +0000291 def test_insert(self):
292 a = self.type2test([0, 1, 2])
293 a.insert(0, -2)
294 a.insert(1, -1)
295 a.insert(2, 0)
296 self.assertEqual(a, [-2, -1, 0, 0, 1, 2])
297
298 b = a[:]
299 b.insert(-2, "foo")
300 b.insert(-200, "left")
301 b.insert(200, "right")
302 self.assertEqual(b, self.type2test(["left",-2,-1,0,0,"foo",1,2,"right"]))
303
304 self.assertRaises(TypeError, a.insert)
305
306 def test_pop(self):
307 a = self.type2test([-1, 0, 1])
308 a.pop()
309 self.assertEqual(a, [-1, 0])
310 a.pop(0)
311 self.assertEqual(a, [0])
312 self.assertRaises(IndexError, a.pop, 5)
313 a.pop(0)
314 self.assertEqual(a, [])
315 self.assertRaises(IndexError, a.pop)
Walter Dörwald1dde95d2003-12-08 11:38:45 +0000316 self.assertRaises(TypeError, a.pop, 42, 42)
Raymond Hettingerbcab2b22004-09-29 08:03:17 +0000317 a = self.type2test([0, 10, 20, 30, 40])
Walter Dörwald1dde95d2003-12-08 11:38:45 +0000318
319 def test_remove(self):
320 a = self.type2test([0, 0, 1])
321 a.remove(1)
322 self.assertEqual(a, [0, 0])
323 a.remove(0)
324 self.assertEqual(a, [0])
325 a.remove(0)
326 self.assertEqual(a, [])
327
328 self.assertRaises(ValueError, a.remove, 0)
Tim Peters13018922004-01-18 21:03:23 +0000329
Walter Dörwald1dde95d2003-12-08 11:38:45 +0000330 self.assertRaises(TypeError, a.remove)
331
332 class BadExc(Exception):
333 pass
334
335 class BadCmp:
336 def __eq__(self, other):
337 if other == 2:
338 raise BadExc()
339 return False
340
341 a = self.type2test([0, 1, 2, 3])
342 self.assertRaises(BadExc, a.remove, BadCmp())
343
Walter Dörwald7355e812005-03-21 21:31:47 +0000344 class BadCmp2:
345 def __eq__(self, other):
346 raise BadExc()
347
348 d = self.type2test('abcdefghcij')
349 d.remove('c')
350 self.assertEqual(d, self.type2test('abdefghcij'))
351 d.remove('c')
352 self.assertEqual(d, self.type2test('abdefghij'))
353 self.assertRaises(ValueError, d.remove, 'c')
354 self.assertEqual(d, self.type2test('abdefghij'))
355
356 # Handle comparison errors
357 d = self.type2test(['a', 'b', BadCmp2(), 'c'])
358 e = self.type2test(d)
359 self.assertRaises(BadExc, d.remove, 'c')
360 for x, y in zip(d, e):
361 # verify that original order and values are retained.
Ezio Melottib3aedd42010-11-20 19:04:17 +0000362 self.assertIs(x, y)
Walter Dörwald7355e812005-03-21 21:31:47 +0000363
Walter Dörwald1dde95d2003-12-08 11:38:45 +0000364 def test_index(self):
Jim Fasarakis-Hilliardd702c502017-03-27 22:35:52 +0300365 super().test_index()
Walter Dörwald1dde95d2003-12-08 11:38:45 +0000366 a = self.type2test([-2, -1, 0, 0, 1, 2])
Walter Dörwald1dde95d2003-12-08 11:38:45 +0000367 a.remove(0)
368 self.assertRaises(ValueError, a.index, 2, 0, 4)
369 self.assertEqual(a, self.type2test([-2, -1, 0, 1, 2]))
370
Neal Norwitzf0769532004-08-13 03:18:29 +0000371 # Test modifying the list during index's iteration
372 class EvilCmp:
373 def __init__(self, victim):
374 self.victim = victim
375 def __eq__(self, other):
376 del self.victim[:]
377 return False
378 a = self.type2test()
Guido van Rossum805365e2007-05-07 22:24:25 +0000379 a[:] = [EvilCmp(a) for _ in range(100)]
Neal Norwitzf0769532004-08-13 03:18:29 +0000380 # This used to seg fault before patch #1005778
381 self.assertRaises(ValueError, a.index, None)
382
Walter Dörwald1dde95d2003-12-08 11:38:45 +0000383 def test_reverse(self):
384 u = self.type2test([-2, -1, 0, 1, 2])
385 u2 = u[:]
386 u.reverse()
387 self.assertEqual(u, [2, 1, 0, -1, -2])
388 u.reverse()
389 self.assertEqual(u, u2)
Tim Peters13018922004-01-18 21:03:23 +0000390
Walter Dörwald1dde95d2003-12-08 11:38:45 +0000391 self.assertRaises(TypeError, u.reverse, 42)
392
Eli Benderskycbbaa962011-02-25 05:47:53 +0000393 def test_clear(self):
394 u = self.type2test([2, 3, 4])
395 u.clear()
396 self.assertEqual(u, [])
397
398 u = self.type2test([])
399 u.clear()
400 self.assertEqual(u, [])
401
402 u = self.type2test([])
403 u.append(1)
404 u.clear()
405 u.append(2)
406 self.assertEqual(u, [2])
407
408 self.assertRaises(TypeError, u.clear, None)
409
410 def test_copy(self):
411 u = self.type2test([1, 2, 3])
412 v = u.copy()
413 self.assertEqual(v, [1, 2, 3])
414
415 u = self.type2test([])
416 v = u.copy()
417 self.assertEqual(v, [])
418
419 # test that it's indeed a copy and not a reference
420 u = self.type2test(['a', 'b'])
421 v = u.copy()
422 v.append('i')
423 self.assertEqual(u, ['a', 'b'])
424 self.assertEqual(v, u + ['i'])
425
426 # test that it's a shallow, not a deep copy
427 u = self.type2test([1, 2, [3, 4], 5])
428 v = u.copy()
Eli Benderskycbbaa962011-02-25 05:47:53 +0000429 self.assertEqual(u, v)
Benjamin Peterson2ec8cbc2011-02-25 14:05:42 +0000430 self.assertIs(v[3], u[3])
Eli Benderskycbbaa962011-02-25 05:47:53 +0000431
432 self.assertRaises(TypeError, u.copy, None)
433
Walter Dörwald1dde95d2003-12-08 11:38:45 +0000434 def test_sort(self):
435 u = self.type2test([1, 0])
436 u.sort()
437 self.assertEqual(u, [0, 1])
Tim Peters13018922004-01-18 21:03:23 +0000438
Walter Dörwald1dde95d2003-12-08 11:38:45 +0000439 u = self.type2test([2,1,0,-1,-2])
440 u.sort()
441 self.assertEqual(u, self.type2test([-2,-1,0,1,2]))
Tim Peters13018922004-01-18 21:03:23 +0000442
Walter Dörwald1dde95d2003-12-08 11:38:45 +0000443 self.assertRaises(TypeError, u.sort, 42, 42)
444
445 def revcmp(a, b):
Mark Dickinsona56c4672009-01-27 18:17:45 +0000446 if a == b:
447 return 0
448 elif a < b:
449 return 1
450 else: # a > b
451 return -1
Éric Araujo41bade92011-07-26 15:13:47 +0200452 u.sort(key=cmp_to_key(revcmp))
Walter Dörwald1dde95d2003-12-08 11:38:45 +0000453 self.assertEqual(u, self.type2test([2,1,0,-1,-2]))
454
455 # The following dumps core in unpatched Python 1.5:
456 def myComparison(x,y):
Mark Dickinsona56c4672009-01-27 18:17:45 +0000457 xmod, ymod = x%3, y%7
458 if xmod == ymod:
459 return 0
460 elif xmod < ymod:
461 return -1
462 else: # xmod > ymod
463 return 1
Walter Dörwald1dde95d2003-12-08 11:38:45 +0000464 z = self.type2test(range(12))
Éric Araujo41bade92011-07-26 15:13:47 +0200465 z.sort(key=cmp_to_key(myComparison))
Tim Peters13018922004-01-18 21:03:23 +0000466
Walter Dörwald1dde95d2003-12-08 11:38:45 +0000467 self.assertRaises(TypeError, z.sort, 2)
Tim Peters13018922004-01-18 21:03:23 +0000468
Walter Dörwald1dde95d2003-12-08 11:38:45 +0000469 def selfmodifyingComparison(x,y):
470 z.append(1)
Mark Dickinsona56c4672009-01-27 18:17:45 +0000471 if x == y:
472 return 0
473 elif x < y:
474 return -1
475 else: # x > y
476 return 1
Éric Araujo41bade92011-07-26 15:13:47 +0200477 self.assertRaises(ValueError, z.sort,
478 key=cmp_to_key(selfmodifyingComparison))
Walter Dörwald1dde95d2003-12-08 11:38:45 +0000479
480 self.assertRaises(TypeError, z.sort, 42, 42, 42, 42)
481
482 def test_slice(self):
483 u = self.type2test("spam")
484 u[:2] = "h"
485 self.assertEqual(u, list("ham"))
486
487 def test_iadd(self):
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000488 super().test_iadd()
Walter Dörwald1dde95d2003-12-08 11:38:45 +0000489 u = self.type2test([0, 1])
490 u2 = u
491 u += [2, 3]
Ezio Melottib3aedd42010-11-20 19:04:17 +0000492 self.assertIs(u, u2)
Walter Dörwald1dde95d2003-12-08 11:38:45 +0000493
494 u = self.type2test("spam")
495 u += "eggs"
496 self.assertEqual(u, self.type2test("spameggs"))
497
498 self.assertRaises(TypeError, u.__iadd__, None)
499
500 def test_imul(self):
Jim Fasarakis-Hilliardd702c502017-03-27 22:35:52 +0300501 super().test_imul()
Raymond Hettingerbcab2b22004-09-29 08:03:17 +0000502 s = self.type2test([])
503 oldid = id(s)
504 s *= 10
505 self.assertEqual(id(s), oldid)
Walter Dörwald1dde95d2003-12-08 11:38:45 +0000506
507 def test_extendedslicing(self):
508 # subscript
509 a = self.type2test([0,1,2,3,4])
510
511 # deletion
512 del a[::2]
513 self.assertEqual(a, self.type2test([1,3]))
514 a = self.type2test(range(5))
515 del a[1::2]
516 self.assertEqual(a, self.type2test([0,2,4]))
517 a = self.type2test(range(5))
518 del a[1::-2]
519 self.assertEqual(a, self.type2test([0,2,3,4]))
520 a = self.type2test(range(10))
521 del a[::1000]
522 self.assertEqual(a, self.type2test([1, 2, 3, 4, 5, 6, 7, 8, 9]))
523 # assignment
524 a = self.type2test(range(10))
525 a[::2] = [-1]*5
526 self.assertEqual(a, self.type2test([-1, 1, -1, 3, -1, 5, -1, 7, -1, 9]))
527 a = self.type2test(range(10))
528 a[::-4] = [10]*3
529 self.assertEqual(a, self.type2test([0, 10, 2, 3, 4, 10, 6, 7, 8 ,10]))
530 a = self.type2test(range(4))
531 a[::-1] = a
532 self.assertEqual(a, self.type2test([3, 2, 1, 0]))
533 a = self.type2test(range(10))
534 b = a[:]
535 c = a[:]
536 a[2:3] = self.type2test(["two", "elements"])
537 b[slice(2,3)] = self.type2test(["two", "elements"])
538 c[2:3:] = self.type2test(["two", "elements"])
539 self.assertEqual(a, b)
540 self.assertEqual(a, c)
541 a = self.type2test(range(10))
542 a[::2] = tuple(range(5))
543 self.assertEqual(a, self.type2test([0, 1, 1, 3, 2, 5, 3, 7, 4, 9]))
Mark Dickinsonbc099642010-01-29 17:27:24 +0000544 # test issue7788
545 a = self.type2test(range(10))
546 del a[9::1<<333]
Raymond Hettingera710b332005-08-21 11:03:59 +0000547
548 def test_constructor_exception_handling(self):
549 # Bug #1242657
550 class F(object):
551 def __iter__(self):
Raymond Hettingera710b332005-08-21 11:03:59 +0000552 raise KeyboardInterrupt
553 self.assertRaises(KeyboardInterrupt, list, F())
Serhiy Storchaka8dc2ec12016-03-30 21:01:26 +0300554
555 def test_exhausted_iterator(self):
556 a = self.type2test([1, 2, 3])
557 exhit = iter(a)
558 empit = iter(a)
559 for x in exhit: # exhaust the iterator
560 next(empit) # not exhausted
561 a.append(9)
562 self.assertEqual(list(exhit), [])
563 self.assertEqual(list(empit), [9])
564 self.assertEqual(a, self.type2test([1, 2, 3, 9]))