blob: a0b94fae7dcf72ad20ba787a5f4cd26edbb05cc5 [file] [log] [blame]
Neal Norwitz1c0423a2004-07-08 01:59:55 +00001# Python test set -- built-in functions
2
3import test.test_support, unittest
4import sys
Alexandre Vassalotti602d8db2008-06-10 04:01:23 +00005import pickle
Neal Norwitz1c0423a2004-07-08 01:59:55 +00006
7import warnings
8warnings.filterwarnings("ignore", "integer argument expected",
9 DeprecationWarning, "unittest")
10
11class XrangeTest(unittest.TestCase):
12 def test_xrange(self):
13 self.assertEqual(list(xrange(3)), [0, 1, 2])
14 self.assertEqual(list(xrange(1, 5)), [1, 2, 3, 4])
15 self.assertEqual(list(xrange(0)), [])
16 self.assertEqual(list(xrange(-3)), [])
17 self.assertEqual(list(xrange(1, 10, 3)), [1, 4, 7])
18 self.assertEqual(list(xrange(5, -5, -3)), [5, 2, -1, -4])
19
20 a = 10
21 b = 100
22 c = 50
23
24 self.assertEqual(list(xrange(a, a+2)), [a, a+1])
25 self.assertEqual(list(xrange(a+2, a, -1L)), [a+2, a+1])
26 self.assertEqual(list(xrange(a+4, a, -2)), [a+4, a+2])
27
28 seq = list(xrange(a, b, c))
Benjamin Peterson5c8da862009-06-30 22:57:08 +000029 self.assertTrue(a in seq)
30 self.assertTrue(b not in seq)
Neal Norwitz1c0423a2004-07-08 01:59:55 +000031 self.assertEqual(len(seq), 2)
32
33 seq = list(xrange(b, a, -c))
Benjamin Peterson5c8da862009-06-30 22:57:08 +000034 self.assertTrue(b in seq)
35 self.assertTrue(a not in seq)
Neal Norwitz1c0423a2004-07-08 01:59:55 +000036 self.assertEqual(len(seq), 2)
37
38 seq = list(xrange(-a, -b, -c))
Benjamin Peterson5c8da862009-06-30 22:57:08 +000039 self.assertTrue(-a in seq)
40 self.assertTrue(-b not in seq)
Neal Norwitz1c0423a2004-07-08 01:59:55 +000041 self.assertEqual(len(seq), 2)
42
43 self.assertRaises(TypeError, xrange)
44 self.assertRaises(TypeError, xrange, 1, 2, 3, 4)
45 self.assertRaises(ValueError, xrange, 1, 2, 0)
46
47 self.assertRaises(OverflowError, xrange, 1e100, 1e101, 1e101)
48
49 self.assertRaises(TypeError, xrange, 0, "spam")
50 self.assertRaises(TypeError, xrange, 0, 42, "spam")
51
Tim Petersfeec4532004-08-08 07:17:39 +000052 self.assertEqual(len(xrange(0, sys.maxint, sys.maxint-1)), 2)
53
Neal Norwitz1c0423a2004-07-08 01:59:55 +000054 self.assertRaises(OverflowError, xrange, -sys.maxint, sys.maxint)
55 self.assertRaises(OverflowError, xrange, 0, 2*sys.maxint)
56
Neal Norwitz64fa74d2004-10-14 03:46:18 +000057 r = xrange(-sys.maxint, sys.maxint, 2)
Thomas Woutersf4d8f392006-04-04 17:28:12 +000058 self.assertEqual(len(r), sys.maxint)
Tim Petersfeec4532004-08-08 07:17:39 +000059 self.assertRaises(OverflowError, xrange, -sys.maxint-1, sys.maxint, 2)
60
Alexandre Vassalotti602d8db2008-06-10 04:01:23 +000061 def test_pickling(self):
62 testcases = [(13,), (0, 11), (-22, 10), (20, 3, -1),
63 (13, 21, 3), (-2, 2, 2)]
Hirokazu Yamamoto592c2752008-10-23 00:37:33 +000064 for proto in range(pickle.HIGHEST_PROTOCOL + 1):
Alexandre Vassalotti602d8db2008-06-10 04:01:23 +000065 for t in testcases:
66 r = xrange(*t)
67 self.assertEquals(list(pickle.loads(pickle.dumps(r, proto))),
68 list(r))
69
Alexandre Vassalotti1f2f61a2008-06-10 03:34:53 +000070
Neal Norwitz1c0423a2004-07-08 01:59:55 +000071def test_main():
72 test.test_support.run_unittest(XrangeTest)
73
74if __name__ == "__main__":
75 test_main()