Home | History | Annotate | Download | only in test
      1 import sys
      2 from test import test_support, list_tests
      3 
      4 class 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 
     62 def 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 
     77 if __name__ == "__main__":
     78     test_main(verbose=True)
     79