10a8c90248264a8b26970b4473770bcc3df8515fJosh Gaoimport unittest
20a8c90248264a8b26970b4473770bcc3df8515fJosh Gaofrom test import test_support
30a8c90248264a8b26970b4473770bcc3df8515fJosh Gaoimport operator
40a8c90248264a8b26970b4473770bcc3df8515fJosh Gaofrom sys import maxint
50a8c90248264a8b26970b4473770bcc3df8515fJosh Gaomaxsize = test_support.MAX_Py_ssize_t
60a8c90248264a8b26970b4473770bcc3df8515fJosh Gaominsize = -maxsize-1
70a8c90248264a8b26970b4473770bcc3df8515fJosh Gao
80a8c90248264a8b26970b4473770bcc3df8515fJosh Gaoclass oldstyle:
90a8c90248264a8b26970b4473770bcc3df8515fJosh Gao    def __index__(self):
100a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        return self.ind
110a8c90248264a8b26970b4473770bcc3df8515fJosh Gao
120a8c90248264a8b26970b4473770bcc3df8515fJosh Gaoclass newstyle(object):
130a8c90248264a8b26970b4473770bcc3df8515fJosh Gao    def __index__(self):
140a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        return self.ind
150a8c90248264a8b26970b4473770bcc3df8515fJosh Gao
160a8c90248264a8b26970b4473770bcc3df8515fJosh Gaoclass TrapInt(int):
170a8c90248264a8b26970b4473770bcc3df8515fJosh Gao    def __index__(self):
180a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        return self
190a8c90248264a8b26970b4473770bcc3df8515fJosh Gao
200a8c90248264a8b26970b4473770bcc3df8515fJosh Gaoclass TrapLong(long):
210a8c90248264a8b26970b4473770bcc3df8515fJosh Gao    def __index__(self):
220a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        return self
230a8c90248264a8b26970b4473770bcc3df8515fJosh Gao
240a8c90248264a8b26970b4473770bcc3df8515fJosh Gaoclass BaseTestCase(unittest.TestCase):
250a8c90248264a8b26970b4473770bcc3df8515fJosh Gao    def setUp(self):
260a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.o = oldstyle()
270a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.n = newstyle()
280a8c90248264a8b26970b4473770bcc3df8515fJosh Gao
290a8c90248264a8b26970b4473770bcc3df8515fJosh Gao    def test_basic(self):
300a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.o.ind = -2
310a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.n.ind = 2
320a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertEqual(operator.index(self.o), -2)
330a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertEqual(operator.index(self.n), 2)
340a8c90248264a8b26970b4473770bcc3df8515fJosh Gao
350a8c90248264a8b26970b4473770bcc3df8515fJosh Gao    def test_slice(self):
360a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.o.ind = 1
370a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.n.ind = 2
380a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        slc = slice(self.o, self.o, self.o)
390a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        check_slc = slice(1, 1, 1)
400a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertEqual(slc.indices(self.o), check_slc.indices(1))
410a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        slc = slice(self.n, self.n, self.n)
420a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        check_slc = slice(2, 2, 2)
430a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertEqual(slc.indices(self.n), check_slc.indices(2))
440a8c90248264a8b26970b4473770bcc3df8515fJosh Gao
450a8c90248264a8b26970b4473770bcc3df8515fJosh Gao    def test_wrappers(self):
460a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.o.ind = 4
470a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.n.ind = 5
480a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertEqual(6 .__index__(), 6)
490a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertEqual(-7L.__index__(), -7)
500a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertEqual(self.o.__index__(), 4)
510a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertEqual(self.n.__index__(), 5)
520a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertEqual(True.__index__(), 1)
530a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertEqual(False.__index__(), 0)
540a8c90248264a8b26970b4473770bcc3df8515fJosh Gao
550a8c90248264a8b26970b4473770bcc3df8515fJosh Gao    def test_subclasses(self):
560a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        r = range(10)
570a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertEqual(r[TrapInt(5):TrapInt(10)], r[5:10])
580a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertEqual(r[TrapLong(5):TrapLong(10)], r[5:10])
590a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertEqual(slice(TrapInt()).indices(0), (0,0,1))
600a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertEqual(slice(TrapLong(0)).indices(0), (0,0,1))
610a8c90248264a8b26970b4473770bcc3df8515fJosh Gao
620a8c90248264a8b26970b4473770bcc3df8515fJosh Gao    def test_error(self):
630a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.o.ind = 'dumb'
640a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.n.ind = 'bad'
650a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertRaises(TypeError, operator.index, self.o)
660a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertRaises(TypeError, operator.index, self.n)
670a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertRaises(TypeError, slice(self.o).indices, 0)
680a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertRaises(TypeError, slice(self.n).indices, 0)
690a8c90248264a8b26970b4473770bcc3df8515fJosh Gao
700a8c90248264a8b26970b4473770bcc3df8515fJosh Gao
710a8c90248264a8b26970b4473770bcc3df8515fJosh Gaoclass SeqTestCase(unittest.TestCase):
720a8c90248264a8b26970b4473770bcc3df8515fJosh Gao    # This test case isn't run directly. It just defines common tests
730a8c90248264a8b26970b4473770bcc3df8515fJosh Gao    # to the different sequence types below
740a8c90248264a8b26970b4473770bcc3df8515fJosh Gao    def setUp(self):
750a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.o = oldstyle()
760a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.n = newstyle()
770a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.o2 = oldstyle()
780a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.n2 = newstyle()
790a8c90248264a8b26970b4473770bcc3df8515fJosh Gao
800a8c90248264a8b26970b4473770bcc3df8515fJosh Gao    def test_index(self):
810a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.o.ind = -2
820a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.n.ind = 2
830a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertEqual(self.seq[self.n], self.seq[2])
840a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertEqual(self.seq[self.o], self.seq[-2])
850a8c90248264a8b26970b4473770bcc3df8515fJosh Gao
860a8c90248264a8b26970b4473770bcc3df8515fJosh Gao    def test_slice(self):
870a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.o.ind = 1
880a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.o2.ind = 3
890a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.n.ind = 2
900a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.n2.ind = 4
910a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertEqual(self.seq[self.o:self.o2], self.seq[1:3])
920a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertEqual(self.seq[self.n:self.n2], self.seq[2:4])
930a8c90248264a8b26970b4473770bcc3df8515fJosh Gao
940a8c90248264a8b26970b4473770bcc3df8515fJosh Gao    def test_slice_bug7532(self):
950a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        seqlen = len(self.seq)
960a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.o.ind = int(seqlen * 1.5)
970a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.n.ind = seqlen + 2
980a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertEqual(self.seq[self.o:], self.seq[0:0])
990a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertEqual(self.seq[:self.o], self.seq)
1000a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertEqual(self.seq[self.n:], self.seq[0:0])
1010a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertEqual(self.seq[:self.n], self.seq)
1020a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        if isinstance(self.seq, ClassicSeq):
1030a8c90248264a8b26970b4473770bcc3df8515fJosh Gao            return
1040a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        # These tests fail for ClassicSeq (see bug #7532)
1050a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.o2.ind = -seqlen - 2
1060a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.n2.ind = -int(seqlen * 1.5)
1070a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertEqual(self.seq[self.o2:], self.seq)
1080a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertEqual(self.seq[:self.o2], self.seq[0:0])
1090a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertEqual(self.seq[self.n2:], self.seq)
1100a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertEqual(self.seq[:self.n2], self.seq[0:0])
1110a8c90248264a8b26970b4473770bcc3df8515fJosh Gao
1120a8c90248264a8b26970b4473770bcc3df8515fJosh Gao    def test_repeat(self):
1130a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.o.ind = 3
1140a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.n.ind = 2
1150a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertEqual(self.seq * self.o, self.seq * 3)
1160a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertEqual(self.seq * self.n, self.seq * 2)
1170a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertEqual(self.o * self.seq, self.seq * 3)
1180a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertEqual(self.n * self.seq, self.seq * 2)
1190a8c90248264a8b26970b4473770bcc3df8515fJosh Gao
1200a8c90248264a8b26970b4473770bcc3df8515fJosh Gao    def test_wrappers(self):
1210a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.o.ind = 4
1220a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.n.ind = 5
1230a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertEqual(self.seq.__getitem__(self.o), self.seq[4])
1240a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertEqual(self.seq.__mul__(self.o), self.seq * 4)
1250a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertEqual(self.seq.__rmul__(self.o), self.seq * 4)
1260a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertEqual(self.seq.__getitem__(self.n), self.seq[5])
1270a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertEqual(self.seq.__mul__(self.n), self.seq * 5)
1280a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertEqual(self.seq.__rmul__(self.n), self.seq * 5)
1290a8c90248264a8b26970b4473770bcc3df8515fJosh Gao
1300a8c90248264a8b26970b4473770bcc3df8515fJosh Gao    def test_subclasses(self):
1310a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertEqual(self.seq[TrapInt()], self.seq[0])
1320a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertEqual(self.seq[TrapLong()], self.seq[0])
1330a8c90248264a8b26970b4473770bcc3df8515fJosh Gao
1340a8c90248264a8b26970b4473770bcc3df8515fJosh Gao    def test_error(self):
1350a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.o.ind = 'dumb'
1360a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.n.ind = 'bad'
1370a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        indexobj = lambda x, obj: obj.seq[x]
1380a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertRaises(TypeError, indexobj, self.o, self)
1390a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertRaises(TypeError, indexobj, self.n, self)
1400a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        sliceobj = lambda x, obj: obj.seq[x:]
1410a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertRaises(TypeError, sliceobj, self.o, self)
1420a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertRaises(TypeError, sliceobj, self.n, self)
1430a8c90248264a8b26970b4473770bcc3df8515fJosh Gao
1440a8c90248264a8b26970b4473770bcc3df8515fJosh Gao
1450a8c90248264a8b26970b4473770bcc3df8515fJosh Gaoclass ListTestCase(SeqTestCase):
1460a8c90248264a8b26970b4473770bcc3df8515fJosh Gao    seq = [0,10,20,30,40,50]
1470a8c90248264a8b26970b4473770bcc3df8515fJosh Gao
1480a8c90248264a8b26970b4473770bcc3df8515fJosh Gao    def test_setdelitem(self):
1490a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.o.ind = -2
1500a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.n.ind = 2
1510a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        lst = list('ab!cdefghi!j')
1520a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        del lst[self.o]
1530a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        del lst[self.n]
1540a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        lst[self.o] = 'X'
1550a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        lst[self.n] = 'Y'
1560a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertEqual(lst, list('abYdefghXj'))
1570a8c90248264a8b26970b4473770bcc3df8515fJosh Gao
1580a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        lst = [5, 6, 7, 8, 9, 10, 11]
1590a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        lst.__setitem__(self.n, "here")
1600a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertEqual(lst, [5, 6, "here", 8, 9, 10, 11])
1610a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        lst.__delitem__(self.n)
1620a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertEqual(lst, [5, 6, 8, 9, 10, 11])
1630a8c90248264a8b26970b4473770bcc3df8515fJosh Gao
1640a8c90248264a8b26970b4473770bcc3df8515fJosh Gao    def test_inplace_repeat(self):
1650a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.o.ind = 2
1660a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.n.ind = 3
1670a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        lst = [6, 4]
1680a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        lst *= self.o
1690a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertEqual(lst, [6, 4, 6, 4])
1700a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        lst *= self.n
1710a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertEqual(lst, [6, 4, 6, 4] * 3)
1720a8c90248264a8b26970b4473770bcc3df8515fJosh Gao
1730a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        lst = [5, 6, 7, 8, 9, 11]
1740a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        l2 = lst.__imul__(self.n)
1750a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertIs(l2, lst)
1760a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertEqual(lst, [5, 6, 7, 8, 9, 11] * 3)
1770a8c90248264a8b26970b4473770bcc3df8515fJosh Gao
1780a8c90248264a8b26970b4473770bcc3df8515fJosh Gao
1790a8c90248264a8b26970b4473770bcc3df8515fJosh Gaoclass _BaseSeq:
1800a8c90248264a8b26970b4473770bcc3df8515fJosh Gao
1810a8c90248264a8b26970b4473770bcc3df8515fJosh Gao    def __init__(self, iterable):
1820a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self._list = list(iterable)
1830a8c90248264a8b26970b4473770bcc3df8515fJosh Gao
1840a8c90248264a8b26970b4473770bcc3df8515fJosh Gao    def __repr__(self):
1850a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        return repr(self._list)
1860a8c90248264a8b26970b4473770bcc3df8515fJosh Gao
1870a8c90248264a8b26970b4473770bcc3df8515fJosh Gao    def __eq__(self, other):
1880a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        return self._list == other
1890a8c90248264a8b26970b4473770bcc3df8515fJosh Gao
1900a8c90248264a8b26970b4473770bcc3df8515fJosh Gao    def __len__(self):
1910a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        return len(self._list)
1920a8c90248264a8b26970b4473770bcc3df8515fJosh Gao
1930a8c90248264a8b26970b4473770bcc3df8515fJosh Gao    def __mul__(self, n):
1940a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        return self.__class__(self._list*n)
1950a8c90248264a8b26970b4473770bcc3df8515fJosh Gao    __rmul__ = __mul__
1960a8c90248264a8b26970b4473770bcc3df8515fJosh Gao
1970a8c90248264a8b26970b4473770bcc3df8515fJosh Gao    def __getitem__(self, index):
1980a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        return self._list[index]
1990a8c90248264a8b26970b4473770bcc3df8515fJosh Gao
2000a8c90248264a8b26970b4473770bcc3df8515fJosh Gao
2010a8c90248264a8b26970b4473770bcc3df8515fJosh Gaoclass _GetSliceMixin:
2020a8c90248264a8b26970b4473770bcc3df8515fJosh Gao
2030a8c90248264a8b26970b4473770bcc3df8515fJosh Gao    def __getslice__(self, i, j):
2040a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        return self._list.__getslice__(i, j)
2050a8c90248264a8b26970b4473770bcc3df8515fJosh Gao
2060a8c90248264a8b26970b4473770bcc3df8515fJosh Gao
2070a8c90248264a8b26970b4473770bcc3df8515fJosh Gaoclass ClassicSeq(_BaseSeq): pass
2080a8c90248264a8b26970b4473770bcc3df8515fJosh Gaoclass NewSeq(_BaseSeq, object): pass
2090a8c90248264a8b26970b4473770bcc3df8515fJosh Gaoclass ClassicSeqDeprecated(_GetSliceMixin, ClassicSeq): pass
2100a8c90248264a8b26970b4473770bcc3df8515fJosh Gaoclass NewSeqDeprecated(_GetSliceMixin, NewSeq): pass
2110a8c90248264a8b26970b4473770bcc3df8515fJosh Gao
2120a8c90248264a8b26970b4473770bcc3df8515fJosh Gao
2130a8c90248264a8b26970b4473770bcc3df8515fJosh Gaoclass TupleTestCase(SeqTestCase):
2140a8c90248264a8b26970b4473770bcc3df8515fJosh Gao    seq = (0,10,20,30,40,50)
2150a8c90248264a8b26970b4473770bcc3df8515fJosh Gao
2160a8c90248264a8b26970b4473770bcc3df8515fJosh Gaoclass StringTestCase(SeqTestCase):
2170a8c90248264a8b26970b4473770bcc3df8515fJosh Gao    seq = "this is a test"
2180a8c90248264a8b26970b4473770bcc3df8515fJosh Gao
2190a8c90248264a8b26970b4473770bcc3df8515fJosh Gaoclass ByteArrayTestCase(SeqTestCase):
2200a8c90248264a8b26970b4473770bcc3df8515fJosh Gao    seq = bytearray("this is a test")
2210a8c90248264a8b26970b4473770bcc3df8515fJosh Gao
2220a8c90248264a8b26970b4473770bcc3df8515fJosh Gaoclass UnicodeTestCase(SeqTestCase):
2230a8c90248264a8b26970b4473770bcc3df8515fJosh Gao    seq = u"this is a test"
2240a8c90248264a8b26970b4473770bcc3df8515fJosh Gao
2250a8c90248264a8b26970b4473770bcc3df8515fJosh Gaoclass ClassicSeqTestCase(SeqTestCase):
2260a8c90248264a8b26970b4473770bcc3df8515fJosh Gao    seq = ClassicSeq((0,10,20,30,40,50))
2270a8c90248264a8b26970b4473770bcc3df8515fJosh Gao
2280a8c90248264a8b26970b4473770bcc3df8515fJosh Gaoclass NewSeqTestCase(SeqTestCase):
2290a8c90248264a8b26970b4473770bcc3df8515fJosh Gao    seq = NewSeq((0,10,20,30,40,50))
2300a8c90248264a8b26970b4473770bcc3df8515fJosh Gao
2310a8c90248264a8b26970b4473770bcc3df8515fJosh Gaoclass ClassicSeqDeprecatedTestCase(SeqTestCase):
2320a8c90248264a8b26970b4473770bcc3df8515fJosh Gao    seq = ClassicSeqDeprecated((0,10,20,30,40,50))
2330a8c90248264a8b26970b4473770bcc3df8515fJosh Gao
2340a8c90248264a8b26970b4473770bcc3df8515fJosh Gaoclass NewSeqDeprecatedTestCase(SeqTestCase):
2350a8c90248264a8b26970b4473770bcc3df8515fJosh Gao    seq = NewSeqDeprecated((0,10,20,30,40,50))
2360a8c90248264a8b26970b4473770bcc3df8515fJosh Gao
2370a8c90248264a8b26970b4473770bcc3df8515fJosh Gao
2380a8c90248264a8b26970b4473770bcc3df8515fJosh Gaoclass XRangeTestCase(unittest.TestCase):
2390a8c90248264a8b26970b4473770bcc3df8515fJosh Gao
2400a8c90248264a8b26970b4473770bcc3df8515fJosh Gao    def test_xrange(self):
2410a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        n = newstyle()
2420a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        n.ind = 5
2430a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertEqual(xrange(1, 20)[n], 6)
2440a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertEqual(xrange(1, 20).__getitem__(n), 6)
2450a8c90248264a8b26970b4473770bcc3df8515fJosh Gao
2460a8c90248264a8b26970b4473770bcc3df8515fJosh Gaoclass OverflowTestCase(unittest.TestCase):
2470a8c90248264a8b26970b4473770bcc3df8515fJosh Gao
2480a8c90248264a8b26970b4473770bcc3df8515fJosh Gao    def setUp(self):
2490a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.pos = 2**100
2500a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.neg = -self.pos
2510a8c90248264a8b26970b4473770bcc3df8515fJosh Gao
2520a8c90248264a8b26970b4473770bcc3df8515fJosh Gao    def test_large_longs(self):
2530a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertEqual(self.pos.__index__(), self.pos)
2540a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertEqual(self.neg.__index__(), self.neg)
2550a8c90248264a8b26970b4473770bcc3df8515fJosh Gao
2560a8c90248264a8b26970b4473770bcc3df8515fJosh Gao    def _getitem_helper(self, base):
2570a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        class GetItem(base):
2580a8c90248264a8b26970b4473770bcc3df8515fJosh Gao            def __len__(self):
2590a8c90248264a8b26970b4473770bcc3df8515fJosh Gao                return maxint # cannot return long here
2600a8c90248264a8b26970b4473770bcc3df8515fJosh Gao            def __getitem__(self, key):
2610a8c90248264a8b26970b4473770bcc3df8515fJosh Gao                return key
2620a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        x = GetItem()
2630a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertEqual(x[self.pos], self.pos)
2640a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertEqual(x[self.neg], self.neg)
2650a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertEqual(x[self.neg:self.pos].indices(maxsize),
2660a8c90248264a8b26970b4473770bcc3df8515fJosh Gao                         (0, maxsize, 1))
2670a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertEqual(x[self.neg:self.pos:1].indices(maxsize),
2680a8c90248264a8b26970b4473770bcc3df8515fJosh Gao                         (0, maxsize, 1))
2690a8c90248264a8b26970b4473770bcc3df8515fJosh Gao
2700a8c90248264a8b26970b4473770bcc3df8515fJosh Gao    def _getslice_helper_deprecated(self, base):
2710a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        class GetItem(base):
2720a8c90248264a8b26970b4473770bcc3df8515fJosh Gao            def __len__(self):
2730a8c90248264a8b26970b4473770bcc3df8515fJosh Gao                return maxint # cannot return long here
2740a8c90248264a8b26970b4473770bcc3df8515fJosh Gao            def __getitem__(self, key):
2750a8c90248264a8b26970b4473770bcc3df8515fJosh Gao                return key
2760a8c90248264a8b26970b4473770bcc3df8515fJosh Gao            def __getslice__(self, i, j):
2770a8c90248264a8b26970b4473770bcc3df8515fJosh Gao                return i, j
2780a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        x = GetItem()
2790a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertEqual(x[self.pos], self.pos)
2800a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertEqual(x[self.neg], self.neg)
2810a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertEqual(x[self.neg:self.pos], (maxint+minsize, maxsize))
2820a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertEqual(x[self.neg:self.pos:1].indices(maxsize),
2830a8c90248264a8b26970b4473770bcc3df8515fJosh Gao                         (0, maxsize, 1))
2840a8c90248264a8b26970b4473770bcc3df8515fJosh Gao
2850a8c90248264a8b26970b4473770bcc3df8515fJosh Gao    def test_getitem(self):
2860a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self._getitem_helper(object)
2870a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        with test_support.check_py3k_warnings():
2880a8c90248264a8b26970b4473770bcc3df8515fJosh Gao            self._getslice_helper_deprecated(object)
2890a8c90248264a8b26970b4473770bcc3df8515fJosh Gao
2900a8c90248264a8b26970b4473770bcc3df8515fJosh Gao    def test_getitem_classic(self):
2910a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        class Empty: pass
2920a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        # XXX This test fails (see bug #7532)
2930a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        #self._getitem_helper(Empty)
2940a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        with test_support.check_py3k_warnings():
2950a8c90248264a8b26970b4473770bcc3df8515fJosh Gao            self._getslice_helper_deprecated(Empty)
2960a8c90248264a8b26970b4473770bcc3df8515fJosh Gao
2970a8c90248264a8b26970b4473770bcc3df8515fJosh Gao    def test_sequence_repeat(self):
2980a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertRaises(OverflowError, lambda: "a" * self.pos)
2990a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertRaises(OverflowError, lambda: "a" * self.neg)
3000a8c90248264a8b26970b4473770bcc3df8515fJosh Gao
3010a8c90248264a8b26970b4473770bcc3df8515fJosh Gao
3020a8c90248264a8b26970b4473770bcc3df8515fJosh Gaodef test_main():
3030a8c90248264a8b26970b4473770bcc3df8515fJosh Gao    test_support.run_unittest(
3040a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        BaseTestCase,
3050a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        ListTestCase,
3060a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        TupleTestCase,
3070a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        ByteArrayTestCase,
3080a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        StringTestCase,
3090a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        UnicodeTestCase,
3100a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        ClassicSeqTestCase,
3110a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        NewSeqTestCase,
3120a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        XRangeTestCase,
3130a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        OverflowTestCase,
3140a8c90248264a8b26970b4473770bcc3df8515fJosh Gao    )
3150a8c90248264a8b26970b4473770bcc3df8515fJosh Gao    with test_support.check_py3k_warnings():
3160a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        test_support.run_unittest(
3170a8c90248264a8b26970b4473770bcc3df8515fJosh Gao            ClassicSeqDeprecatedTestCase,
3180a8c90248264a8b26970b4473770bcc3df8515fJosh Gao            NewSeqDeprecatedTestCase,
3190a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        )
3200a8c90248264a8b26970b4473770bcc3df8515fJosh Gao
3210a8c90248264a8b26970b4473770bcc3df8515fJosh Gao
3220a8c90248264a8b26970b4473770bcc3df8515fJosh Gaoif __name__ == "__main__":
3230a8c90248264a8b26970b4473770bcc3df8515fJosh Gao    test_main()
324