Guido van Rossum | 8ce8a78 | 2007-11-01 19:42:39 +0000 | [diff] [blame] | 1 | import sys |
Benjamin Peterson | ee8712c | 2008-05-20 21:35:26 +0000 | [diff] [blame] | 2 | from test import support, list_tests |
Walter Dörwald | 1dde95d | 2003-12-08 11:38:45 +0000 | [diff] [blame] | 3 | |
| 4 | class ListTest(list_tests.CommonTest): |
| 5 | type2test = list |
| 6 | |
Christian Heimes | 81ee3ef | 2008-05-04 22:42:01 +0000 | [diff] [blame] | 7 | def test_basic(self): |
| 8 | self.assertEqual(list([]), []) |
| 9 | l0_3 = [0, 1, 2, 3] |
| 10 | l0_3_bis = list(l0_3) |
| 11 | self.assertEqual(l0_3, l0_3_bis) |
Benjamin Peterson | c9c0f20 | 2009-06-30 23:06:06 +0000 | [diff] [blame] | 12 | self.assertTrue(l0_3 is not l0_3_bis) |
Christian Heimes | 81ee3ef | 2008-05-04 22:42:01 +0000 | [diff] [blame] | 13 | self.assertEqual(list(()), []) |
| 14 | self.assertEqual(list((0, 1, 2, 3)), [0, 1, 2, 3]) |
| 15 | self.assertEqual(list(''), []) |
| 16 | self.assertEqual(list('spam'), ['s', 'p', 'a', 'm']) |
| 17 | |
Benjamin Peterson | a786b02 | 2008-08-25 21:05:21 +0000 | [diff] [blame] | 18 | if sys.maxsize == 0x7fffffff: |
| 19 | # This test can currently only work on 32-bit machines. |
| 20 | # XXX If/when PySequence_Length() returns a ssize_t, it should be |
| 21 | # XXX re-enabled. |
| 22 | # Verify clearing of bug #556025. |
| 23 | # This assumes that the max data size (sys.maxint) == max |
| 24 | # address size this also assumes that the address size is at |
| 25 | # least 4 bytes with 8 byte addresses, the bug is not well |
| 26 | # tested |
| 27 | # |
| 28 | # Note: This test is expected to SEGV under Cygwin 1.3.12 or |
| 29 | # earlier due to a newlib bug. See the following mailing list |
| 30 | # thread for the details: |
| 31 | |
| 32 | # http://sources.redhat.com/ml/newlib/2002/msg00369.html |
| 33 | self.assertRaises(MemoryError, list, range(sys.maxsize // 2)) |
| 34 | |
Christian Heimes | 81ee3ef | 2008-05-04 22:42:01 +0000 | [diff] [blame] | 35 | # This code used to segfault in Py2.4a3 |
| 36 | x = [] |
| 37 | x.extend(-y for y in x) |
| 38 | self.assertEqual(x, []) |
| 39 | |
Walter Dörwald | 1dde95d | 2003-12-08 11:38:45 +0000 | [diff] [blame] | 40 | def test_truth(self): |
Guido van Rossum | cd16bf6 | 2007-06-13 18:07:49 +0000 | [diff] [blame] | 41 | super().test_truth() |
Benjamin Peterson | c9c0f20 | 2009-06-30 23:06:06 +0000 | [diff] [blame] | 42 | self.assertTrue(not []) |
| 43 | self.assertTrue([42]) |
Walter Dörwald | 1dde95d | 2003-12-08 11:38:45 +0000 | [diff] [blame] | 44 | |
| 45 | def test_identity(self): |
Benjamin Peterson | c9c0f20 | 2009-06-30 23:06:06 +0000 | [diff] [blame] | 46 | self.assertTrue([] is not []) |
Walter Dörwald | 1dde95d | 2003-12-08 11:38:45 +0000 | [diff] [blame] | 47 | |
| 48 | def test_len(self): |
Guido van Rossum | cd16bf6 | 2007-06-13 18:07:49 +0000 | [diff] [blame] | 49 | super().test_len() |
Walter Dörwald | 1dde95d | 2003-12-08 11:38:45 +0000 | [diff] [blame] | 50 | self.assertEqual(len([]), 0) |
| 51 | self.assertEqual(len([0]), 1) |
| 52 | self.assertEqual(len([0, 1, 2]), 3) |
| 53 | |
Guido van Rossum | 8ce8a78 | 2007-11-01 19:42:39 +0000 | [diff] [blame] | 54 | def test_overflow(self): |
| 55 | lst = [4, 5, 6, 7] |
Christian Heimes | a37d4c6 | 2007-12-04 23:02:19 +0000 | [diff] [blame] | 56 | n = int((sys.maxsize*2+2) // len(lst)) |
Guido van Rossum | 8ce8a78 | 2007-11-01 19:42:39 +0000 | [diff] [blame] | 57 | def mul(a, b): return a * b |
| 58 | def imul(a, b): a *= b |
| 59 | self.assertRaises((MemoryError, OverflowError), mul, lst, n) |
| 60 | self.assertRaises((MemoryError, OverflowError), imul, lst, n) |
| 61 | |
Raymond Hettinger | bcab2b2 | 2004-09-29 08:03:17 +0000 | [diff] [blame] | 62 | def test_main(verbose=None): |
Benjamin Peterson | ee8712c | 2008-05-20 21:35:26 +0000 | [diff] [blame] | 63 | support.run_unittest(ListTest) |
Walter Dörwald | 1dde95d | 2003-12-08 11:38:45 +0000 | [diff] [blame] | 64 | |
Raymond Hettinger | bcab2b2 | 2004-09-29 08:03:17 +0000 | [diff] [blame] | 65 | # verify reference counting |
| 66 | import sys |
| 67 | if verbose and hasattr(sys, "gettotalrefcount"): |
| 68 | import gc |
| 69 | counts = [None] * 5 |
Guido van Rossum | 805365e | 2007-05-07 22:24:25 +0000 | [diff] [blame] | 70 | for i in range(len(counts)): |
Benjamin Peterson | ee8712c | 2008-05-20 21:35:26 +0000 | [diff] [blame] | 71 | support.run_unittest(ListTest) |
Raymond Hettinger | bcab2b2 | 2004-09-29 08:03:17 +0000 | [diff] [blame] | 72 | gc.collect() |
| 73 | counts[i] = sys.gettotalrefcount() |
Guido van Rossum | be19ed7 | 2007-02-09 05:37:30 +0000 | [diff] [blame] | 74 | print(counts) |
Raymond Hettinger | bcab2b2 | 2004-09-29 08:03:17 +0000 | [diff] [blame] | 75 | |
| 76 | |
| 77 | if __name__ == "__main__": |
| 78 | test_main(verbose=True) |