10a8c90248264a8b26970b4473770bcc3df8515fJosh Gao""" 20a8c90248264a8b26970b4473770bcc3df8515fJosh GaoTests common to tuple, list and UserList.UserList 30a8c90248264a8b26970b4473770bcc3df8515fJosh Gao""" 40a8c90248264a8b26970b4473770bcc3df8515fJosh Gao 50a8c90248264a8b26970b4473770bcc3df8515fJosh Gaoimport unittest 60a8c90248264a8b26970b4473770bcc3df8515fJosh Gaoimport sys 70a8c90248264a8b26970b4473770bcc3df8515fJosh Gao 80a8c90248264a8b26970b4473770bcc3df8515fJosh Gao# Various iterables 90a8c90248264a8b26970b4473770bcc3df8515fJosh Gao# This is used for checking the constructor (here and in test_deque.py) 100a8c90248264a8b26970b4473770bcc3df8515fJosh Gaodef iterfunc(seqn): 110a8c90248264a8b26970b4473770bcc3df8515fJosh Gao 'Regular generator' 120a8c90248264a8b26970b4473770bcc3df8515fJosh Gao for i in seqn: 130a8c90248264a8b26970b4473770bcc3df8515fJosh Gao yield i 140a8c90248264a8b26970b4473770bcc3df8515fJosh Gao 150a8c90248264a8b26970b4473770bcc3df8515fJosh Gaoclass Sequence: 160a8c90248264a8b26970b4473770bcc3df8515fJosh Gao 'Sequence using __getitem__' 170a8c90248264a8b26970b4473770bcc3df8515fJosh Gao def __init__(self, seqn): 180a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.seqn = seqn 190a8c90248264a8b26970b4473770bcc3df8515fJosh Gao def __getitem__(self, i): 200a8c90248264a8b26970b4473770bcc3df8515fJosh Gao return self.seqn[i] 210a8c90248264a8b26970b4473770bcc3df8515fJosh Gao 220a8c90248264a8b26970b4473770bcc3df8515fJosh Gaoclass IterFunc: 230a8c90248264a8b26970b4473770bcc3df8515fJosh Gao 'Sequence using iterator protocol' 240a8c90248264a8b26970b4473770bcc3df8515fJosh Gao def __init__(self, seqn): 250a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.seqn = seqn 260a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.i = 0 270a8c90248264a8b26970b4473770bcc3df8515fJosh Gao def __iter__(self): 280a8c90248264a8b26970b4473770bcc3df8515fJosh Gao return self 290a8c90248264a8b26970b4473770bcc3df8515fJosh Gao def next(self): 300a8c90248264a8b26970b4473770bcc3df8515fJosh Gao if self.i >= len(self.seqn): raise StopIteration 310a8c90248264a8b26970b4473770bcc3df8515fJosh Gao v = self.seqn[self.i] 320a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.i += 1 330a8c90248264a8b26970b4473770bcc3df8515fJosh Gao return v 340a8c90248264a8b26970b4473770bcc3df8515fJosh Gao 350a8c90248264a8b26970b4473770bcc3df8515fJosh Gaoclass IterGen: 360a8c90248264a8b26970b4473770bcc3df8515fJosh Gao 'Sequence using iterator protocol defined with a generator' 370a8c90248264a8b26970b4473770bcc3df8515fJosh Gao def __init__(self, seqn): 380a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.seqn = seqn 390a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.i = 0 400a8c90248264a8b26970b4473770bcc3df8515fJosh Gao def __iter__(self): 410a8c90248264a8b26970b4473770bcc3df8515fJosh Gao for val in self.seqn: 420a8c90248264a8b26970b4473770bcc3df8515fJosh Gao yield val 430a8c90248264a8b26970b4473770bcc3df8515fJosh Gao 440a8c90248264a8b26970b4473770bcc3df8515fJosh Gaoclass IterNextOnly: 450a8c90248264a8b26970b4473770bcc3df8515fJosh Gao 'Missing __getitem__ and __iter__' 460a8c90248264a8b26970b4473770bcc3df8515fJosh Gao def __init__(self, seqn): 470a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.seqn = seqn 480a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.i = 0 490a8c90248264a8b26970b4473770bcc3df8515fJosh Gao def next(self): 500a8c90248264a8b26970b4473770bcc3df8515fJosh Gao if self.i >= len(self.seqn): raise StopIteration 510a8c90248264a8b26970b4473770bcc3df8515fJosh Gao v = self.seqn[self.i] 520a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.i += 1 530a8c90248264a8b26970b4473770bcc3df8515fJosh Gao return v 540a8c90248264a8b26970b4473770bcc3df8515fJosh Gao 550a8c90248264a8b26970b4473770bcc3df8515fJosh Gaoclass IterNoNext: 560a8c90248264a8b26970b4473770bcc3df8515fJosh Gao 'Iterator missing next()' 570a8c90248264a8b26970b4473770bcc3df8515fJosh Gao def __init__(self, seqn): 580a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.seqn = seqn 590a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.i = 0 600a8c90248264a8b26970b4473770bcc3df8515fJosh Gao def __iter__(self): 610a8c90248264a8b26970b4473770bcc3df8515fJosh Gao return self 620a8c90248264a8b26970b4473770bcc3df8515fJosh Gao 630a8c90248264a8b26970b4473770bcc3df8515fJosh Gaoclass IterGenExc: 640a8c90248264a8b26970b4473770bcc3df8515fJosh Gao 'Test propagation of exceptions' 650a8c90248264a8b26970b4473770bcc3df8515fJosh Gao def __init__(self, seqn): 660a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.seqn = seqn 670a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.i = 0 680a8c90248264a8b26970b4473770bcc3df8515fJosh Gao def __iter__(self): 690a8c90248264a8b26970b4473770bcc3df8515fJosh Gao return self 700a8c90248264a8b26970b4473770bcc3df8515fJosh Gao def next(self): 710a8c90248264a8b26970b4473770bcc3df8515fJosh Gao 3 // 0 720a8c90248264a8b26970b4473770bcc3df8515fJosh Gao 730a8c90248264a8b26970b4473770bcc3df8515fJosh Gaoclass IterFuncStop: 740a8c90248264a8b26970b4473770bcc3df8515fJosh Gao 'Test immediate stop' 750a8c90248264a8b26970b4473770bcc3df8515fJosh Gao def __init__(self, seqn): 760a8c90248264a8b26970b4473770bcc3df8515fJosh Gao pass 770a8c90248264a8b26970b4473770bcc3df8515fJosh Gao def __iter__(self): 780a8c90248264a8b26970b4473770bcc3df8515fJosh Gao return self 790a8c90248264a8b26970b4473770bcc3df8515fJosh Gao def next(self): 800a8c90248264a8b26970b4473770bcc3df8515fJosh Gao raise StopIteration 810a8c90248264a8b26970b4473770bcc3df8515fJosh Gao 820a8c90248264a8b26970b4473770bcc3df8515fJosh Gaofrom itertools import chain, imap 830a8c90248264a8b26970b4473770bcc3df8515fJosh Gaodef itermulti(seqn): 840a8c90248264a8b26970b4473770bcc3df8515fJosh Gao 'Test multiple tiers of iterators' 850a8c90248264a8b26970b4473770bcc3df8515fJosh Gao return chain(imap(lambda x:x, iterfunc(IterGen(Sequence(seqn))))) 860a8c90248264a8b26970b4473770bcc3df8515fJosh Gao 870a8c90248264a8b26970b4473770bcc3df8515fJosh Gaoclass CommonTest(unittest.TestCase): 880a8c90248264a8b26970b4473770bcc3df8515fJosh Gao # The type to be tested 890a8c90248264a8b26970b4473770bcc3df8515fJosh Gao type2test = None 900a8c90248264a8b26970b4473770bcc3df8515fJosh Gao 910a8c90248264a8b26970b4473770bcc3df8515fJosh Gao def test_constructors(self): 920a8c90248264a8b26970b4473770bcc3df8515fJosh Gao l0 = [] 930a8c90248264a8b26970b4473770bcc3df8515fJosh Gao l1 = [0] 940a8c90248264a8b26970b4473770bcc3df8515fJosh Gao l2 = [0, 1] 950a8c90248264a8b26970b4473770bcc3df8515fJosh Gao 960a8c90248264a8b26970b4473770bcc3df8515fJosh Gao u = self.type2test() 970a8c90248264a8b26970b4473770bcc3df8515fJosh Gao u0 = self.type2test(l0) 980a8c90248264a8b26970b4473770bcc3df8515fJosh Gao u1 = self.type2test(l1) 990a8c90248264a8b26970b4473770bcc3df8515fJosh Gao u2 = self.type2test(l2) 1000a8c90248264a8b26970b4473770bcc3df8515fJosh Gao 1010a8c90248264a8b26970b4473770bcc3df8515fJosh Gao uu = self.type2test(u) 1020a8c90248264a8b26970b4473770bcc3df8515fJosh Gao uu0 = self.type2test(u0) 1030a8c90248264a8b26970b4473770bcc3df8515fJosh Gao uu1 = self.type2test(u1) 1040a8c90248264a8b26970b4473770bcc3df8515fJosh Gao uu2 = self.type2test(u2) 1050a8c90248264a8b26970b4473770bcc3df8515fJosh Gao 1060a8c90248264a8b26970b4473770bcc3df8515fJosh Gao v = self.type2test(tuple(u)) 1070a8c90248264a8b26970b4473770bcc3df8515fJosh Gao class OtherSeq: 1080a8c90248264a8b26970b4473770bcc3df8515fJosh Gao def __init__(self, initseq): 1090a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.__data = initseq 1100a8c90248264a8b26970b4473770bcc3df8515fJosh Gao def __len__(self): 1110a8c90248264a8b26970b4473770bcc3df8515fJosh Gao return len(self.__data) 1120a8c90248264a8b26970b4473770bcc3df8515fJosh Gao def __getitem__(self, i): 1130a8c90248264a8b26970b4473770bcc3df8515fJosh Gao return self.__data[i] 1140a8c90248264a8b26970b4473770bcc3df8515fJosh Gao s = OtherSeq(u0) 1150a8c90248264a8b26970b4473770bcc3df8515fJosh Gao v0 = self.type2test(s) 1160a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.assertEqual(len(v0), len(s)) 1170a8c90248264a8b26970b4473770bcc3df8515fJosh Gao 1180a8c90248264a8b26970b4473770bcc3df8515fJosh Gao s = "this is also a sequence" 1190a8c90248264a8b26970b4473770bcc3df8515fJosh Gao vv = self.type2test(s) 1200a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.assertEqual(len(vv), len(s)) 1210a8c90248264a8b26970b4473770bcc3df8515fJosh Gao 1220a8c90248264a8b26970b4473770bcc3df8515fJosh Gao # Create from various iteratables 1230a8c90248264a8b26970b4473770bcc3df8515fJosh Gao for s in ("123", "", range(1000), ('do', 1.2), xrange(2000,2200,5)): 1240a8c90248264a8b26970b4473770bcc3df8515fJosh Gao for g in (Sequence, IterFunc, IterGen, 1250a8c90248264a8b26970b4473770bcc3df8515fJosh Gao itermulti, iterfunc): 1260a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.assertEqual(self.type2test(g(s)), self.type2test(s)) 1270a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.assertEqual(self.type2test(IterFuncStop(s)), self.type2test()) 1280a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.assertEqual(self.type2test(c for c in "123"), self.type2test("123")) 1290a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.assertRaises(TypeError, self.type2test, IterNextOnly(s)) 1300a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.assertRaises(TypeError, self.type2test, IterNoNext(s)) 1310a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.assertRaises(ZeroDivisionError, self.type2test, IterGenExc(s)) 1320a8c90248264a8b26970b4473770bcc3df8515fJosh Gao 1330a8c90248264a8b26970b4473770bcc3df8515fJosh Gao def test_truth(self): 1340a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.assertFalse(self.type2test()) 1350a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.assertTrue(self.type2test([42])) 1360a8c90248264a8b26970b4473770bcc3df8515fJosh Gao 1370a8c90248264a8b26970b4473770bcc3df8515fJosh Gao def test_getitem(self): 1380a8c90248264a8b26970b4473770bcc3df8515fJosh Gao u = self.type2test([0, 1, 2, 3, 4]) 1390a8c90248264a8b26970b4473770bcc3df8515fJosh Gao for i in xrange(len(u)): 1400a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.assertEqual(u[i], i) 1410a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.assertEqual(u[long(i)], i) 1420a8c90248264a8b26970b4473770bcc3df8515fJosh Gao for i in xrange(-len(u), -1): 1430a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.assertEqual(u[i], len(u)+i) 1440a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.assertEqual(u[long(i)], len(u)+i) 1450a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.assertRaises(IndexError, u.__getitem__, -len(u)-1) 1460a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.assertRaises(IndexError, u.__getitem__, len(u)) 1470a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.assertRaises(ValueError, u.__getitem__, slice(0,10,0)) 1480a8c90248264a8b26970b4473770bcc3df8515fJosh Gao 1490a8c90248264a8b26970b4473770bcc3df8515fJosh Gao u = self.type2test() 1500a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.assertRaises(IndexError, u.__getitem__, 0) 1510a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.assertRaises(IndexError, u.__getitem__, -1) 1520a8c90248264a8b26970b4473770bcc3df8515fJosh Gao 1530a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.assertRaises(TypeError, u.__getitem__) 1540a8c90248264a8b26970b4473770bcc3df8515fJosh Gao 1550a8c90248264a8b26970b4473770bcc3df8515fJosh Gao a = self.type2test([10, 11]) 1560a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.assertEqual(a[0], 10) 1570a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.assertEqual(a[1], 11) 1580a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.assertEqual(a[-2], 10) 1590a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.assertEqual(a[-1], 11) 1600a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.assertRaises(IndexError, a.__getitem__, -3) 1610a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.assertRaises(IndexError, a.__getitem__, 3) 1620a8c90248264a8b26970b4473770bcc3df8515fJosh Gao 1630a8c90248264a8b26970b4473770bcc3df8515fJosh Gao def test_getslice(self): 1640a8c90248264a8b26970b4473770bcc3df8515fJosh Gao l = [0, 1, 2, 3, 4] 1650a8c90248264a8b26970b4473770bcc3df8515fJosh Gao u = self.type2test(l) 1660a8c90248264a8b26970b4473770bcc3df8515fJosh Gao 1670a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.assertEqual(u[0:0], self.type2test()) 1680a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.assertEqual(u[1:2], self.type2test([1])) 1690a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.assertEqual(u[-2:-1], self.type2test([3])) 1700a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.assertEqual(u[-1000:1000], u) 1710a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.assertEqual(u[1000:-1000], self.type2test([])) 1720a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.assertEqual(u[:], u) 1730a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.assertEqual(u[1:None], self.type2test([1, 2, 3, 4])) 1740a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.assertEqual(u[None:3], self.type2test([0, 1, 2])) 1750a8c90248264a8b26970b4473770bcc3df8515fJosh Gao 1760a8c90248264a8b26970b4473770bcc3df8515fJosh Gao # Extended slices 1770a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.assertEqual(u[::], u) 1780a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.assertEqual(u[::2], self.type2test([0, 2, 4])) 1790a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.assertEqual(u[1::2], self.type2test([1, 3])) 1800a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.assertEqual(u[::-1], self.type2test([4, 3, 2, 1, 0])) 1810a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.assertEqual(u[::-2], self.type2test([4, 2, 0])) 1820a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.assertEqual(u[3::-2], self.type2test([3, 1])) 1830a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.assertEqual(u[3:3:-2], self.type2test([])) 1840a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.assertEqual(u[3:2:-2], self.type2test([3])) 1850a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.assertEqual(u[3:1:-2], self.type2test([3])) 1860a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.assertEqual(u[3:0:-2], self.type2test([3, 1])) 1870a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.assertEqual(u[::-100], self.type2test([4])) 1880a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.assertEqual(u[100:-100:], self.type2test([])) 1890a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.assertEqual(u[-100:100:], u) 1900a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.assertEqual(u[100:-100:-1], u[::-1]) 1910a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.assertEqual(u[-100:100:-1], self.type2test([])) 1920a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.assertEqual(u[-100L:100L:2L], self.type2test([0, 2, 4])) 1930a8c90248264a8b26970b4473770bcc3df8515fJosh Gao 1940a8c90248264a8b26970b4473770bcc3df8515fJosh Gao # Test extreme cases with long ints 1950a8c90248264a8b26970b4473770bcc3df8515fJosh Gao a = self.type2test([0,1,2,3,4]) 1960a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.assertEqual(a[ -pow(2,128L): 3 ], self.type2test([0,1,2])) 1970a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.assertEqual(a[ 3: pow(2,145L) ], self.type2test([3,4])) 1980a8c90248264a8b26970b4473770bcc3df8515fJosh Gao 1990a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.assertRaises(TypeError, u.__getslice__) 2000a8c90248264a8b26970b4473770bcc3df8515fJosh Gao 2010a8c90248264a8b26970b4473770bcc3df8515fJosh Gao def test_contains(self): 2020a8c90248264a8b26970b4473770bcc3df8515fJosh Gao u = self.type2test([0, 1, 2]) 2030a8c90248264a8b26970b4473770bcc3df8515fJosh Gao for i in u: 2040a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.assertIn(i, u) 2050a8c90248264a8b26970b4473770bcc3df8515fJosh Gao for i in min(u)-1, max(u)+1: 2060a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.assertNotIn(i, u) 2070a8c90248264a8b26970b4473770bcc3df8515fJosh Gao 2080a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.assertRaises(TypeError, u.__contains__) 2090a8c90248264a8b26970b4473770bcc3df8515fJosh Gao 2100a8c90248264a8b26970b4473770bcc3df8515fJosh Gao def test_contains_fake(self): 2110a8c90248264a8b26970b4473770bcc3df8515fJosh Gao class AllEq: 2120a8c90248264a8b26970b4473770bcc3df8515fJosh Gao # Sequences must use rich comparison against each item 2130a8c90248264a8b26970b4473770bcc3df8515fJosh Gao # (unless "is" is true, or an earlier item answered) 2140a8c90248264a8b26970b4473770bcc3df8515fJosh Gao # So instances of AllEq must be found in all non-empty sequences. 2150a8c90248264a8b26970b4473770bcc3df8515fJosh Gao def __eq__(self, other): 2160a8c90248264a8b26970b4473770bcc3df8515fJosh Gao return True 2170a8c90248264a8b26970b4473770bcc3df8515fJosh Gao __hash__ = None # Can't meet hash invariant requirements 2180a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.assertNotIn(AllEq(), self.type2test([])) 2190a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.assertIn(AllEq(), self.type2test([1])) 2200a8c90248264a8b26970b4473770bcc3df8515fJosh Gao 2210a8c90248264a8b26970b4473770bcc3df8515fJosh Gao def test_contains_order(self): 2220a8c90248264a8b26970b4473770bcc3df8515fJosh Gao # Sequences must test in-order. If a rich comparison has side 2230a8c90248264a8b26970b4473770bcc3df8515fJosh Gao # effects, these will be visible to tests against later members. 2240a8c90248264a8b26970b4473770bcc3df8515fJosh Gao # In this test, the "side effect" is a short-circuiting raise. 2250a8c90248264a8b26970b4473770bcc3df8515fJosh Gao class DoNotTestEq(Exception): 2260a8c90248264a8b26970b4473770bcc3df8515fJosh Gao pass 2270a8c90248264a8b26970b4473770bcc3df8515fJosh Gao class StopCompares: 2280a8c90248264a8b26970b4473770bcc3df8515fJosh Gao def __eq__(self, other): 2290a8c90248264a8b26970b4473770bcc3df8515fJosh Gao raise DoNotTestEq 2300a8c90248264a8b26970b4473770bcc3df8515fJosh Gao 2310a8c90248264a8b26970b4473770bcc3df8515fJosh Gao checkfirst = self.type2test([1, StopCompares()]) 2320a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.assertIn(1, checkfirst) 2330a8c90248264a8b26970b4473770bcc3df8515fJosh Gao checklast = self.type2test([StopCompares(), 1]) 2340a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.assertRaises(DoNotTestEq, checklast.__contains__, 1) 2350a8c90248264a8b26970b4473770bcc3df8515fJosh Gao 2360a8c90248264a8b26970b4473770bcc3df8515fJosh Gao def test_len(self): 2370a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.assertEqual(len(self.type2test()), 0) 2380a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.assertEqual(len(self.type2test([])), 0) 2390a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.assertEqual(len(self.type2test([0])), 1) 2400a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.assertEqual(len(self.type2test([0, 1, 2])), 3) 2410a8c90248264a8b26970b4473770bcc3df8515fJosh Gao 2420a8c90248264a8b26970b4473770bcc3df8515fJosh Gao def test_minmax(self): 2430a8c90248264a8b26970b4473770bcc3df8515fJosh Gao u = self.type2test([0, 1, 2]) 2440a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.assertEqual(min(u), 0) 2450a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.assertEqual(max(u), 2) 2460a8c90248264a8b26970b4473770bcc3df8515fJosh Gao 2470a8c90248264a8b26970b4473770bcc3df8515fJosh Gao def test_addmul(self): 2480a8c90248264a8b26970b4473770bcc3df8515fJosh Gao u1 = self.type2test([0]) 2490a8c90248264a8b26970b4473770bcc3df8515fJosh Gao u2 = self.type2test([0, 1]) 2500a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.assertEqual(u1, u1 + self.type2test()) 2510a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.assertEqual(u1, self.type2test() + u1) 2520a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.assertEqual(u1 + self.type2test([1]), u2) 2530a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.assertEqual(self.type2test([-1]) + u1, self.type2test([-1, 0])) 2540a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.assertEqual(self.type2test(), u2*0) 2550a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.assertEqual(self.type2test(), 0*u2) 2560a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.assertEqual(self.type2test(), u2*0L) 2570a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.assertEqual(self.type2test(), 0L*u2) 2580a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.assertEqual(u2, u2*1) 2590a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.assertEqual(u2, 1*u2) 2600a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.assertEqual(u2, u2*1L) 2610a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.assertEqual(u2, 1L*u2) 2620a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.assertEqual(u2+u2, u2*2) 2630a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.assertEqual(u2+u2, 2*u2) 2640a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.assertEqual(u2+u2, u2*2L) 2650a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.assertEqual(u2+u2, 2L*u2) 2660a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.assertEqual(u2+u2+u2, u2*3) 2670a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.assertEqual(u2+u2+u2, 3*u2) 2680a8c90248264a8b26970b4473770bcc3df8515fJosh Gao 2690a8c90248264a8b26970b4473770bcc3df8515fJosh Gao class subclass(self.type2test): 2700a8c90248264a8b26970b4473770bcc3df8515fJosh Gao pass 2710a8c90248264a8b26970b4473770bcc3df8515fJosh Gao u3 = subclass([0, 1]) 2720a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.assertEqual(u3, u3*1) 2730a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.assertIsNot(u3, u3*1) 2740a8c90248264a8b26970b4473770bcc3df8515fJosh Gao 2750a8c90248264a8b26970b4473770bcc3df8515fJosh Gao def test_iadd(self): 2760a8c90248264a8b26970b4473770bcc3df8515fJosh Gao u = self.type2test([0, 1]) 2770a8c90248264a8b26970b4473770bcc3df8515fJosh Gao u += self.type2test() 2780a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.assertEqual(u, self.type2test([0, 1])) 2790a8c90248264a8b26970b4473770bcc3df8515fJosh Gao u += self.type2test([2, 3]) 2800a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.assertEqual(u, self.type2test([0, 1, 2, 3])) 2810a8c90248264a8b26970b4473770bcc3df8515fJosh Gao u += self.type2test([4, 5]) 2820a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.assertEqual(u, self.type2test([0, 1, 2, 3, 4, 5])) 2830a8c90248264a8b26970b4473770bcc3df8515fJosh Gao 2840a8c90248264a8b26970b4473770bcc3df8515fJosh Gao u = self.type2test("spam") 2850a8c90248264a8b26970b4473770bcc3df8515fJosh Gao u += self.type2test("eggs") 2860a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.assertEqual(u, self.type2test("spameggs")) 2870a8c90248264a8b26970b4473770bcc3df8515fJosh Gao 2880a8c90248264a8b26970b4473770bcc3df8515fJosh Gao def test_imul(self): 2890a8c90248264a8b26970b4473770bcc3df8515fJosh Gao u = self.type2test([0, 1]) 2900a8c90248264a8b26970b4473770bcc3df8515fJosh Gao u *= 3 2910a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.assertEqual(u, self.type2test([0, 1, 0, 1, 0, 1])) 2920a8c90248264a8b26970b4473770bcc3df8515fJosh Gao 2930a8c90248264a8b26970b4473770bcc3df8515fJosh Gao def test_getitemoverwriteiter(self): 2940a8c90248264a8b26970b4473770bcc3df8515fJosh Gao # Verify that __getitem__ overrides are not recognized by __iter__ 2950a8c90248264a8b26970b4473770bcc3df8515fJosh Gao class T(self.type2test): 2960a8c90248264a8b26970b4473770bcc3df8515fJosh Gao def __getitem__(self, key): 2970a8c90248264a8b26970b4473770bcc3df8515fJosh Gao return str(key) + '!!!' 2980a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.assertEqual(iter(T((1,2))).next(), 1) 2990a8c90248264a8b26970b4473770bcc3df8515fJosh Gao 3000a8c90248264a8b26970b4473770bcc3df8515fJosh Gao def test_repeat(self): 3010a8c90248264a8b26970b4473770bcc3df8515fJosh Gao for m in xrange(4): 3020a8c90248264a8b26970b4473770bcc3df8515fJosh Gao s = tuple(range(m)) 3030a8c90248264a8b26970b4473770bcc3df8515fJosh Gao for n in xrange(-3, 5): 3040a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.assertEqual(self.type2test(s*n), self.type2test(s)*n) 3050a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.assertEqual(self.type2test(s)*(-4), self.type2test([])) 3060a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.assertEqual(id(s), id(s*1)) 3070a8c90248264a8b26970b4473770bcc3df8515fJosh Gao 3080a8c90248264a8b26970b4473770bcc3df8515fJosh Gao def test_bigrepeat(self): 3090a8c90248264a8b26970b4473770bcc3df8515fJosh Gao import sys 3100a8c90248264a8b26970b4473770bcc3df8515fJosh Gao if sys.maxint <= 2147483647: 3110a8c90248264a8b26970b4473770bcc3df8515fJosh Gao x = self.type2test([0]) 3120a8c90248264a8b26970b4473770bcc3df8515fJosh Gao x *= 2**16 3130a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.assertRaises(MemoryError, x.__mul__, 2**16) 3140a8c90248264a8b26970b4473770bcc3df8515fJosh Gao if hasattr(x, '__imul__'): 3150a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.assertRaises(MemoryError, x.__imul__, 2**16) 3160a8c90248264a8b26970b4473770bcc3df8515fJosh Gao 3170a8c90248264a8b26970b4473770bcc3df8515fJosh Gao def test_subscript(self): 3180a8c90248264a8b26970b4473770bcc3df8515fJosh Gao a = self.type2test([10, 11]) 3190a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.assertEqual(a.__getitem__(0L), 10) 3200a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.assertEqual(a.__getitem__(1L), 11) 3210a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.assertEqual(a.__getitem__(-2L), 10) 3220a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.assertEqual(a.__getitem__(-1L), 11) 3230a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.assertRaises(IndexError, a.__getitem__, -3) 3240a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.assertRaises(IndexError, a.__getitem__, 3) 3250a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.assertEqual(a.__getitem__(slice(0,1)), self.type2test([10])) 3260a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.assertEqual(a.__getitem__(slice(1,2)), self.type2test([11])) 3270a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.assertEqual(a.__getitem__(slice(0,2)), self.type2test([10, 11])) 3280a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.assertEqual(a.__getitem__(slice(0,3)), self.type2test([10, 11])) 3290a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.assertEqual(a.__getitem__(slice(3,5)), self.type2test([])) 3300a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.assertRaises(ValueError, a.__getitem__, slice(0, 10, 0)) 3310a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.assertRaises(TypeError, a.__getitem__, 'x') 3320a8c90248264a8b26970b4473770bcc3df8515fJosh Gao 3330a8c90248264a8b26970b4473770bcc3df8515fJosh Gao def test_count(self): 3340a8c90248264a8b26970b4473770bcc3df8515fJosh Gao a = self.type2test([0, 1, 2])*3 3350a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.assertEqual(a.count(0), 3) 3360a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.assertEqual(a.count(1), 3) 3370a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.assertEqual(a.count(3), 0) 3380a8c90248264a8b26970b4473770bcc3df8515fJosh Gao 3390a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.assertRaises(TypeError, a.count) 3400a8c90248264a8b26970b4473770bcc3df8515fJosh Gao 3410a8c90248264a8b26970b4473770bcc3df8515fJosh Gao class BadExc(Exception): 3420a8c90248264a8b26970b4473770bcc3df8515fJosh Gao pass 3430a8c90248264a8b26970b4473770bcc3df8515fJosh Gao 3440a8c90248264a8b26970b4473770bcc3df8515fJosh Gao class BadCmp: 3450a8c90248264a8b26970b4473770bcc3df8515fJosh Gao def __eq__(self, other): 3460a8c90248264a8b26970b4473770bcc3df8515fJosh Gao if other == 2: 3470a8c90248264a8b26970b4473770bcc3df8515fJosh Gao raise BadExc() 3480a8c90248264a8b26970b4473770bcc3df8515fJosh Gao return False 3490a8c90248264a8b26970b4473770bcc3df8515fJosh Gao 3500a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.assertRaises(BadExc, a.count, BadCmp()) 3510a8c90248264a8b26970b4473770bcc3df8515fJosh Gao 3520a8c90248264a8b26970b4473770bcc3df8515fJosh Gao def test_index(self): 3530a8c90248264a8b26970b4473770bcc3df8515fJosh Gao u = self.type2test([0, 1]) 3540a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.assertEqual(u.index(0), 0) 3550a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.assertEqual(u.index(1), 1) 3560a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.assertRaises(ValueError, u.index, 2) 3570a8c90248264a8b26970b4473770bcc3df8515fJosh Gao 3580a8c90248264a8b26970b4473770bcc3df8515fJosh Gao u = self.type2test([-2, -1, 0, 0, 1, 2]) 3590a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.assertEqual(u.count(0), 2) 3600a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.assertEqual(u.index(0), 2) 3610a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.assertEqual(u.index(0, 2), 2) 3620a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.assertEqual(u.index(-2, -10), 0) 3630a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.assertEqual(u.index(0, 3), 3) 3640a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.assertEqual(u.index(0, 3, 4), 3) 3650a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.assertRaises(ValueError, u.index, 2, 0, -10) 3660a8c90248264a8b26970b4473770bcc3df8515fJosh Gao 3670a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.assertRaises(TypeError, u.index) 3680a8c90248264a8b26970b4473770bcc3df8515fJosh Gao 3690a8c90248264a8b26970b4473770bcc3df8515fJosh Gao class BadExc(Exception): 3700a8c90248264a8b26970b4473770bcc3df8515fJosh Gao pass 3710a8c90248264a8b26970b4473770bcc3df8515fJosh Gao 3720a8c90248264a8b26970b4473770bcc3df8515fJosh Gao class BadCmp: 3730a8c90248264a8b26970b4473770bcc3df8515fJosh Gao def __eq__(self, other): 3740a8c90248264a8b26970b4473770bcc3df8515fJosh Gao if other == 2: 3750a8c90248264a8b26970b4473770bcc3df8515fJosh Gao raise BadExc() 3760a8c90248264a8b26970b4473770bcc3df8515fJosh Gao return False 3770a8c90248264a8b26970b4473770bcc3df8515fJosh Gao 3780a8c90248264a8b26970b4473770bcc3df8515fJosh Gao a = self.type2test([0, 1, 2, 3]) 3790a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.assertRaises(BadExc, a.index, BadCmp()) 3800a8c90248264a8b26970b4473770bcc3df8515fJosh Gao 3810a8c90248264a8b26970b4473770bcc3df8515fJosh Gao a = self.type2test([-2, -1, 0, 0, 1, 2]) 3820a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.assertEqual(a.index(0), 2) 3830a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.assertEqual(a.index(0, 2), 2) 3840a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.assertEqual(a.index(0, -4), 2) 3850a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.assertEqual(a.index(-2, -10), 0) 3860a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.assertEqual(a.index(0, 3), 3) 3870a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.assertEqual(a.index(0, -3), 3) 3880a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.assertEqual(a.index(0, 3, 4), 3) 3890a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.assertEqual(a.index(0, -3, -2), 3) 3900a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.assertEqual(a.index(0, -4*sys.maxint, 4*sys.maxint), 2) 3910a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.assertRaises(ValueError, a.index, 0, 4*sys.maxint,-4*sys.maxint) 3920a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.assertRaises(ValueError, a.index, 2, 0, -10) 393