Issue #1766304:  Optimize membership testing for ranges:  'n in range(...)'
does an O(1) check, if n is an integer.  Non-integers aren't affected.
Thanks Robert Lehmann.
diff --git a/Lib/test/test_range.py b/Lib/test/test_range.py
index 24836d0..1a40dd1 100644
--- a/Lib/test/test_range.py
+++ b/Lib/test/test_range.py
@@ -78,6 +78,56 @@
         with self.assertRaises(TypeError):
             range([], 1, -1)
 
+    def test_types(self):
+        # Non-integer objects *equal* to any of the range's items are supposed
+        # to be contained in the range.
+        self.assertTrue(1.0 in range(3))
+        self.assertTrue(True in range(3))
+        self.assertTrue(1+0j in range(3))
+
+        class C1:
+            def __eq__(self, other): return True
+        self.assertTrue(C1() in range(3))
+
+        # Objects are never coerced into other types for comparison.
+        class C2:
+            def __int__(self): return 1
+            def __index__(self): return 1
+        self.assertFalse(C2() in range(3))
+        # ..except if explicitly told so.
+        self.assertTrue(int(C2()) in range(3))
+
+
+    def test_strided_limits(self):
+        r = range(0, 101, 2)
+        self.assertTrue(0 in r)
+        self.assertFalse(1 in r)
+        self.assertTrue(2 in r)
+        self.assertFalse(99 in r)
+        self.assertTrue(100 in r)
+        self.assertFalse(101 in r)
+
+        r = range(0, -20, -1)
+        self.assertTrue(0 in r)
+        self.assertTrue(-1 in r)
+        self.assertTrue(-19 in r)
+        self.assertFalse(-20 in r)
+
+        r = range(0, -20, -2)
+        self.assertTrue(-18 in r)
+        self.assertFalse(-19 in r)
+        self.assertFalse(-20 in r)
+
+    def test_empty(self):
+        r = range(0)
+        self.assertFalse(0 in r)
+        self.assertFalse(1 in r)
+
+        r = range(0, -10)
+        self.assertFalse(0 in r)
+        self.assertFalse(-1 in r)
+        self.assertFalse(1 in r)
+
 def test_main():
     test.support.run_unittest(RangeTest)