[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