2007-10-17 15:46:37 -03:00
|
|
|
import sys
|
2003-12-08 07:38:45 -04:00
|
|
|
from test import test_support, list_tests
|
|
|
|
|
|
|
|
class ListTest(list_tests.CommonTest):
|
|
|
|
type2test = list
|
|
|
|
|
2008-05-03 18:35:18 -03:00
|
|
|
def test_basic(self):
|
|
|
|
self.assertEqual(list([]), [])
|
|
|
|
l0_3 = [0, 1, 2, 3]
|
|
|
|
l0_3_bis = list(l0_3)
|
|
|
|
self.assertEqual(l0_3, l0_3_bis)
|
2009-06-30 19:57:08 -03:00
|
|
|
self.assertTrue(l0_3 is not l0_3_bis)
|
2008-05-03 18:35:18 -03:00
|
|
|
self.assertEqual(list(()), [])
|
|
|
|
self.assertEqual(list((0, 1, 2, 3)), [0, 1, 2, 3])
|
|
|
|
self.assertEqual(list(''), [])
|
|
|
|
self.assertEqual(list('spam'), ['s', 'p', 'a', 'm'])
|
|
|
|
|
2008-08-22 21:59:14 -03:00
|
|
|
if sys.maxsize == 0x7fffffff:
|
2008-05-03 18:35:18 -03:00
|
|
|
# This test can currently only work on 32-bit machines.
|
|
|
|
# XXX If/when PySequence_Length() returns a ssize_t, it should be
|
|
|
|
# XXX re-enabled.
|
|
|
|
# Verify clearing of bug #556025.
|
|
|
|
# This assumes that the max data size (sys.maxint) == max
|
|
|
|
# address size this also assumes that the address size is at
|
|
|
|
# least 4 bytes with 8 byte addresses, the bug is not well
|
|
|
|
# tested
|
|
|
|
#
|
|
|
|
# Note: This test is expected to SEGV under Cygwin 1.3.12 or
|
|
|
|
# earlier due to a newlib bug. See the following mailing list
|
|
|
|
# thread for the details:
|
|
|
|
|
|
|
|
# http://sources.redhat.com/ml/newlib/2002/msg00369.html
|
|
|
|
self.assertRaises(MemoryError, list, xrange(sys.maxint // 2))
|
|
|
|
|
|
|
|
# This code used to segfault in Py2.4a3
|
|
|
|
x = []
|
|
|
|
x.extend(-y for y in x)
|
|
|
|
self.assertEqual(x, [])
|
|
|
|
|
2003-12-08 07:38:45 -04:00
|
|
|
def test_truth(self):
|
|
|
|
super(ListTest, self).test_truth()
|
2009-06-30 19:57:08 -03:00
|
|
|
self.assertTrue(not [])
|
|
|
|
self.assertTrue([42])
|
2003-12-08 07:38:45 -04:00
|
|
|
|
|
|
|
def test_identity(self):
|
2009-06-30 19:57:08 -03:00
|
|
|
self.assertTrue([] is not [])
|
2003-12-08 07:38:45 -04:00
|
|
|
|
|
|
|
def test_len(self):
|
|
|
|
super(ListTest, self).test_len()
|
|
|
|
self.assertEqual(len([]), 0)
|
|
|
|
self.assertEqual(len([0]), 1)
|
|
|
|
self.assertEqual(len([0, 1, 2]), 3)
|
|
|
|
|
2007-10-17 15:46:37 -03:00
|
|
|
def test_overflow(self):
|
|
|
|
lst = [4, 5, 6, 7]
|
2014-08-06 12:31:54 -03:00
|
|
|
n = int((sys.maxsize*2+2) // len(lst))
|
2007-10-17 15:46:37 -03:00
|
|
|
def mul(a, b): return a * b
|
|
|
|
def imul(a, b): a *= b
|
|
|
|
self.assertRaises((MemoryError, OverflowError), mul, lst, n)
|
|
|
|
self.assertRaises((MemoryError, OverflowError), imul, lst, n)
|
|
|
|
|
2004-09-29 05:03:17 -03:00
|
|
|
def test_main(verbose=None):
|
2003-12-08 07:38:45 -04:00
|
|
|
test_support.run_unittest(ListTest)
|
|
|
|
|
2004-09-29 05:03:17 -03:00
|
|
|
# verify reference counting
|
|
|
|
import sys
|
|
|
|
if verbose and hasattr(sys, "gettotalrefcount"):
|
|
|
|
import gc
|
|
|
|
counts = [None] * 5
|
|
|
|
for i in xrange(len(counts)):
|
|
|
|
test_support.run_unittest(ListTest)
|
|
|
|
gc.collect()
|
|
|
|
counts[i] = sys.gettotalrefcount()
|
|
|
|
print counts
|
|
|
|
|
|
|
|
|
|
|
|
if __name__ == "__main__":
|
|
|
|
test_main(verbose=True)
|