Subclasses of int/long are allowed to define an __index__.
diff --git a/Lib/test/test_index.py b/Lib/test/test_index.py
index 6ad7d5e..ecb566d 100644
--- a/Lib/test/test_index.py
+++ b/Lib/test/test_index.py
@@ -48,11 +48,12 @@
         self.assertEqual(self.o.__index__(), 4)
         self.assertEqual(self.n.__index__(), 5)
 
-    def test_infinite_recursion(self):
-        self.failUnlessRaises(TypeError, operator.index, TrapInt())
-        self.failUnlessRaises(TypeError, operator.index, TrapLong())
-        self.failUnless(slice(TrapInt()).indices(0)==(0,0,1))
-        self.failUnlessRaises(TypeError, slice(TrapLong()).indices, 0)
+    def test_subclasses(self):
+        r = range(10)
+        self.assertEqual(r[TrapInt(5):TrapInt(10)], r[5:10])
+        self.assertEqual(r[TrapLong(5):TrapLong(10)], r[5:10])
+        self.assertEqual(slice(TrapInt()).indices(0), (0,0,1))
+        self.assertEqual(slice(TrapLong(0)).indices(0), (0,0,1))
 
     def test_error(self):
         self.o.ind = 'dumb'
@@ -104,9 +105,9 @@
         self.assertEqual(self.seq.__mul__(self.n), self.seq * 5)
         self.assertEqual(self.seq.__rmul__(self.n), self.seq * 5)
 
-    def test_infinite_recursion(self):
-        self.failUnlessRaises(TypeError, operator.getitem, self.seq, TrapInt())
-        self.failUnlessRaises(TypeError, operator.getitem, self.seq, TrapLong())
+    def test_subclasses(self):
+        self.assertEqual(self.seq[TrapInt()], self.seq[0])
+        self.assertEqual(self.seq[TrapLong()], self.seq[0])
 
     def test_error(self):
         self.o.ind = 'dumb'