blob: 3510bd5febe04f390d54dd1caa356d150816e95e [file] [log] [blame]
Guido van Rossum8ce8a782007-11-01 19:42:39 +00001import sys
Benjamin Petersonee8712c2008-05-20 21:35:26 +00002from test import support, list_tests
Walter Dörwald1dde95d2003-12-08 11:38:45 +00003
4class ListTest(list_tests.CommonTest):
5 type2test = list
6
Christian Heimes81ee3ef2008-05-04 22:42:01 +00007 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 Petersonc9c0f202009-06-30 23:06:06 +000012 self.assertTrue(l0_3 is not l0_3_bis)
Christian Heimes81ee3ef2008-05-04 22:42:01 +000013 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 Petersona786b022008-08-25 21:05:21 +000018 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 Heimes81ee3ef2008-05-04 22:42:01 +000035 # 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örwald1dde95d2003-12-08 11:38:45 +000040 def test_truth(self):
Guido van Rossumcd16bf62007-06-13 18:07:49 +000041 super().test_truth()
Benjamin Petersonc9c0f202009-06-30 23:06:06 +000042 self.assertTrue(not [])
43 self.assertTrue([42])
Walter Dörwald1dde95d2003-12-08 11:38:45 +000044
45 def test_identity(self):
Benjamin Petersonc9c0f202009-06-30 23:06:06 +000046 self.assertTrue([] is not [])
Walter Dörwald1dde95d2003-12-08 11:38:45 +000047
48 def test_len(self):
Guido van Rossumcd16bf62007-06-13 18:07:49 +000049 super().test_len()
Walter Dörwald1dde95d2003-12-08 11:38:45 +000050 self.assertEqual(len([]), 0)
51 self.assertEqual(len([0]), 1)
52 self.assertEqual(len([0, 1, 2]), 3)
53
Guido van Rossum8ce8a782007-11-01 19:42:39 +000054 def test_overflow(self):
55 lst = [4, 5, 6, 7]
Christian Heimesa37d4c62007-12-04 23:02:19 +000056 n = int((sys.maxsize*2+2) // len(lst))
Guido van Rossum8ce8a782007-11-01 19:42:39 +000057 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 Hettingerbcab2b22004-09-29 08:03:17 +000062def test_main(verbose=None):
Benjamin Petersonee8712c2008-05-20 21:35:26 +000063 support.run_unittest(ListTest)
Walter Dörwald1dde95d2003-12-08 11:38:45 +000064
Raymond Hettingerbcab2b22004-09-29 08:03:17 +000065 # verify reference counting
66 import sys
67 if verbose and hasattr(sys, "gettotalrefcount"):
68 import gc
69 counts = [None] * 5
Guido van Rossum805365e2007-05-07 22:24:25 +000070 for i in range(len(counts)):
Benjamin Petersonee8712c2008-05-20 21:35:26 +000071 support.run_unittest(ListTest)
Raymond Hettingerbcab2b22004-09-29 08:03:17 +000072 gc.collect()
73 counts[i] = sys.gettotalrefcount()
Guido van Rossumbe19ed72007-02-09 05:37:30 +000074 print(counts)
Raymond Hettingerbcab2b22004-09-29 08:03:17 +000075
76
77if __name__ == "__main__":
78 test_main(verbose=True)