mirror of
				https://github.com/python/cpython.git
				synced 2025-11-04 03:44:55 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			78 lines
		
	
	
	
		
			2.5 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			78 lines
		
	
	
	
		
			2.5 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
import sys
 | 
						|
from test import support, list_tests
 | 
						|
 | 
						|
class ListTest(list_tests.CommonTest):
 | 
						|
    type2test = list
 | 
						|
 | 
						|
    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)
 | 
						|
        self.assertTrue(l0_3 is not l0_3_bis)
 | 
						|
        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'])
 | 
						|
 | 
						|
        if sys.maxsize == 0x7fffffff:
 | 
						|
            # 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, range(sys.maxsize // 2))
 | 
						|
 | 
						|
        # This code used to segfault in Py2.4a3
 | 
						|
        x = []
 | 
						|
        x.extend(-y for y in x)
 | 
						|
        self.assertEqual(x, [])
 | 
						|
 | 
						|
    def test_truth(self):
 | 
						|
        super().test_truth()
 | 
						|
        self.assertTrue(not [])
 | 
						|
        self.assertTrue([42])
 | 
						|
 | 
						|
    def test_identity(self):
 | 
						|
        self.assertTrue([] is not [])
 | 
						|
 | 
						|
    def test_len(self):
 | 
						|
        super().test_len()
 | 
						|
        self.assertEqual(len([]), 0)
 | 
						|
        self.assertEqual(len([0]), 1)
 | 
						|
        self.assertEqual(len([0, 1, 2]), 3)
 | 
						|
 | 
						|
    def test_overflow(self):
 | 
						|
        lst = [4, 5, 6, 7]
 | 
						|
        n = int((sys.maxsize*2+2) // len(lst))
 | 
						|
        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)
 | 
						|
 | 
						|
def test_main(verbose=None):
 | 
						|
    support.run_unittest(ListTest)
 | 
						|
 | 
						|
    # verify reference counting
 | 
						|
    import sys
 | 
						|
    if verbose and hasattr(sys, "gettotalrefcount"):
 | 
						|
        import gc
 | 
						|
        counts = [None] * 5
 | 
						|
        for i in range(len(counts)):
 | 
						|
            support.run_unittest(ListTest)
 | 
						|
            gc.collect()
 | 
						|
            counts[i] = sys.gettotalrefcount()
 | 
						|
        print(counts)
 | 
						|
 | 
						|
 | 
						|
if __name__ == "__main__":
 | 
						|
    test_main(verbose=True)
 |