10c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi""" 20c5958b1636c47ed7c284f859c8e805fd06a0e6Bill YiTests common to list and UserList.UserList 30c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi""" 40c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 50c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiimport sys 60c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiimport os 70c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 80c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yifrom test import test_support, seq_tests 90c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 100c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass CommonTest(seq_tests.CommonTest): 110c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 120c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_init(self): 130c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi # Iterable arg is optional 140c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(self.type2test([]), self.type2test()) 150c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 160c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi # Init clears previous values 170c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a = self.type2test([1, 2, 3]) 180c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a.__init__() 190c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(a, self.type2test([])) 200c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 210c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi # Init overwrites previous values 220c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a = self.type2test([1, 2, 3]) 230c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a.__init__([4, 5, 6]) 240c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(a, self.type2test([4, 5, 6])) 250c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 260c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi # Mutables always return a new object 270c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi b = self.type2test(a) 280c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertNotEqual(id(a), id(b)) 290c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(a, b) 300c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 310c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_repr(self): 320c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi l0 = [] 330c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi l2 = [0, 1, 2] 340c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a0 = self.type2test(l0) 350c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a2 = self.type2test(l2) 360c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 370c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(str(a0), str(l0)) 380c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(repr(a0), repr(l0)) 390c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(repr(a2), repr(l2)) 400c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(str(a2), "[0, 1, 2]") 410c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(repr(a2), "[0, 1, 2]") 420c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 430c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a2.append(a2) 440c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a2.append(3) 450c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(str(a2), "[0, 1, 2, [...], 3]") 460c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(repr(a2), "[0, 1, 2, [...], 3]") 470c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 480c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi l0 = [] 490c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi for i in xrange(sys.getrecursionlimit() + 100): 500c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi l0 = [l0] 510c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertRaises(RuntimeError, repr, l0) 520c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 530c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_print(self): 540c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi d = self.type2test(xrange(200)) 550c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi d.append(d) 560c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi d.extend(xrange(200,400)) 570c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi d.append(d) 580c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi d.append(400) 590c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi try: 600c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi with open(test_support.TESTFN, "wb") as fo: 610c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi print >> fo, d, 620c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi with open(test_support.TESTFN, "rb") as fo: 630c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(fo.read(), repr(d)) 640c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi finally: 650c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi os.remove(test_support.TESTFN) 660c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 670c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_set_subscript(self): 680c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a = self.type2test(range(20)) 690c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertRaises(ValueError, a.__setitem__, slice(0, 10, 0), [1,2,3]) 700c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertRaises(TypeError, a.__setitem__, slice(0, 10), 1) 710c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertRaises(ValueError, a.__setitem__, slice(0, 10, 2), [1,2]) 720c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertRaises(TypeError, a.__getitem__, 'x', 1) 730c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a[slice(2,10,3)] = [1,2,3] 740c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(a, self.type2test([0, 1, 1, 3, 4, 2, 6, 7, 3, 750c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 9, 10, 11, 12, 13, 14, 15, 760c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 16, 17, 18, 19])) 770c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 780c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_reversed(self): 790c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a = self.type2test(range(20)) 800c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi r = reversed(a) 810c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(list(r), self.type2test(range(19, -1, -1))) 820c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertRaises(StopIteration, r.next) 830c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(list(reversed(self.type2test())), 840c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.type2test()) 850c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi # Bug 3689: make sure list-reversed-iterator doesn't have __len__ 860c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertRaises(TypeError, len, reversed([1,2,3])) 870c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 880c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_setitem(self): 890c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a = self.type2test([0, 1]) 900c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a[0] = 0 910c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a[1] = 100 920c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(a, self.type2test([0, 100])) 930c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a[-1] = 200 940c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(a, self.type2test([0, 200])) 950c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a[-2] = 100 960c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(a, self.type2test([100, 200])) 970c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertRaises(IndexError, a.__setitem__, -3, 200) 980c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertRaises(IndexError, a.__setitem__, 2, 200) 990c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 1000c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a = self.type2test([]) 1010c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertRaises(IndexError, a.__setitem__, 0, 200) 1020c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertRaises(IndexError, a.__setitem__, -1, 200) 1030c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertRaises(TypeError, a.__setitem__) 1040c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 1050c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a = self.type2test([0,1,2,3,4]) 1060c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a[0L] = 1 1070c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a[1L] = 2 1080c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a[2L] = 3 1090c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(a, self.type2test([1,2,3,3,4])) 1100c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a[0] = 5 1110c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a[1] = 6 1120c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a[2] = 7 1130c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(a, self.type2test([5,6,7,3,4])) 1140c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a[-2L] = 88 1150c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a[-1L] = 99 1160c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(a, self.type2test([5,6,7,88,99])) 1170c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a[-2] = 8 1180c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a[-1] = 9 1190c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(a, self.type2test([5,6,7,8,9])) 1200c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 1210c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_delitem(self): 1220c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a = self.type2test([0, 1]) 1230c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi del a[1] 1240c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(a, [0]) 1250c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi del a[0] 1260c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(a, []) 1270c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 1280c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a = self.type2test([0, 1]) 1290c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi del a[-2] 1300c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(a, [1]) 1310c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi del a[-1] 1320c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(a, []) 1330c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 1340c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a = self.type2test([0, 1]) 1350c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertRaises(IndexError, a.__delitem__, -3) 1360c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertRaises(IndexError, a.__delitem__, 2) 1370c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 1380c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a = self.type2test([]) 1390c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertRaises(IndexError, a.__delitem__, 0) 1400c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 1410c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertRaises(TypeError, a.__delitem__) 1420c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 1430c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_setslice(self): 1440c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi l = [0, 1] 1450c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a = self.type2test(l) 1460c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 1470c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi for i in range(-3, 4): 1480c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a[:i] = l[:i] 1490c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(a, l) 1500c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a2 = a[:] 1510c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a2[:i] = a[:i] 1520c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(a2, a) 1530c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a[i:] = l[i:] 1540c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(a, l) 1550c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a2 = a[:] 1560c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a2[i:] = a[i:] 1570c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(a2, a) 1580c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi for j in range(-3, 4): 1590c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a[i:j] = l[i:j] 1600c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(a, l) 1610c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a2 = a[:] 1620c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a2[i:j] = a[i:j] 1630c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(a2, a) 1640c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 1650c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi aa2 = a2[:] 1660c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi aa2[:0] = [-2, -1] 1670c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(aa2, [-2, -1, 0, 1]) 1680c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi aa2[0:] = [] 1690c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(aa2, []) 1700c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 1710c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a = self.type2test([1, 2, 3, 4, 5]) 1720c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a[:-1] = a 1730c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(a, self.type2test([1, 2, 3, 4, 5, 5])) 1740c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a = self.type2test([1, 2, 3, 4, 5]) 1750c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a[1:] = a 1760c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(a, self.type2test([1, 1, 2, 3, 4, 5])) 1770c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a = self.type2test([1, 2, 3, 4, 5]) 1780c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a[1:-1] = a 1790c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(a, self.type2test([1, 1, 2, 3, 4, 5, 5])) 1800c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 1810c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a = self.type2test([]) 1820c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a[:] = tuple(range(10)) 1830c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(a, self.type2test(range(10))) 1840c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 1850c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertRaises(TypeError, a.__setslice__, 0, 1, 5) 1860c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertRaises(TypeError, a.__setitem__, slice(0, 1, 5)) 1870c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 1880c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertRaises(TypeError, a.__setslice__) 1890c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertRaises(TypeError, a.__setitem__) 1900c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 1910c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_delslice(self): 1920c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a = self.type2test([0, 1]) 1930c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi del a[1:2] 1940c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi del a[0:1] 1950c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(a, self.type2test([])) 1960c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 1970c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a = self.type2test([0, 1]) 1980c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi del a[1L:2L] 1990c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi del a[0L:1L] 2000c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(a, self.type2test([])) 2010c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 2020c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a = self.type2test([0, 1]) 2030c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi del a[-2:-1] 2040c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(a, self.type2test([1])) 2050c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 2060c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a = self.type2test([0, 1]) 2070c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi del a[-2L:-1L] 2080c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(a, self.type2test([1])) 2090c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 2100c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a = self.type2test([0, 1]) 2110c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi del a[1:] 2120c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi del a[:1] 2130c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(a, self.type2test([])) 2140c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 2150c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a = self.type2test([0, 1]) 2160c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi del a[1L:] 2170c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi del a[:1L] 2180c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(a, self.type2test([])) 2190c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 2200c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a = self.type2test([0, 1]) 2210c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi del a[-1:] 2220c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(a, self.type2test([0])) 2230c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 2240c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a = self.type2test([0, 1]) 2250c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi del a[-1L:] 2260c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(a, self.type2test([0])) 2270c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 2280c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a = self.type2test([0, 1]) 2290c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi del a[:] 2300c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(a, self.type2test([])) 2310c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 2320c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_append(self): 2330c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a = self.type2test([]) 2340c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a.append(0) 2350c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a.append(1) 2360c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a.append(2) 2370c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(a, self.type2test([0, 1, 2])) 2380c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 2390c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertRaises(TypeError, a.append) 2400c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 2410c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_extend(self): 2420c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a1 = self.type2test([0]) 2430c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a2 = self.type2test((0, 1)) 2440c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a = a1[:] 2450c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a.extend(a2) 2460c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(a, a1 + a2) 2470c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 2480c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a.extend(self.type2test([])) 2490c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(a, a1 + a2) 2500c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 2510c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a.extend(a) 2520c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(a, self.type2test([0, 0, 1, 0, 0, 1])) 2530c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 2540c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a = self.type2test("spam") 2550c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a.extend("eggs") 2560c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(a, list("spameggs")) 2570c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 2580c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertRaises(TypeError, a.extend, None) 2590c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 2600c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertRaises(TypeError, a.extend) 2610c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 2620c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_insert(self): 2630c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a = self.type2test([0, 1, 2]) 2640c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a.insert(0, -2) 2650c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a.insert(1, -1) 2660c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a.insert(2, 0) 2670c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(a, [-2, -1, 0, 0, 1, 2]) 2680c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 2690c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi b = a[:] 2700c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi b.insert(-2, "foo") 2710c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi b.insert(-200, "left") 2720c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi b.insert(200, "right") 2730c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(b, self.type2test(["left",-2,-1,0,0,"foo",1,2,"right"])) 2740c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 2750c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertRaises(TypeError, a.insert) 2760c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 2770c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_pop(self): 2780c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a = self.type2test([-1, 0, 1]) 2790c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a.pop() 2800c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(a, [-1, 0]) 2810c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a.pop(0) 2820c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(a, [0]) 2830c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertRaises(IndexError, a.pop, 5) 2840c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a.pop(0) 2850c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(a, []) 2860c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertRaises(IndexError, a.pop) 2870c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertRaises(TypeError, a.pop, 42, 42) 2880c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a = self.type2test([0, 10, 20, 30, 40]) 2890c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 2900c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_remove(self): 2910c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a = self.type2test([0, 0, 1]) 2920c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a.remove(1) 2930c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(a, [0, 0]) 2940c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a.remove(0) 2950c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(a, [0]) 2960c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a.remove(0) 2970c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(a, []) 2980c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 2990c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertRaises(ValueError, a.remove, 0) 3000c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 3010c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertRaises(TypeError, a.remove) 3020c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 3030c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi class BadExc(Exception): 3040c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi pass 3050c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 3060c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi class BadCmp: 3070c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def __eq__(self, other): 3080c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi if other == 2: 3090c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi raise BadExc() 3100c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi return False 3110c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 3120c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a = self.type2test([0, 1, 2, 3]) 3130c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertRaises(BadExc, a.remove, BadCmp()) 3140c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 3150c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi class BadCmp2: 3160c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def __eq__(self, other): 3170c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi raise BadExc() 3180c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 3190c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi d = self.type2test('abcdefghcij') 3200c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi d.remove('c') 3210c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(d, self.type2test('abdefghcij')) 3220c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi d.remove('c') 3230c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(d, self.type2test('abdefghij')) 3240c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertRaises(ValueError, d.remove, 'c') 3250c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(d, self.type2test('abdefghij')) 3260c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 3270c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi # Handle comparison errors 3280c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi d = self.type2test(['a', 'b', BadCmp2(), 'c']) 3290c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi e = self.type2test(d) 3300c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertRaises(BadExc, d.remove, 'c') 3310c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi for x, y in zip(d, e): 3320c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi # verify that original order and values are retained. 3330c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertIs(x, y) 3340c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 3350c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_count(self): 3360c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a = self.type2test([0, 1, 2])*3 3370c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(a.count(0), 3) 3380c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(a.count(1), 3) 3390c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(a.count(3), 0) 3400c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 3410c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertRaises(TypeError, a.count) 3420c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 3430c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi class BadExc(Exception): 3440c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi pass 3450c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 3460c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi class BadCmp: 3470c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def __eq__(self, other): 3480c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi if other == 2: 3490c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi raise BadExc() 3500c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi return False 3510c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 3520c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertRaises(BadExc, a.count, BadCmp()) 3530c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 3540c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_index(self): 3550c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi u = self.type2test([0, 1]) 3560c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(u.index(0), 0) 3570c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(u.index(1), 1) 3580c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertRaises(ValueError, u.index, 2) 3590c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 3600c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi u = self.type2test([-2, -1, 0, 0, 1, 2]) 3610c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(u.count(0), 2) 3620c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(u.index(0), 2) 3630c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(u.index(0, 2), 2) 3640c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(u.index(-2, -10), 0) 3650c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(u.index(0, 3), 3) 3660c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(u.index(0, 3, 4), 3) 3670c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertRaises(ValueError, u.index, 2, 0, -10) 3680c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 3690c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertRaises(TypeError, u.index) 3700c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 3710c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi class BadExc(Exception): 3720c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi pass 3730c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 3740c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi class BadCmp: 3750c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def __eq__(self, other): 3760c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi if other == 2: 3770c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi raise BadExc() 3780c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi return False 3790c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 3800c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a = self.type2test([0, 1, 2, 3]) 3810c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertRaises(BadExc, a.index, BadCmp()) 3820c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 3830c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a = self.type2test([-2, -1, 0, 0, 1, 2]) 3840c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(a.index(0), 2) 3850c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(a.index(0, 2), 2) 3860c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(a.index(0, -4), 2) 3870c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(a.index(-2, -10), 0) 3880c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(a.index(0, 3), 3) 3890c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(a.index(0, -3), 3) 3900c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(a.index(0, 3, 4), 3) 3910c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(a.index(0, -3, -2), 3) 3920c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(a.index(0, -4*sys.maxint, 4*sys.maxint), 2) 3930c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertRaises(ValueError, a.index, 0, 4*sys.maxint,-4*sys.maxint) 3940c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertRaises(ValueError, a.index, 2, 0, -10) 3950c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a.remove(0) 3960c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertRaises(ValueError, a.index, 2, 0, 4) 3970c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(a, self.type2test([-2, -1, 0, 1, 2])) 3980c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 3990c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi # Test modifying the list during index's iteration 4000c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi class EvilCmp: 4010c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def __init__(self, victim): 4020c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.victim = victim 4030c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def __eq__(self, other): 4040c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi del self.victim[:] 4050c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi return False 4060c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a = self.type2test() 4070c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a[:] = [EvilCmp(a) for _ in xrange(100)] 4080c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi # This used to seg fault before patch #1005778 4090c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertRaises(ValueError, a.index, None) 4100c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 4110c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_reverse(self): 4120c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi u = self.type2test([-2, -1, 0, 1, 2]) 4130c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi u2 = u[:] 4140c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi u.reverse() 4150c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(u, [2, 1, 0, -1, -2]) 4160c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi u.reverse() 4170c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(u, u2) 4180c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 4190c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertRaises(TypeError, u.reverse, 42) 4200c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 4210c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_sort(self): 4220c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi with test_support.check_py3k_warnings( 4230c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ("the cmp argument is not supported", DeprecationWarning)): 4240c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self._test_sort() 4250c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 4260c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def _test_sort(self): 4270c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi u = self.type2test([1, 0]) 4280c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi u.sort() 4290c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(u, [0, 1]) 4300c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 4310c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi u = self.type2test([2,1,0,-1,-2]) 4320c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi u.sort() 4330c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(u, self.type2test([-2,-1,0,1,2])) 4340c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 4350c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertRaises(TypeError, u.sort, 42, 42) 4360c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 4370c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def revcmp(a, b): 4380c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi return cmp(b, a) 4390c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi u.sort(revcmp) 4400c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(u, self.type2test([2,1,0,-1,-2])) 4410c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 4420c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi # The following dumps core in unpatched Python 1.5: 4430c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def myComparison(x,y): 4440c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi return cmp(x%3, y%7) 4450c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi z = self.type2test(range(12)) 4460c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi z.sort(myComparison) 4470c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 4480c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertRaises(TypeError, z.sort, 2) 4490c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 4500c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def selfmodifyingComparison(x,y): 4510c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi z.append(1) 4520c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi return cmp(x, y) 4530c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertRaises(ValueError, z.sort, selfmodifyingComparison) 4540c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 4550c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertRaises(TypeError, z.sort, lambda x, y: 's') 4560c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 4570c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertRaises(TypeError, z.sort, 42, 42, 42, 42) 4580c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 4590c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_slice(self): 4600c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi u = self.type2test("spam") 4610c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi u[:2] = "h" 4620c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(u, list("ham")) 4630c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 4640c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_iadd(self): 4650c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi super(CommonTest, self).test_iadd() 4660c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi u = self.type2test([0, 1]) 4670c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi u2 = u 4680c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi u += [2, 3] 4690c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertIs(u, u2) 4700c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 4710c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi u = self.type2test("spam") 4720c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi u += "eggs" 4730c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(u, self.type2test("spameggs")) 4740c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 4750c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertRaises(TypeError, u.__iadd__, None) 4760c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 4770c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_imul(self): 4780c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi u = self.type2test([0, 1]) 4790c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi u *= 3 4800c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(u, self.type2test([0, 1, 0, 1, 0, 1])) 4810c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi u *= 0 4820c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(u, self.type2test([])) 4830c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi s = self.type2test([]) 4840c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi oldid = id(s) 4850c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi s *= 10 4860c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(id(s), oldid) 4870c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 4880c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_extendedslicing(self): 4890c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi # subscript 4900c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a = self.type2test([0,1,2,3,4]) 4910c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 4920c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi # deletion 4930c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi del a[::2] 4940c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(a, self.type2test([1,3])) 4950c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a = self.type2test(range(5)) 4960c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi del a[1::2] 4970c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(a, self.type2test([0,2,4])) 4980c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a = self.type2test(range(5)) 4990c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi del a[1::-2] 5000c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(a, self.type2test([0,2,3,4])) 5010c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a = self.type2test(range(10)) 5020c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi del a[::1000] 5030c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(a, self.type2test([1, 2, 3, 4, 5, 6, 7, 8, 9])) 5040c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi # assignment 5050c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a = self.type2test(range(10)) 5060c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a[::2] = [-1]*5 5070c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(a, self.type2test([-1, 1, -1, 3, -1, 5, -1, 7, -1, 9])) 5080c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a = self.type2test(range(10)) 5090c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a[::-4] = [10]*3 5100c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(a, self.type2test([0, 10, 2, 3, 4, 10, 6, 7, 8 ,10])) 5110c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a = self.type2test(range(4)) 5120c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a[::-1] = a 5130c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(a, self.type2test([3, 2, 1, 0])) 5140c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a = self.type2test(range(10)) 5150c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi b = a[:] 5160c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi c = a[:] 5170c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a[2:3] = self.type2test(["two", "elements"]) 5180c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi b[slice(2,3)] = self.type2test(["two", "elements"]) 5190c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi c[2:3:] = self.type2test(["two", "elements"]) 5200c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(a, b) 5210c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(a, c) 5220c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a = self.type2test(range(10)) 5230c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a[::2] = tuple(range(5)) 5240c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(a, self.type2test([0, 1, 1, 3, 2, 5, 3, 7, 4, 9])) 5250c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi # test issue7788 5260c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a = self.type2test(range(10)) 5270c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi del a[9::1<<333] 5280c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 5290c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_constructor_exception_handling(self): 5300c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi # Bug #1242657 5310c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi class F(object): 5320c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def __iter__(self): 5330c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi raise KeyboardInterrupt 5340c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertRaises(KeyboardInterrupt, list, F()) 535