Tests common to tuple, list and UserList.UserList
from test
import test_support
class CommonTest(unittest
.TestCase
):
def test_constructors(self
):
v
= self
.type2test(tuple(u
))
def __init__(self
, initseq
):
def __getitem__(self
, i
):
self
.assertEqual(len(v0
), len(s
))
s
= "this is also a sequence"
self
.assertEqual(len(vv
), len(s
))
self
.assert_(not self
.type2test())
self
.assert_(self
.type2test([42]))
u
= self
.type2test([0, 1, 2, 3, 4])
self
.assertEqual(u
[i
], i
)
self
.assertEqual(u
[long(i
)], i
)
for i
in xrange(-len(u
), -1):
self
.assertEqual(u
[i
], len(u
)+i
)
self
.assertEqual(u
[long(i
)], len(u
)+i
)
self
.assertRaises(IndexError, u
.__getitem
__, -len(u
)-1)
self
.assertRaises(IndexError, u
.__getitem
__, len(u
))
self
.assertRaises(ValueError, u
.__getitem
__, slice(0,10,0))
self
.assertRaises(IndexError, u
.__getitem
__, 0)
self
.assertRaises(IndexError, u
.__getitem
__, -1)
self
.assertRaises(TypeError, u
.__getitem
__)
a
= self
.type2test([10, 11])
self
.assertEqual(a
[0], 10)
self
.assertEqual(a
[1], 11)
self
.assertEqual(a
[-2], 10)
self
.assertEqual(a
[-1], 11)
self
.assertRaises(IndexError, a
.__getitem
__, -3)
self
.assertRaises(IndexError, a
.__getitem
__, 3)
self
.assertEqual(u
[0:0], self
.type2test())
self
.assertEqual(u
[1:2], self
.type2test([1]))
self
.assertEqual(u
[-2:-1], self
.type2test([3]))
self
.assertEqual(u
[-1000:1000], u
)
self
.assertEqual(u
[1000:-1000], self
.type2test([]))
self
.assertEqual(u
[:], u
)
self
.assertEqual(u
[1:None], self
.type2test([1, 2, 3, 4]))
self
.assertEqual(u
[None:3], self
.type2test([0, 1, 2]))
self
.assertEqual(u
[::], u
)
self
.assertEqual(u
[::2], self
.type2test([0, 2, 4]))
self
.assertEqual(u
[1::2], self
.type2test([1, 3]))
self
.assertEqual(u
[::-1], self
.type2test([4, 3, 2, 1, 0]))
self
.assertEqual(u
[::-2], self
.type2test([4, 2, 0]))
self
.assertEqual(u
[3::-2], self
.type2test([3, 1]))
self
.assertEqual(u
[3:3:-2], self
.type2test([]))
self
.assertEqual(u
[3:2:-2], self
.type2test([3]))
self
.assertEqual(u
[3:1:-2], self
.type2test([3]))
self
.assertEqual(u
[3:0:-2], self
.type2test([3, 1]))
self
.assertEqual(u
[::-100], self
.type2test([4]))
self
.assertEqual(u
[100:-100:], self
.type2test([]))
self
.assertEqual(u
[-100:100:], u
)
self
.assertEqual(u
[100:-100:-1], u
[::-1])
self
.assertEqual(u
[-100:100:-1], self
.type2test([]))
self
.assertEqual(u
[-100L:100L:2L], self
.type2test([0, 2, 4]))
# Test extreme cases with long ints
a
= self
.type2test([0,1,2,3,4])
self
.assertEqual(a
[ -pow(2,128L): 3 ], self
.type2test([0,1,2]))
self
.assertEqual(a
[ 3: pow(2,145L) ], self
.type2test([3,4]))
self
.assertRaises(TypeError, u
.__getslice
__)
u
= self
.type2test([0, 1, 2])
for i
in min(u
)-1, max(u
)+1:
self
.assertRaises(TypeError, u
.__contains
__)
self
.assertEqual(len(self
.type2test()), 0)
self
.assertEqual(len(self
.type2test([])), 0)
self
.assertEqual(len(self
.type2test([0])), 1)
self
.assertEqual(len(self
.type2test([0, 1, 2])), 3)
u
= self
.type2test([0, 1, 2])
self
.assertEqual(min(u
), 0)
self
.assertEqual(max(u
), 2)
u2
= self
.type2test([0, 1])
self
.assertEqual(u1
, u1
+ self
.type2test())
self
.assertEqual(u1
, self
.type2test() + u1
)
self
.assertEqual(u1
+ self
.type2test([1]), u2
)
self
.assertEqual(self
.type2test([-1]) + u1
, self
.type2test([-1, 0]))
self
.assertEqual(self
.type2test(), u2
*0)
self
.assertEqual(self
.type2test(), 0*u2
)
self
.assertEqual(self
.type2test(), u2
*0L)
self
.assertEqual(self
.type2test(), 0L*u2
)
self
.assertEqual(u2
, u2
*1)
self
.assertEqual(u2
, 1*u2
)
self
.assertEqual(u2
, u2
*1L)
self
.assertEqual(u2
, 1L*u2
)
self
.assertEqual(u2
+u2
, u2
*2)
self
.assertEqual(u2
+u2
, 2*u2
)
self
.assertEqual(u2
+u2
, u2
*2L)
self
.assertEqual(u2
+u2
, 2L*u2
)
self
.assertEqual(u2
+u2
+u2
, u2
*3)
self
.assertEqual(u2
+u2
+u2
, 3*u2
)
class subclass(self
.type2test
):
self
.assertEqual(u3
, u3
*1)
self
.assert_(u3
is not u3
*1)
u
= self
.type2test([0, 1])
self
.assertEqual(u
, self
.type2test([0, 1]))
u
+= self
.type2test([2, 3])
self
.assertEqual(u
, self
.type2test([0, 1, 2, 3]))
u
+= self
.type2test([4, 5])
self
.assertEqual(u
, self
.type2test([0, 1, 2, 3, 4, 5]))
u
= self
.type2test("spam")
u
+= self
.type2test("eggs")
self
.assertEqual(u
, self
.type2test("spameggs"))
u
= self
.type2test([0, 1])
self
.assertEqual(u
, self
.type2test([0, 1, 0, 1, 0, 1]))
def test_getitemoverwriteiter(self
):
# Verify that __getitem__ overrides are not recognized by __iter__
def __getitem__(self
, key
):
self
.assertEqual(iter(T((1,2))).next(), 1)
self
.assertEqual(self
.type2test(s
*n
), self
.type2test(s
)*n
)
self
.assertEqual(self
.type2test(s
)*(-4), self
.type2test([]))
self
.assertEqual(id(s
), id(s
*1))
def test_subscript(self
):
a
= self
.type2test([10, 11])
self
.assertEqual(a
.__getitem
__(0L), 10)
self
.assertEqual(a
.__getitem
__(1L), 11)
self
.assertEqual(a
.__getitem
__(-2L), 10)
self
.assertEqual(a
.__getitem
__(-1L), 11)
self
.assertRaises(IndexError, a
.__getitem
__, -3)
self
.assertRaises(IndexError, a
.__getitem
__, 3)
self
.assertEqual(a
.__getitem
__(slice(0,1)), self
.type2test([10]))
self
.assertEqual(a
.__getitem
__(slice(1,2)), self
.type2test([11]))
self
.assertEqual(a
.__getitem
__(slice(0,2)), self
.type2test([10, 11]))
self
.assertEqual(a
.__getitem
__(slice(0,3)), self
.type2test([10, 11]))
self
.assertEqual(a
.__getitem
__(slice(3,5)), self
.type2test([]))
self
.assertRaises(ValueError, a
.__getitem
__, slice(0, 10, 0))
self
.assertRaises(TypeError, a
.__getitem
__, 'x')