[Python-checkins] python/dist/src/Lib/test list_tests.py, NONE,
1.1 seq_tests.py, NONE, 1.1 test_list.py, NONE,
1.1 test_tuple.py, NONE, 1.1 test_types.py, 1.55,
1.56 test_userlist.py, 1.10, 1.11
doerwalter at users.sourceforge.net
doerwalter at users.sourceforge.net
Mon Dec 8 06:38:47 EST 2003
Update of /cvsroot/python/python/dist/src/Lib/test
In directory sc8-pr-cvs1:/tmp/cvs-serv15675/Lib/test
Modified Files:
test_types.py test_userlist.py
Added Files:
list_tests.py seq_tests.py test_list.py test_tuple.py
Log Message:
Move list and tuple tests from test_types.py to their own scripts:
test_tuple.py and test_list.py. Common tests for tuple, list and UserList
are shared (in seq_tests.py and list_tests.py). Port tests to PyUnit.
(From SF patch #736962)
--- NEW FILE: list_tests.py ---
"""
Tests common to list and UserList.UserList
"""
import sys
import unittest
from test import test_support, seq_tests
class CommonTest(seq_tests.CommonTest):
def test_repr(self):
l0 = []
l2 = [0, 1, 2]
a0 = self.type2test(l0)
a2 = self.type2test(l2)
self.assertEqual(str(a0), str(l0))
self.assertEqual(repr(a0), repr(l0))
self.assertEqual(`a2`, `l2`)
self.assertEqual(str(a2), "[0, 1, 2]")
self.assertEqual(repr(a2), "[0, 1, 2]")
def test_setitem(self):
a = self.type2test([0, 1])
a[0] = 0
a[1] = 100
self.assertEqual(a, self.type2test([0, 100]))
a[-1] = 200
self.assertEqual(a, self.type2test([0, 200]))
a[-2] = 100
self.assertEqual(a, self.type2test([100, 200]))
self.assertRaises(IndexError, a.__setitem__, -3, 200)
self.assertRaises(IndexError, a.__setitem__, 2, 200)
a = self.type2test([])
self.assertRaises(IndexError, a.__setitem__, 0, 200)
self.assertRaises(IndexError, a.__setitem__, -1, 200)
self.assertRaises(TypeError, a.__setitem__)
a = self.type2test([0,1,2,3,4])
a[0L] = 1
a[1L] = 2
a[2L] = 3
self.assertEqual(a, self.type2test([1,2,3,3,4]))
a[0] = 5
a[1] = 6
a[2] = 7
self.assertEqual(a, self.type2test([5,6,7,3,4]))
a[-2L] = 88
a[-1L] = 99
self.assertEqual(a, self.type2test([5,6,7,88,99]))
a[-2] = 8
a[-1] = 9
self.assertEqual(a, self.type2test([5,6,7,8,9]))
def test_delitem(self):
a = self.type2test([0, 1])
del a[1]
self.assertEqual(a, [0])
del a[0]
self.assertEqual(a, [])
a = self.type2test([0, 1])
del a[-2]
self.assertEqual(a, [1])
del a[-1]
self.assertEqual(a, [])
a = self.type2test([0, 1])
self.assertRaises(IndexError, a.__delitem__, -3)
self.assertRaises(IndexError, a.__delitem__, 2)
a = self.type2test([])
self.assertRaises(IndexError, a.__delitem__, 0)
self.assertRaises(TypeError, a.__delitem__)
def test_setslice(self):
l = [0, 1]
a = self.type2test(l)
for i in range(-3, 4):
a[:i] = l[:i]
self.assertEqual(a, l)
a2 = a[:]
a2[:i] = a[:i]
self.assertEqual(a2, a)
a[i:] = l[i:]
self.assertEqual(a, l)
a2 = a[:]
a2[i:] = a[i:]
self.assertEqual(a2, a)
for j in range(-3, 4):
a[i:j] = l[i:j]
self.assertEqual(a, l)
a2 = a[:]
a2[i:j] = a[i:j]
self.assertEqual(a2, a)
aa2 = a2[:]
aa2[:0] = [-2, -1]
self.assertEqual(aa2, [-2, -1, 0, 1])
aa2[0:] = []
self.assertEqual(aa2, [])
a = self.type2test([1, 2, 3, 4, 5])
a[:-1] = a
self.assertEqual(a, self.type2test([1, 2, 3, 4, 5, 5]))
a = self.type2test([1, 2, 3, 4, 5])
a[1:] = a
self.assertEqual(a, self.type2test([1, 1, 2, 3, 4, 5]))
a = self.type2test([1, 2, 3, 4, 5])
a[1:-1] = a
self.assertEqual(a, self.type2test([1, 1, 2, 3, 4, 5, 5]))
a = self.type2test([])
a[:] = tuple(range(10))
self.assertEqual(a, self.type2test(range(10)))
self.assertRaises(TypeError, a.__setslice__, 0, 1, 5)
self.assertRaises(TypeError, a.__setslice__)
def test_delslice(self):
a = self.type2test([0, 1])
del a[1:2]
del a[0:1]
self.assertEqual(a, self.type2test([]))
a = self.type2test([0, 1])
del a[1L:2L]
del a[0L:1L]
self.assertEqual(a, self.type2test([]))
a = self.type2test([0, 1])
del a[-2:-1]
self.assertEqual(a, self.type2test([1]))
a = self.type2test([0, 1])
del a[-2L:-1L]
self.assertEqual(a, self.type2test([1]))
a = self.type2test([0, 1])
del a[1:]
del a[:1]
self.assertEqual(a, self.type2test([]))
a = self.type2test([0, 1])
del a[1L:]
del a[:1L]
self.assertEqual(a, self.type2test([]))
a = self.type2test([0, 1])
del a[-1:]
self.assertEqual(a, self.type2test([0]))
a = self.type2test([0, 1])
del a[-1L:]
self.assertEqual(a, self.type2test([0]))
a = self.type2test([0, 1])
del a[:]
self.assertEqual(a, self.type2test([]))
def test_append(self):
a = self.type2test([])
a.append(0)
a.append(1)
a.append(2)
self.assertEqual(a, self.type2test([0, 1, 2]))
self.assertRaises(TypeError, a.append)
def test_extend(self):
a1 = self.type2test([0])
a2 = self.type2test((0, 1))
a = a1[:]
a.extend(a2)
self.assertEqual(a, a1 + a2)
a.extend(self.type2test([]))
self.assertEqual(a, a1 + a2)
a.extend(a)
self.assertEqual(a, self.type2test([0, 0, 1, 0, 0, 1]))
a = self.type2test("spam")
a.extend("eggs")
self.assertEqual(a, list("spameggs"))
self.assertRaises(TypeError, a.extend, None)
self.assertRaises(TypeError, a.extend)
def test_insert(self):
a = self.type2test([0, 1, 2])
a.insert(0, -2)
a.insert(1, -1)
a.insert(2, 0)
self.assertEqual(a, [-2, -1, 0, 0, 1, 2])
b = a[:]
b.insert(-2, "foo")
b.insert(-200, "left")
b.insert(200, "right")
self.assertEqual(b, self.type2test(["left",-2,-1,0,0,"foo",1,2,"right"]))
self.assertRaises(TypeError, a.insert)
def test_pop(self):
a = self.type2test([-1, 0, 1])
a.pop()
self.assertEqual(a, [-1, 0])
a.pop(0)
self.assertEqual(a, [0])
self.assertRaises(IndexError, a.pop, 5)
a.pop(0)
self.assertEqual(a, [])
self.assertRaises(IndexError, a.pop)
self.assertRaises(TypeError, a.pop, 42, 42)
def test_remove(self):
a = self.type2test([0, 0, 1])
a.remove(1)
self.assertEqual(a, [0, 0])
a.remove(0)
self.assertEqual(a, [0])
a.remove(0)
self.assertEqual(a, [])
self.assertRaises(ValueError, a.remove, 0)
self.assertRaises(TypeError, a.remove)
class BadExc(Exception):
pass
class BadCmp:
def __eq__(self, other):
if other == 2:
raise BadExc()
return False
a = self.type2test([0, 1, 2, 3])
self.assertRaises(BadExc, a.remove, BadCmp())
def test_count(self):
a = self.type2test([0, 1, 2])*3
self.assertEqual(a.count(0), 3)
self.assertEqual(a.count(1), 3)
self.assertEqual(a.count(3), 0)
self.assertRaises(TypeError, a.count)
class BadExc(Exception):
pass
class BadCmp:
def __eq__(self, other):
if other == 2:
raise BadExc()
return False
self.assertRaises(BadExc, a.count, BadCmp())
def test_index(self):
u = self.type2test([0, 1])
self.assertEqual(u.index(0), 0)
self.assertEqual(u.index(1), 1)
self.assertRaises(ValueError, u.index, 2)
u = self.type2test([-2, -1, 0, 0, 1, 2])
self.assertEqual(u.count(0), 2)
self.assertEqual(u.index(0), 2)
self.assertEqual(u.index(0, 2), 2)
self.assertEqual(u.index(-2, -10), 0)
self.assertEqual(u.index(0, 3), 3)
self.assertEqual(u.index(0, 3, 4), 3)
self.assertRaises(ValueError, u.index, 2, 0, -10)
self.assertRaises(TypeError, u.index)
class BadExc(Exception):
pass
class BadCmp:
def __eq__(self, other):
if other == 2:
raise BadExc()
return False
a = self.type2test([0, 1, 2, 3])
self.assertRaises(BadExc, a.index, BadCmp())
a = self.type2test([-2, -1, 0, 0, 1, 2])
self.assertEqual(a.index(0), 2)
self.assertEqual(a.index(0, 2), 2)
self.assertEqual(a.index(0, -4), 2)
self.assertEqual(a.index(-2, -10), 0)
self.assertEqual(a.index(0, 3), 3)
self.assertEqual(a.index(0, -3), 3)
self.assertEqual(a.index(0, 3, 4), 3)
self.assertEqual(a.index(0, -3, -2), 3)
self.assertEqual(a.index(0, -4*sys.maxint, 4*sys.maxint), 2)
self.assertRaises(ValueError, a.index, 0, 4*sys.maxint,-4*sys.maxint)
self.assertRaises(ValueError, a.index, 2, 0, -10)
a.remove(0)
self.assertRaises(ValueError, a.index, 2, 0, 4)
self.assertEqual(a, self.type2test([-2, -1, 0, 1, 2]))
def test_reverse(self):
u = self.type2test([-2, -1, 0, 1, 2])
u2 = u[:]
u.reverse()
self.assertEqual(u, [2, 1, 0, -1, -2])
u.reverse()
self.assertEqual(u, u2)
self.assertRaises(TypeError, u.reverse, 42)
def test_sort(self):
u = self.type2test([1, 0])
u.sort()
self.assertEqual(u, [0, 1])
u = self.type2test([2,1,0,-1,-2])
u.sort()
self.assertEqual(u, self.type2test([-2,-1,0,1,2]))
self.assertRaises(TypeError, u.sort, 42, 42)
def revcmp(a, b):
return cmp(b, a)
u.sort(revcmp)
self.assertEqual(u, self.type2test([2,1,0,-1,-2]))
# The following dumps core in unpatched Python 1.5:
def myComparison(x,y):
return cmp(x%3, y%7)
z = self.type2test(range(12))
z.sort(myComparison)
self.assertRaises(TypeError, z.sort, 2)
def selfmodifyingComparison(x,y):
z.append(1)
return cmp(x, y)
self.assertRaises(ValueError, z.sort, selfmodifyingComparison)
self.assertRaises(TypeError, z.sort, lambda x, y: 's')
self.assertRaises(TypeError, z.sort, 42, 42, 42, 42)
def test_slice(self):
u = self.type2test("spam")
u[:2] = "h"
self.assertEqual(u, list("ham"))
def test_iadd(self):
super(CommonTest, self).test_iadd()
u = self.type2test([0, 1])
u2 = u
u += [2, 3]
self.assert_(u is u2)
u = self.type2test("spam")
u += "eggs"
self.assertEqual(u, self.type2test("spameggs"))
self.assertRaises(TypeError, u.__iadd__, None)
def test_imul(self):
u = self.type2test([0, 1])
u *= 3
self.assertEqual(u, self.type2test([0, 1, 0, 1, 0, 1]))
u *= 0
self.assertEqual(u, self.type2test([]))
def test_extendedslicing(self):
# subscript
a = self.type2test([0,1,2,3,4])
# deletion
del a[::2]
self.assertEqual(a, self.type2test([1,3]))
a = self.type2test(range(5))
del a[1::2]
self.assertEqual(a, self.type2test([0,2,4]))
a = self.type2test(range(5))
del a[1::-2]
self.assertEqual(a, self.type2test([0,2,3,4]))
a = self.type2test(range(10))
del a[::1000]
self.assertEqual(a, self.type2test([1, 2, 3, 4, 5, 6, 7, 8, 9]))
# assignment
a = self.type2test(range(10))
a[::2] = [-1]*5
self.assertEqual(a, self.type2test([-1, 1, -1, 3, -1, 5, -1, 7, -1, 9]))
a = self.type2test(range(10))
a[::-4] = [10]*3
self.assertEqual(a, self.type2test([0, 10, 2, 3, 4, 10, 6, 7, 8 ,10]))
a = self.type2test(range(4))
a[::-1] = a
self.assertEqual(a, self.type2test([3, 2, 1, 0]))
a = self.type2test(range(10))
b = a[:]
c = a[:]
a[2:3] = self.type2test(["two", "elements"])
b[slice(2,3)] = self.type2test(["two", "elements"])
c[2:3:] = self.type2test(["two", "elements"])
self.assertEqual(a, b)
self.assertEqual(a, c)
a = self.type2test(range(10))
a[::2] = tuple(range(5))
self.assertEqual(a, self.type2test([0, 1, 1, 3, 2, 5, 3, 7, 4, 9]))
--- NEW FILE: seq_tests.py ---
"""
Tests common to tuple, list and UserList.UserList
"""
import unittest
from test import test_support
class CommonTest(unittest.TestCase):
# The type to be tested
type2test = None
def test_constructors(self):
l0 = []
l1 = [0]
l2 = [0, 1]
u = self.type2test()
u0 = self.type2test(l0)
u1 = self.type2test(l1)
u2 = self.type2test(l2)
uu = self.type2test(u)
uu0 = self.type2test(u0)
uu1 = self.type2test(u1)
uu2 = self.type2test(u2)
v = self.type2test(tuple(u))
class OtherSeq:
def __init__(self, initseq):
self.__data = initseq
def __len__(self):
return len(self.__data)
def __getitem__(self, i):
return self.__data[i]
s = OtherSeq(u0)
v0 = self.type2test(s)
self.assertEqual(len(v0), len(s))
s = "this is also a sequence"
vv = self.type2test(s)
self.assertEqual(len(vv), len(s))
def test_truth(self):
self.assert_(not self.type2test())
self.assert_(self.type2test([42]))
def test_getitem(self):
u = self.type2test([0, 1, 2, 3, 4])
for i in xrange(len(u)):
self.assertEqual(u[i], i)
for i in xrange(-len(u), -1):
self.assertEqual(u[i], len(u)+i)
self.assertRaises(IndexError, u.__getitem__, -len(u)-1)
self.assertRaises(IndexError, u.__getitem__, len(u))
u = self.type2test()
self.assertRaises(IndexError, u.__getitem__, 0)
self.assertRaises(IndexError, u.__getitem__, -1)
self.assertRaises(TypeError, u.__getitem__)
def test_getslice(self):
l = [0, 1, 2, 3, 4]
u = self.type2test(l)
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]))
# Extended slices
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__)
def test_contains(self):
u = self.type2test([0, 1, 2])
for i in u:
self.assert_(i in u)
for i in min(u)-1, max(u)+1:
self.assert_(i not in u)
self.assertRaises(TypeError, u.__contains__)
def test_len(self):
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)
def test_minmax(self):
u = self.type2test([0, 1, 2])
self.assertEqual(min(u), 0)
self.assertEqual(max(u), 2)
def test_addmul(self):
u1 = self.type2test([0])
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):
pass
u3 = subclass([0, 1])
self.assertEqual(u3, u3*1)
self.assert_(u3 is not u3*1)
def test_iadd(self):
u = self.type2test([0, 1])
u += self.type2test()
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"))
def test_imul(self):
u = self.type2test([0, 1])
u *= 3
self.assertEqual(u, self.type2test([0, 1, 0, 1, 0, 1]))
def test_getitemoverwriteiter(self):
# Verify that __getitem__ overrides are not recognized by __iter__
class T(self.type2test):
def __getitem__(self, key):
return str(key) + '!!!'
self.assertEqual(iter(T((1,2))).next(), 1)
--- NEW FILE: test_list.py ---
import unittest
from test import test_support, list_tests
class ListTest(list_tests.CommonTest):
type2test = list
def test_truth(self):
super(ListTest, self).test_truth()
self.assert_(not [])
self.assert_([42])
def test_identity(self):
self.assert_([] is not [])
def test_len(self):
super(ListTest, self).test_len()
self.assertEqual(len([]), 0)
self.assertEqual(len([0]), 1)
self.assertEqual(len([0, 1, 2]), 3)
def test_main():
test_support.run_unittest(ListTest)
if __name__=="__main__":
test_main()
--- NEW FILE: test_tuple.py ---
import unittest
from test import test_support, seq_tests
class TupleTest(seq_tests.CommonTest):
type2test = tuple
def test_constructors(self):
super(TupleTest, self).test_len()
# calling built-in types without argument must return empty
self.assertEqual(tuple(), ())
def test_truth(self):
super(TupleTest, self).test_truth()
self.assert_(not ())
self.assert_((42, ))
def test_len(self):
super(TupleTest, self).test_len()
self.assertEqual(len(()), 0)
self.assertEqual(len((0,)), 1)
self.assertEqual(len((0, 1, 2)), 3)
def test_iadd(self):
super(TupleTest, self).test_iadd()
u = (0, 1)
u2 = u
u += (2, 3)
self.assert_(u is not u2)
def test_imul(self):
super(TupleTest, self).test_imul()
u = (0, 1)
u2 = u
u *= 3
self.assert_(u is not u2)
def test_tupleresizebug(self):
# Check that a specific bug in _PyTuple_Resize() is squashed.
def f():
for i in range(1000):
yield i
self.assertEqual(list(tuple(f())), range(1000))
def test_main():
test_support.run_unittest(TupleTest)
if __name__=="__main__":
test_main()
Index: test_types.py
===================================================================
RCS file: /cvsroot/python/python/dist/src/Lib/test/test_types.py,v
retrieving revision 1.55
retrieving revision 1.56
diff -C2 -d -r1.55 -r1.56
*** test_types.py 17 Jun 2003 19:27:39 -0000 1.55
--- test_types.py 8 Dec 2003 11:38:45 -0000 1.56
***************
*** 11,16 ****
if 0.0: raise TestFailed, '0.0 is true instead of false'
if '': raise TestFailed, '\'\' is true instead of false'
- if (): raise TestFailed, '() is true instead of false'
- if []: raise TestFailed, '[] is true instead of false'
if {}: raise TestFailed, '{} is true instead of false'
if not 1: raise TestFailed, '1 is false instead of true'
--- 11,14 ----
***************
*** 18,23 ****
if not 1.0: raise TestFailed, '1.0 is false instead of true'
if not 'x': raise TestFailed, '\'x\' is false instead of true'
- if not (1, 1): raise TestFailed, '(1, 1) is false instead of true'
- if not [1]: raise TestFailed, '[1] is false instead of true'
if not {'x': 1}: raise TestFailed, '{\'x\': 1} is false instead of true'
def f(): pass
--- 16,19 ----
***************
*** 45,51 ****
if '' < 'a' <= 'a' == 'a' < 'abc' < 'abd' < 'b': pass
else: raise TestFailed, 'string comparisons failed'
! if 0 in [0] and 0 not in [1]: pass
! else: raise TestFailed, 'membership test failed'
! if None is None and [] is not []: pass
else: raise TestFailed, 'identity test failed'
--- 41,45 ----
if '' < 'a' <= 'a' == 'a' < 'abc' < 'abd' < 'b': pass
else: raise TestFailed, 'string comparisons failed'
! if None is None: pass
else: raise TestFailed, 'identity test failed'
***************
*** 218,491 ****
! print '6.5.2 Tuples'
! # calling built-in types without argument must return empty
! if tuple() != (): raise TestFailed,'tuple() does not return ()'
! if len(()) != 0: raise TestFailed, 'len(())'
! if len((1,)) != 1: raise TestFailed, 'len((1,))'
! if len((1,2,3,4,5,6)) != 6: raise TestFailed, 'len((1,2,3,4,5,6))'
! if (1,2)+(3,4) != (1,2,3,4): raise TestFailed, 'tuple concatenation'
! if (1,2)*3 != (1,2,1,2,1,2): raise TestFailed, 'tuple repetition *3'
! if 0*(1,2,3) != (): raise TestFailed, 'tuple repetition 0*'
! if min((1,2)) != 1 or max((1,2)) != 2: raise TestFailed, 'min/max tuple'
! if 0 in (0,1,2) and 1 in (0,1,2) and 2 in (0,1,2) and 3 not in (0,1,2): pass
! else: raise TestFailed, 'in/not in tuple'
! try: ()[0]
! except IndexError: pass
! else: raise TestFailed, "tuple index error didn't raise IndexError"
! x = ()
! x += ()
! if x != (): raise TestFailed, 'tuple inplace add from () to () failed'
! x += (1,)
! if x != (1,): raise TestFailed, 'tuple resize from () failed'
!
! # extended slicing - subscript only for tuples
! a = (0,1,2,3,4)
! vereq(a[::], a)
! vereq(a[::2], (0,2,4))
! vereq(a[1::2], (1,3))
! vereq(a[::-1], (4,3,2,1,0))
! vereq(a[::-2], (4,2,0))
! vereq(a[3::-2], (3,1))
! vereq(a[-100:100:], a)
! vereq(a[100:-100:-1], a[::-1])
! vereq(a[-100L:100L:2L], (0,2,4))
!
! # Check that a specific bug in _PyTuple_Resize() is squashed.
! def f():
! for i in range(1000):
! yield i
! vereq(list(tuple(f())), range(1000))
!
! # Verify that __getitem__ overrides are not recognized by __iter__
! class T(tuple):
! def __getitem__(self, key):
! return str(key) + '!!!'
! vereq(iter(T((1,2))).next(), 1)
!
! print '6.5.3 Lists'
! # calling built-in types without argument must return empty
! if list() != []: raise TestFailed,'list() does not return []'
! if len([]) != 0: raise TestFailed, 'len([])'
! if len([1,]) != 1: raise TestFailed, 'len([1,])'
! if len([1,2,3,4,5,6]) != 6: raise TestFailed, 'len([1,2,3,4,5,6])'
! if [1,2]+[3,4] != [1,2,3,4]: raise TestFailed, 'list concatenation'
! if [1,2]*3 != [1,2,1,2,1,2]: raise TestFailed, 'list repetition *3'
! if [1,2]*3L != [1,2,1,2,1,2]: raise TestFailed, 'list repetition *3L'
! if 0*[1,2,3] != []: raise TestFailed, 'list repetition 0*'
! if 0L*[1,2,3] != []: raise TestFailed, 'list repetition 0L*'
! if min([1,2]) != 1 or max([1,2]) != 2: raise TestFailed, 'min/max list'
! if 0 in [0,1,2] and 1 in [0,1,2] and 2 in [0,1,2] and 3 not in [0,1,2]: pass
! else: raise TestFailed, 'in/not in list'
! a = [1, 2, 3, 4, 5]
! a[:-1] = a
! if a != [1, 2, 3, 4, 5, 5]:
! raise TestFailed, "list self-slice-assign (head)"
! a = [1, 2, 3, 4, 5]
! a[1:] = a
! if a != [1, 1, 2, 3, 4, 5]:
! raise TestFailed, "list self-slice-assign (tail)"
! a = [1, 2, 3, 4, 5]
! a[1:-1] = a
! if a != [1, 1, 2, 3, 4, 5, 5]:
! raise TestFailed, "list self-slice-assign (center)"
! try: [][0]
! except IndexError: pass
! else: raise TestFailed, "list index error didn't raise IndexError"
! try: [][0] = 5
! except IndexError: pass
! else: raise TestFailed, "list assignment index error didn't raise IndexError"
! try: [].pop()
! except IndexError: pass
! else: raise TestFailed, "empty list.pop() didn't raise IndexError"
! try: [1].pop(5)
! except IndexError: pass
! else: raise TestFailed, "[1].pop(5) didn't raise IndexError"
! try: [][0:1] = 5
! except TypeError: pass
! else: raise TestFailed, "bad list slice assignment didn't raise TypeError"
! try: [].extend(None)
! except TypeError: pass
! else: raise TestFailed, "list.extend(None) didn't raise TypeError"
! a = [1, 2, 3, 4]
! a *= 0
! if a != []:
! raise TestFailed, "list inplace repeat"
!
! a = []
! a[:] = tuple(range(10))
! if a != range(10):
! raise TestFailed, "assigning tuple to slice"
!
! print '6.5.3a Additional list operations'
! a = [0,1,2,3,4]
! a[0L] = 1
! a[1L] = 2
! a[2L] = 3
! if a != [1,2,3,3,4]: raise TestFailed, 'list item assignment [0L], [1L], [2L]'
! a[0] = 5
! a[1] = 6
! a[2] = 7
! if a != [5,6,7,3,4]: raise TestFailed, 'list item assignment [0], [1], [2]'
! a[-2L] = 88
! a[-1L] = 99
! if a != [5,6,7,88,99]: raise TestFailed, 'list item assignment [-2L], [-1L]'
! a[-2] = 8
! a[-1] = 9
! if a != [5,6,7,8,9]: raise TestFailed, 'list item assignment [-2], [-1]'
! a[:2] = [0,4]
! a[-3:] = []
! a[1:1] = [1,2,3]
! if a != [0,1,2,3,4]: raise TestFailed, 'list slice assignment'
! a[ 1L : 4L] = [7,8,9]
! if a != [0,7,8,9,4]: raise TestFailed, 'list slice assignment using long ints'
! del a[1:4]
! if a != [0,4]: raise TestFailed, 'list slice deletion'
! del a[0]
! if a != [4]: raise TestFailed, 'list item deletion [0]'
! del a[-1]
! if a != []: raise TestFailed, 'list item deletion [-1]'
! a=range(0,5)
! del a[1L:4L]
! if a != [0,4]: raise TestFailed, 'list slice deletion'
! del a[0L]
! if a != [4]: raise TestFailed, 'list item deletion [0]'
! del a[-1L]
! if a != []: raise TestFailed, 'list item deletion [-1]'
! a.append(0)
! a.append(1)
! a.append(2)
! if a != [0,1,2]: raise TestFailed, 'list append'
! a.insert(0, -2)
! a.insert(1, -1)
! a.insert(2,0)
! if a != [-2,-1,0,0,1,2]: raise TestFailed, 'list insert'
! b = a[:]
! b.insert(-2, "foo")
! b.insert(-200, "left")
! b.insert(200, "right")
! if b != ["left",-2,-1,0,0,"foo",1,2,"right"]: raise TestFailed, 'list insert2'
! # a = [-2,-1,0,0,1,2]
! if a.count(0) != 2: raise TestFailed, ' list count'
! if a.index(0) != 2: raise TestFailed, 'list index'
! if a.index(0,2) != 2: raise TestFailed, 'list index, start argument'
! if a.index(0,-4) != 2: raise TestFailed, 'list index, -start argument'
! if a.index(-2,-10) != 0: raise TestFailed, 'list index, very -start argument'
! if a.index(0,3) != 3: raise TestFailed, 'list index, start argument'
! if a.index(0,-3) != 3: raise TestFailed, 'list index, -start argument'
! if a.index(0,3,4) != 3: raise TestFailed, 'list index, stop argument'
! if a.index(0,-3,-2) != 3: raise TestFailed, 'list index, -stop argument'
! if a.index(0,-4*sys.maxint,4*sys.maxint) != 2:
! raise TestFailed, 'list index, -maxint, maxint argument'
! try:
! a.index(0, 4*sys.maxint,-4*sys.maxint)
! except ValueError:
! pass
! else:
! raise TestFailed, 'list index, maxint,-maxint argument'
!
! try:
! a.index(2,0,-10)
! except ValueError:
! pass
! else:
! raise TestFailed, 'list index, very -stop argument'
! a.remove(0)
! try:
! a.index(2,0,4)
! except ValueError:
! pass
! else:
! raise TestFailed, 'list index, stop argument.'
! if a != [-2,-1,0,1,2]: raise TestFailed, 'list remove'
! a.reverse()
! if a != [2,1,0,-1,-2]: raise TestFailed, 'list reverse'
! a.sort()
! if a != [-2,-1,0,1,2]: raise TestFailed, 'list sort'
! def revcmp(a, b): return cmp(b, a)
! a.sort(revcmp)
! if a != [2,1,0,-1,-2]: raise TestFailed, 'list sort with cmp func'
! # The following dumps core in unpatched Python 1.5:
! def myComparison(x,y):
! return cmp(x%3, y%7)
! z = range(12)
! z.sort(myComparison)
!
! try: z.sort(2)
! except TypeError: pass
! else: raise TestFailed, 'list sort compare function is not callable'
!
! def selfmodifyingComparison(x,y):
! z.append(1)
! return cmp(x, y)
! try: z.sort(selfmodifyingComparison)
! except ValueError: pass
! else: raise TestFailed, 'modifying list during sort'
!
! try: z.sort(lambda x, y: 's')
! except TypeError: pass
! else: raise TestFailed, 'list sort compare function does not return int'
!
! # Test extreme cases with long ints
! a = [0,1,2,3,4]
! if a[ -pow(2,128L): 3 ] != [0,1,2]:
! raise TestFailed, "list slicing with too-small long integer"
! if a[ 3: pow(2,145L) ] != [3,4]:
! raise TestFailed, "list slicing with too-large long integer"
!
!
! # extended slicing
!
! # subscript
! a = [0,1,2,3,4]
! vereq(a[::], a)
! vereq(a[::2], [0,2,4])
! vereq(a[1::2], [1,3])
! vereq(a[::-1], [4,3,2,1,0])
! vereq(a[::-2], [4,2,0])
! vereq(a[3::-2], [3,1])
! vereq(a[-100:100:], a)
! vereq(a[100:-100:-1], a[::-1])
! vereq(a[-100L:100L:2L], [0,2,4])
! vereq(a[1000:2000:2], [])
! vereq(a[-1000:-2000:-2], [])
! # deletion
! del a[::2]
! vereq(a, [1,3])
! a = range(5)
! del a[1::2]
! vereq(a, [0,2,4])
! a = range(5)
! del a[1::-2]
! vereq(a, [0,2,3,4])
! a = range(10)
! del a[::1000]
! vereq(a, [1, 2, 3, 4, 5, 6, 7, 8, 9])
! # assignment
! a = range(10)
! a[::2] = [-1]*5
! vereq(a, [-1, 1, -1, 3, -1, 5, -1, 7, -1, 9])
! a = range(10)
! a[::-4] = [10]*3
! vereq(a, [0, 10, 2, 3, 4, 10, 6, 7, 8 ,10])
! a = range(4)
! a[::-1] = a
! vereq(a, [3, 2, 1, 0])
! a = range(10)
! b = a[:]
! c = a[:]
! a[2:3] = ["two", "elements"]
! b[slice(2,3)] = ["two", "elements"]
! c[2:3:] = ["two", "elements"]
! vereq(a, b)
! vereq(a, c)
! a = range(10)
! a[::2] = tuple(range(5))
! vereq(a, [0, 1, 1, 3, 2, 5, 3, 7, 4, 9])
! # Verify that __getitem__ overrides are not recognized by __iter__
! class L(list):
! def __getitem__(self, key):
! return str(key) + '!!!'
! vereq(iter(L([1,2])).next(), 1)
--- 212,218 ----
! print '6.5.2 Tuples [see test_tuple.py]'
! print '6.5.3 Lists [see test_list.py]'
Index: test_userlist.py
===================================================================
RCS file: /cvsroot/python/python/dist/src/Lib/test/test_userlist.py,v
retrieving revision 1.10
retrieving revision 1.11
diff -C2 -d -r1.10 -r1.11
*** test_userlist.py 17 Jun 2003 05:05:49 -0000 1.10
--- test_userlist.py 8 Dec 2003 11:38:45 -0000 1.11
***************
*** 2,164 ****
from UserList import UserList
! import unittest, test.test_support
!
! class UserListTest(unittest.TestCase):
!
! def test_constructors(self):
! l0 = []
! l1 = [0]
! l2 = [0, 1]
!
! u = UserList()
! u0 = UserList(l0)
! u1 = UserList(l1)
! u2 = UserList(l2)
!
! uu = UserList(u)
! uu0 = UserList(u0)
! uu1 = UserList(u1)
! uu2 = UserList(u2)
!
! v = UserList(tuple(u))
! class OtherList:
! def __init__(self, initlist):
! self.__data = initlist
! def __len__(self):
! return len(self.__data)
! def __getitem__(self, i):
! return self.__data[i]
! v0 = UserList(OtherList(u0))
! vv = UserList("this is also a sequence")
!
! def test_repr(self):
! l0 = []
! l2 = [0, 1, 2]
! u0 = UserList(l0)
! u2 = UserList(l2)
!
! self.assertEqual(str(u0), str(l0))
! self.assertEqual(repr(u0), repr(l0))
! self.assertEqual(`u2`, `l2`)
!
! def test_cmplen(self):
! l0 = []
! l1 = [0]
! l2 = [0, 1]
!
! # Test constructors
!
! u = UserList()
! u0 = UserList(l0)
! u1 = UserList(l1)
! u2 = UserList(l2)
!
! uu = UserList(u)
! uu0 = UserList(u0)
! uu1 = UserList(u1)
! uu2 = UserList(u2)
!
! def mycmp(x, y):
! r = cmp(x, y)
! if r < 0: return -1
! if r > 0: return 1
! return r
!
! all = [l0, l1, l2, u, u0, u1, u2, uu, uu0, uu1, uu2]
! for a in all:
! for b in all:
! self.assertEqual(mycmp(a, b), mycmp(len(a), len(b)))
!
! self.assert_(u0 <= u2)
! self.assert_(u2 >= u0)
!
! def test_getitem(self):
! u = UserList([0, 1, 2])
! for i in xrange(len(u)):
! self.assertEqual(u[i], i)
!
! def test_setitem(self):
! u = UserList([0, 1])
! u[0] = 0
! u[1] = 100
! self.assertEqual(u, [0, 100])
! self.assertRaises(IndexError, u.__setitem__, 2, 200)
!
! def test_delitem(self):
! u = UserList([0, 1])
! del u[1]
! del u[0]
! self.assertRaises(IndexError, u.__delitem__, 0)
!
! def test_getslice(self):
! l = [0, 1]
! u = UserList(l)
! for i in xrange(-3, 4):
! self.assertEqual(u[:i], l[:i])
! self.assertEqual(u[i:], l[i:])
! for j in xrange(-3, 4):
! self.assertEqual(u[i:j], l[i:j])
!
! def test_setslice(self):
! l = [0, 1]
! u = UserList(l)
!
! # Test __setslice__
! for i in range(-3, 4):
! u[:i] = l[:i]
! self.assertEqual(u, l)
! u2 = u[:]
! u2[:i] = u[:i]
! self.assertEqual(u2, u)
! u[i:] = l[i:]
! self.assertEqual(u, l)
! u2 = u[:]
! u2[i:] = u[i:]
! self.assertEqual(u2, u)
! for j in range(-3, 4):
! u[i:j] = l[i:j]
! self.assertEqual(u, l)
! u2 = u[:]
! u2[i:j] = u[i:j]
! self.assertEqual(u2, u)
!
! uu2 = u2[:]
! uu2[:0] = [-2, -1]
! self.assertEqual(uu2, [-2, -1, 0, 1])
! uu2[0:] = []
! self.assertEqual(uu2, [])
!
! def test_contains(self):
! u = UserList([0, 1, 2])
! for i in u:
! self.assert_(i in u)
! for i in min(u)-1, max(u)+1:
! self.assert_(i not in u)
!
! def test_delslice(self):
! u = UserList([0, 1])
! del u[1:2]
! del u[0:1]
! self.assertEqual(u, [])
!
! u = UserList([0, 1])
! del u[1:]
! del u[:1]
! self.assertEqual(u, [])
!
! def test_addmul(self):
! u1 = UserList([0])
! u2 = UserList([0, 1])
! self.assertEqual(u1, u1 + [])
! self.assertEqual(u1, [] + u1)
! self.assertEqual(u1 + [1], u2)
! self.assertEqual([-1] + u1, [-1, 0])
! self.assertEqual(u2, u2*1)
! self.assertEqual(u2, 1*u2)
! self.assertEqual(u2+u2, u2*2)
! self.assertEqual(u2+u2, 2*u2)
! self.assertEqual(u2+u2+u2, u2*3)
! self.assertEqual(u2+u2+u2, 3*u2)
def test_add_specials(self):
u = UserList("spam")
--- 2,21 ----
from UserList import UserList
! import unittest
! from test import test_support, list_tests
+ class UserListTest(list_tests.CommonTest):
+ type2test = UserList
+
+ def test_getslice(self):
+ super(UserListTest, self).test_getslice()
+ l = [0, 1, 2, 3, 4]
+ u = self.type2test(l)
+ for i in range(-3, 6):
+ self.assertEqual(u[:i], l[:i])
+ self.assertEqual(u[i:], l[i:])
+ for j in xrange(-3, 6):
+ self.assertEqual(u[i:j], l[i:j])
+
def test_add_specials(self):
u = UserList("spam")
***************
*** 173,266 ****
self.assertEqual(u2, list("spameggs"))
! def test_append(self):
! u = UserList((0, ))
! u.append(1)
! self.assertEqual(u, [0, 1])
!
! def test_insert(self):
! u = UserList((0, 1))
! u.insert(0, -1)
! self.assertEqual(u, [-1, 0, 1])
!
! def test_pop(self):
! u = UserList((-1, 0, 1))
! u.pop()
! self.assertEqual(u, [-1, 0])
! u.pop(0)
! self.assertEqual(u, [0])
!
! def test_remove(self):
! u = UserList((0, 1))
! u.remove(1)
! self.assertEqual(u, [0])
!
! def test_count(self):
! u = UserList((0, 1))*3
! self.assertEqual(u.count(0), 3)
! self.assertEqual(u.count(1), 3)
! self.assertEqual(u.count(2), 0)
!
! def test_index(self):
! u = UserList((0, 1))
! self.assertEqual(u.index(0), 0)
! self.assertEqual(u.index(1), 1)
! self.assertRaises(ValueError, u.index, 2)
!
! u = UserList([-2,-1,0,0,1,2])
! self.assertEqual(u.count(0), 2)
! self.assertEqual(u.index(0), 2)
! self.assertEqual(u.index(0,2), 2)
! self.assertEqual(u.index(-2,-10), 0)
! self.assertEqual(u.index(0,3), 3)
! self.assertEqual(u.index(0,3,4), 3)
! self.assertRaises(ValueError, u.index, 2,0,-10)
!
! def test_reverse(self):
! u = UserList((0, 1))
! u2 = u[:]
! u.reverse()
! self.assertEqual(u, [1, 0])
! u.reverse()
! self.assertEqual(u, u2)
!
! def test_sort(self):
! u = UserList([1, 0])
! u.sort()
! self.assertEqual(u, [0, 1])
!
! def test_slice(self):
! u = UserList("spam")
! u[:2] = "h"
! self.assertEqual(u, list("ham"))
!
! def test_iadd(self):
! u = UserList((0, 1))
! u += [0, 1]
! self.assertEqual(u, [0, 1, 0, 1])
! u += UserList([0, 1])
! self.assertEqual(u, [0, 1, 0, 1, 0, 1])
!
! u = UserList("spam")
! u += "eggs"
! self.assertEqual(u, list("spameggs"))
!
! def test_extend(self):
! u1 = UserList((0, ))
! u2 = UserList((0, 1))
! u = u1[:]
! u.extend(u2)
! self.assertEqual(u, u1 + u2)
!
! u = UserList("spam")
! u.extend("eggs")
! self.assertEqual(u, list("spameggs"))
!
! def test_imul(self):
! u = UserList((0, 1))
! u *= 3
! self.assertEqual(u, [0, 1, 0, 1, 0, 1])
def test_main():
! test.test_support.run_unittest(UserListTest)
if __name__ == "__main__":
--- 30,59 ----
self.assertEqual(u2, list("spameggs"))
! def test_iadd(self):
! super(UserListTest, self).test_iadd()
! u = [0, 1]
! u += UserList([0, 1])
! self.assertEqual(u, [0, 1, 0, 1])
!
! def test_mixedcmp(self):
! u = self.type2test([0, 1])
! self.assertEqual(u, [0, 1])
! self.assertNotEqual(u, [0])
! self.assertNotEqual(u, [0, 2])
!
! def test_mixedadd(self):
! u = self.type2test([0, 1])
! self.assertEqual(u + [], u)
! self.assertEqual(u + [2], [0, 1, 2])
!
! def test_getitemoverwriteiter(self):
! # Verify that __getitem__ overrides *are* recognized by __iter__
! class T(self.type2test):
! def __getitem__(self, key):
! return str(key) + '!!!'
! self.assertEqual(iter(T((1,2))).next(), "0!!!")
def test_main():
! test_support.run_unittest(UserListTest)
if __name__ == "__main__":
More information about the Python-checkins
mailing list