| # Check every path through every method of UserList |
| |
| from UserList import UserList |
| |
| 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) |
| |
| 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") |
| |
| # Test __repr__ |
| |
| assert str(u0) == str(l0) |
| assert repr(u1) == repr(l1) |
| assert `u2` == `l2` |
| |
| # Test __cmp__ and __len__ |
| |
| def mycmp(a, b): |
| r = cmp(a, b) |
| 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: |
| assert mycmp(a, b) == mycmp(len(a), len(b)) |
| |
| # Test __getitem__ |
| |
| for i in range(len(u2)): |
| assert u2[i] == i |
| |
| # Test __setitem__ |
| |
| uu2[0] = 0 |
| uu2[1] = 100 |
| try: |
| uu2[2] = 200 |
| except IndexError: |
| pass |
| else: |
| assert 0, "uu2[2] shouldn't be assignable" |
| |
| # Test __delitem__ |
| |
| del uu2[1] |
| del uu2[0] |
| try: |
| del uu2[0] |
| except IndexError: |
| pass |
| else: |
| assert 0, "uu2[0] shouldn't be deletable" |
| |
| # Test __getslice__ |
| |
| for i in range(-3, 4): |
| assert u2[:i] == l2[:i] |
| assert u2[i:] == l2[i:] |
| for j in range(-3, 4): |
| assert u2[i:j] == l2[i:j] |
| |
| # Test __setslice__ |
| |
| for i in range(-3, 4): |
| u2[:i] = l2[:i] |
| assert u2 == l2 |
| u2[i:] = l2[i:] |
| assert u2 == l2 |
| for j in range(-3, 4): |
| u2[i:j] = l2[i:j] |
| assert u2 == l2 |
| |
| uu2 = u2[:] |
| uu2[:0] = [-2, -1] |
| assert uu2 == [-2, -1, 0, 1] |
| uu2[0:] = [] |
| assert uu2 == [] |
| |
| # Test __delslice__ |
| |
| uu2 = u2[:] |
| del uu2[1:2] |
| del uu2[0:1] |
| assert uu2 == [] |
| |
| uu2 = u2[:] |
| del uu2[1:] |
| del uu2[:1] |
| assert uu2 == [] |
| |
| # Test __add__, __radd__, __mul__ and __rmul__ |
| |
| assert u1 + [] == [] + u1 == u1 |
| assert u1 + [1] == u2 |
| assert [-1] + u1 == [-1, 0] |
| assert u2 == u2*1 == 1*u2 |
| assert u2+u2 == u2*2 == 2*u2 |
| assert u2+u2+u2 == u2*3 == 3*u2 |
| |
| # Test append |
| |
| u = u1[:] |
| u.append(1) |
| assert u == u2 |
| |
| # Test insert |
| |
| u = u2[:] |
| u.insert(0, -1) |
| assert u == [-1, 0, 1] |
| |
| # Test pop |
| |
| u = [-1] + u2 |
| u.pop() |
| assert u == [-1, 0] |
| u.pop(0) |
| assert u == [0] |
| |
| # Test remove |
| |
| u = u2[:] |
| u.remove(1) |
| assert u == u1 |
| |
| # Test count |
| u = u2*3 |
| assert u.count(0) == 3 |
| assert u.count(1) == 3 |
| assert u.count(2) == 0 |
| |
| |
| # Test index |
| |
| assert u2.index(0) == 0 |
| assert u2.index(1) == 1 |
| try: |
| u2.index(2) |
| except ValueError: |
| pass |
| else: |
| assert 0, "expected ValueError" |
| |
| # Test reverse |
| |
| u = u2[:] |
| u.reverse() |
| assert u == [1, 0] |
| u.reverse() |
| assert u == u2 |
| |
| # Test sort |
| |
| u = UserList([1, 0]) |
| u.sort() |
| assert u == u2 |
| |
| # Test extend |
| |
| u = u1[:] |
| u.extend(u2) |
| assert u == u1 + u2 |
| |