1import sys 2from test import test_support, list_tests 3 4class ListTest(list_tests.CommonTest): 5 type2test = list 6 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) 12 self.assertTrue(l0_3 is not l0_3_bis) 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 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, xrange(sys.maxint // 2)) 34 35 # This code used to segfault in Py2.4a3 36 x = [] 37 x.extend(-y for y in x) 38 self.assertEqual(x, []) 39 40 def test_truth(self): 41 super(ListTest, self).test_truth() 42 self.assertTrue(not []) 43 self.assertTrue([42]) 44 45 def test_identity(self): 46 self.assertTrue([] is not []) 47 48 def test_len(self): 49 super(ListTest, self).test_len() 50 self.assertEqual(len([]), 0) 51 self.assertEqual(len([0]), 1) 52 self.assertEqual(len([0, 1, 2]), 3) 53 54 def test_overflow(self): 55 lst = [4, 5, 6, 7] 56 n = int((sys.maxsize*2+2) // len(lst)) 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 62def test_main(verbose=None): 63 test_support.run_unittest(ListTest) 64 65 # verify reference counting 66 import sys 67 if verbose and hasattr(sys, "gettotalrefcount"): 68 import gc 69 counts = [None] * 5 70 for i in xrange(len(counts)): 71 test_support.run_unittest(ListTest) 72 gc.collect() 73 counts[i] = sys.gettotalrefcount() 74 print counts 75 76 77if __name__ == "__main__": 78 test_main(verbose=True) 79