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