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