14adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao""" 24adfde8bc82dd39f59e0445588c3e599ada477dJosh GaoTests common to tuple, list and UserList.UserList 34adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao""" 44adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 54adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoimport unittest 64adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoimport sys 74adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 84adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# Various iterables 94adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# This is used for checking the constructor (here and in test_deque.py) 104adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaodef iterfunc(seqn): 114adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 'Regular generator' 124adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao for i in seqn: 134adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao yield i 144adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 154adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass Sequence: 164adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 'Sequence using __getitem__' 174adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def __init__(self, seqn): 184adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.seqn = seqn 194adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def __getitem__(self, i): 204adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return self.seqn[i] 214adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 224adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass IterFunc: 234adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 'Sequence using iterator protocol' 244adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def __init__(self, seqn): 254adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.seqn = seqn 264adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.i = 0 274adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def __iter__(self): 284adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return self 294adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def next(self): 304adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao if self.i >= len(self.seqn): raise StopIteration 314adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao v = self.seqn[self.i] 324adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.i += 1 334adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return v 344adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 354adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass IterGen: 364adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 'Sequence using iterator protocol defined with a generator' 374adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def __init__(self, seqn): 384adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.seqn = seqn 394adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.i = 0 404adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def __iter__(self): 414adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao for val in self.seqn: 424adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao yield val 434adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 444adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass IterNextOnly: 454adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 'Missing __getitem__ and __iter__' 464adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def __init__(self, seqn): 474adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.seqn = seqn 484adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.i = 0 494adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def next(self): 504adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao if self.i >= len(self.seqn): raise StopIteration 514adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao v = self.seqn[self.i] 524adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.i += 1 534adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return v 544adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 554adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass IterNoNext: 564adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 'Iterator missing next()' 574adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def __init__(self, seqn): 584adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.seqn = seqn 594adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.i = 0 604adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def __iter__(self): 614adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return self 624adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 634adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass IterGenExc: 644adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 'Test propagation of exceptions' 654adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def __init__(self, seqn): 664adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.seqn = seqn 674adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.i = 0 684adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def __iter__(self): 694adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return self 704adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def next(self): 714adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 3 // 0 724adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 734adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass IterFuncStop: 744adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 'Test immediate stop' 754adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def __init__(self, seqn): 764adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao pass 774adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def __iter__(self): 784adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return self 794adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def next(self): 804adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao raise StopIteration 814adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 824adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaofrom itertools import chain, imap 834adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaodef itermulti(seqn): 844adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 'Test multiple tiers of iterators' 854adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return chain(imap(lambda x:x, iterfunc(IterGen(Sequence(seqn))))) 864adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 874adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass CommonTest(unittest.TestCase): 884adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # The type to be tested 894adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao type2test = None 904adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 914adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_constructors(self): 924adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao l0 = [] 934adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao l1 = [0] 944adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao l2 = [0, 1] 954adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 964adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao u = self.type2test() 974adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao u0 = self.type2test(l0) 984adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao u1 = self.type2test(l1) 994adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao u2 = self.type2test(l2) 1004adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 1014adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao uu = self.type2test(u) 1024adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao uu0 = self.type2test(u0) 1034adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao uu1 = self.type2test(u1) 1044adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao uu2 = self.type2test(u2) 1054adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 1064adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao v = self.type2test(tuple(u)) 1074adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao class OtherSeq: 1084adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def __init__(self, initseq): 1094adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.__data = initseq 1104adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def __len__(self): 1114adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return len(self.__data) 1124adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def __getitem__(self, i): 1134adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return self.__data[i] 1144adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao s = OtherSeq(u0) 1154adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao v0 = self.type2test(s) 1164adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(len(v0), len(s)) 1174adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 1184adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao s = "this is also a sequence" 1194adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao vv = self.type2test(s) 1204adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(len(vv), len(s)) 1214adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 1224adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # Create from various iteratables 1234adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao for s in ("123", "", range(1000), ('do', 1.2), xrange(2000,2200,5)): 1244adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao for g in (Sequence, IterFunc, IterGen, 1254adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao itermulti, iterfunc): 1264adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(self.type2test(g(s)), self.type2test(s)) 1274adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(self.type2test(IterFuncStop(s)), self.type2test()) 1284adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(self.type2test(c for c in "123"), self.type2test("123")) 1294adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(TypeError, self.type2test, IterNextOnly(s)) 1304adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(TypeError, self.type2test, IterNoNext(s)) 1314adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(ZeroDivisionError, self.type2test, IterGenExc(s)) 1324adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 1334adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_truth(self): 1344adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertFalse(self.type2test()) 1354adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertTrue(self.type2test([42])) 1364adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 1374adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_getitem(self): 1384adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao u = self.type2test([0, 1, 2, 3, 4]) 1394adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao for i in xrange(len(u)): 1404adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(u[i], i) 1414adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(u[long(i)], i) 1424adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao for i in xrange(-len(u), -1): 1434adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(u[i], len(u)+i) 1444adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(u[long(i)], len(u)+i) 1454adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(IndexError, u.__getitem__, -len(u)-1) 1464adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(IndexError, u.__getitem__, len(u)) 1474adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(ValueError, u.__getitem__, slice(0,10,0)) 1484adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 1494adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao u = self.type2test() 1504adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(IndexError, u.__getitem__, 0) 1514adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(IndexError, u.__getitem__, -1) 1524adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 1534adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(TypeError, u.__getitem__) 1544adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 1554adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a = self.type2test([10, 11]) 1564adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(a[0], 10) 1574adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(a[1], 11) 1584adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(a[-2], 10) 1594adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(a[-1], 11) 1604adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(IndexError, a.__getitem__, -3) 1614adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(IndexError, a.__getitem__, 3) 1624adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 1634adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_getslice(self): 1644adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao l = [0, 1, 2, 3, 4] 1654adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao u = self.type2test(l) 1664adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 1674adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(u[0:0], self.type2test()) 1684adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(u[1:2], self.type2test([1])) 1694adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(u[-2:-1], self.type2test([3])) 1704adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(u[-1000:1000], u) 1714adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(u[1000:-1000], self.type2test([])) 1724adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(u[:], u) 1734adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(u[1:None], self.type2test([1, 2, 3, 4])) 1744adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(u[None:3], self.type2test([0, 1, 2])) 1754adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 1764adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # Extended slices 1774adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(u[::], u) 1784adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(u[::2], self.type2test([0, 2, 4])) 1794adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(u[1::2], self.type2test([1, 3])) 1804adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(u[::-1], self.type2test([4, 3, 2, 1, 0])) 1814adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(u[::-2], self.type2test([4, 2, 0])) 1824adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(u[3::-2], self.type2test([3, 1])) 1834adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(u[3:3:-2], self.type2test([])) 1844adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(u[3:2:-2], self.type2test([3])) 1854adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(u[3:1:-2], self.type2test([3])) 1864adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(u[3:0:-2], self.type2test([3, 1])) 1874adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(u[::-100], self.type2test([4])) 1884adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(u[100:-100:], self.type2test([])) 1894adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(u[-100:100:], u) 1904adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(u[100:-100:-1], u[::-1]) 1914adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(u[-100:100:-1], self.type2test([])) 1924adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(u[-100L:100L:2L], self.type2test([0, 2, 4])) 1934adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 1944adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # Test extreme cases with long ints 1954adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a = self.type2test([0,1,2,3,4]) 1964adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(a[ -pow(2,128L): 3 ], self.type2test([0,1,2])) 1974adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(a[ 3: pow(2,145L) ], self.type2test([3,4])) 1984adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 1994adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(TypeError, u.__getslice__) 2004adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 2014adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_contains(self): 2024adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao u = self.type2test([0, 1, 2]) 2034adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao for i in u: 2044adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertIn(i, u) 2054adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao for i in min(u)-1, max(u)+1: 2064adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertNotIn(i, u) 2074adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 2084adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(TypeError, u.__contains__) 2094adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 2104adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_contains_fake(self): 2114adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao class AllEq: 2124adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # Sequences must use rich comparison against each item 2134adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # (unless "is" is true, or an earlier item answered) 2144adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # So instances of AllEq must be found in all non-empty sequences. 2154adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def __eq__(self, other): 2164adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return True 2174adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao __hash__ = None # Can't meet hash invariant requirements 2184adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertNotIn(AllEq(), self.type2test([])) 2194adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertIn(AllEq(), self.type2test([1])) 2204adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 2214adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_contains_order(self): 2224adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # Sequences must test in-order. If a rich comparison has side 2234adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # effects, these will be visible to tests against later members. 2244adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # In this test, the "side effect" is a short-circuiting raise. 2254adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao class DoNotTestEq(Exception): 2264adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao pass 2274adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao class StopCompares: 2284adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def __eq__(self, other): 2294adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao raise DoNotTestEq 2304adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 2314adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao checkfirst = self.type2test([1, StopCompares()]) 2324adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertIn(1, checkfirst) 2334adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao checklast = self.type2test([StopCompares(), 1]) 2344adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(DoNotTestEq, checklast.__contains__, 1) 2354adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 2364adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_len(self): 2374adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(len(self.type2test()), 0) 2384adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(len(self.type2test([])), 0) 2394adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(len(self.type2test([0])), 1) 2404adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(len(self.type2test([0, 1, 2])), 3) 2414adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 2424adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_minmax(self): 2434adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao u = self.type2test([0, 1, 2]) 2444adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(min(u), 0) 2454adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(max(u), 2) 2464adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 2474adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_addmul(self): 2484adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao u1 = self.type2test([0]) 2494adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao u2 = self.type2test([0, 1]) 2504adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(u1, u1 + self.type2test()) 2514adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(u1, self.type2test() + u1) 2524adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(u1 + self.type2test([1]), u2) 2534adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(self.type2test([-1]) + u1, self.type2test([-1, 0])) 2544adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(self.type2test(), u2*0) 2554adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(self.type2test(), 0*u2) 2564adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(self.type2test(), u2*0L) 2574adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(self.type2test(), 0L*u2) 2584adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(u2, u2*1) 2594adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(u2, 1*u2) 2604adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(u2, u2*1L) 2614adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(u2, 1L*u2) 2624adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(u2+u2, u2*2) 2634adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(u2+u2, 2*u2) 2644adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(u2+u2, u2*2L) 2654adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(u2+u2, 2L*u2) 2664adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(u2+u2+u2, u2*3) 2674adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(u2+u2+u2, 3*u2) 2684adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 2694adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao class subclass(self.type2test): 2704adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao pass 2714adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao u3 = subclass([0, 1]) 2724adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(u3, u3*1) 2734adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertIsNot(u3, u3*1) 2744adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 2754adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_iadd(self): 2764adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao u = self.type2test([0, 1]) 2774adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao u += self.type2test() 2784adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(u, self.type2test([0, 1])) 2794adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao u += self.type2test([2, 3]) 2804adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(u, self.type2test([0, 1, 2, 3])) 2814adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao u += self.type2test([4, 5]) 2824adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(u, self.type2test([0, 1, 2, 3, 4, 5])) 2834adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 2844adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao u = self.type2test("spam") 2854adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao u += self.type2test("eggs") 2864adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(u, self.type2test("spameggs")) 2874adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 2884adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_imul(self): 2894adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao u = self.type2test([0, 1]) 2904adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao u *= 3 2914adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(u, self.type2test([0, 1, 0, 1, 0, 1])) 2924adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 2934adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_getitemoverwriteiter(self): 2944adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # Verify that __getitem__ overrides are not recognized by __iter__ 2954adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao class T(self.type2test): 2964adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def __getitem__(self, key): 2974adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return str(key) + '!!!' 2984adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(iter(T((1,2))).next(), 1) 2994adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 3004adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_repeat(self): 3014adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao for m in xrange(4): 3024adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao s = tuple(range(m)) 3034adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao for n in xrange(-3, 5): 3044adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(self.type2test(s*n), self.type2test(s)*n) 3054adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(self.type2test(s)*(-4), self.type2test([])) 3064adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(id(s), id(s*1)) 3074adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 3084adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_bigrepeat(self): 3094adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao import sys 3104adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao if sys.maxint <= 2147483647: 3114adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao x = self.type2test([0]) 3124adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao x *= 2**16 3134adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(MemoryError, x.__mul__, 2**16) 3144adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao if hasattr(x, '__imul__'): 3154adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(MemoryError, x.__imul__, 2**16) 3164adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 3174adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_subscript(self): 3184adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a = self.type2test([10, 11]) 3194adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(a.__getitem__(0L), 10) 3204adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(a.__getitem__(1L), 11) 3214adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(a.__getitem__(-2L), 10) 3224adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(a.__getitem__(-1L), 11) 3234adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(IndexError, a.__getitem__, -3) 3244adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(IndexError, a.__getitem__, 3) 3254adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(a.__getitem__(slice(0,1)), self.type2test([10])) 3264adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(a.__getitem__(slice(1,2)), self.type2test([11])) 3274adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(a.__getitem__(slice(0,2)), self.type2test([10, 11])) 3284adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(a.__getitem__(slice(0,3)), self.type2test([10, 11])) 3294adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(a.__getitem__(slice(3,5)), self.type2test([])) 3304adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(ValueError, a.__getitem__, slice(0, 10, 0)) 3314adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(TypeError, a.__getitem__, 'x') 3324adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 3334adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_count(self): 3344adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a = self.type2test([0, 1, 2])*3 3354adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(a.count(0), 3) 3364adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(a.count(1), 3) 3374adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(a.count(3), 0) 3384adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 3394adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(TypeError, a.count) 3404adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 3414adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao class BadExc(Exception): 3424adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao pass 3434adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 3444adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao class BadCmp: 3454adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def __eq__(self, other): 3464adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao if other == 2: 3474adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao raise BadExc() 3484adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return False 3494adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 3504adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(BadExc, a.count, BadCmp()) 3514adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 3524adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_index(self): 3534adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao u = self.type2test([0, 1]) 3544adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(u.index(0), 0) 3554adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(u.index(1), 1) 3564adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(ValueError, u.index, 2) 3574adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 3584adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao u = self.type2test([-2, -1, 0, 0, 1, 2]) 3594adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(u.count(0), 2) 3604adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(u.index(0), 2) 3614adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(u.index(0, 2), 2) 3624adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(u.index(-2, -10), 0) 3634adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(u.index(0, 3), 3) 3644adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(u.index(0, 3, 4), 3) 3654adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(ValueError, u.index, 2, 0, -10) 3664adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 3674adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(TypeError, u.index) 3684adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 3694adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao class BadExc(Exception): 3704adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao pass 3714adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 3724adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao class BadCmp: 3734adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def __eq__(self, other): 3744adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao if other == 2: 3754adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao raise BadExc() 3764adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return False 3774adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 3784adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a = self.type2test([0, 1, 2, 3]) 3794adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(BadExc, a.index, BadCmp()) 3804adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 3814adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a = self.type2test([-2, -1, 0, 0, 1, 2]) 3824adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(a.index(0), 2) 3834adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(a.index(0, 2), 2) 3844adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(a.index(0, -4), 2) 3854adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(a.index(-2, -10), 0) 3864adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(a.index(0, 3), 3) 3874adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(a.index(0, -3), 3) 3884adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(a.index(0, 3, 4), 3) 3894adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(a.index(0, -3, -2), 3) 3904adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(a.index(0, -4*sys.maxint, 4*sys.maxint), 2) 3914adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(ValueError, a.index, 0, 4*sys.maxint,-4*sys.maxint) 3924adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(ValueError, a.index, 2, 0, -10) 393