Test suite for UserList.
diff --git a/Lib/test/test_userlist.py b/Lib/test/test_userlist.py
new file mode 100644
index 0000000..b684689
--- /dev/null
+++ b/Lib/test/test_userlist.py
@@ -0,0 +1,176 @@
+# 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)
+
+# 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
+