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