14710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmimport sys
24710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm
34710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmimport unittest
44710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmfrom test.test_support import run_unittest, have_unicode
54710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmimport math
64710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm
74710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmL = [
84710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        ('0', 0),
94710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        ('1', 1),
104710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        ('9', 9),
114710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        ('10', 10),
124710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        ('99', 99),
134710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        ('100', 100),
144710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        ('314', 314),
154710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        (' 314', 314),
164710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        ('314 ', 314),
174710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        ('  \t\t  314  \t\t  ', 314),
184710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        (repr(sys.maxint), sys.maxint),
194710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        ('  1x', ValueError),
204710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        ('  1  ', 1),
214710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        ('  1\02  ', ValueError),
224710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        ('', ValueError),
234710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        (' ', ValueError),
244710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        ('  \t\t  ', ValueError)
254710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm]
264710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmif have_unicode:
274710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm    L += [
284710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        (unicode('0'), 0),
294710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        (unicode('1'), 1),
304710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        (unicode('9'), 9),
314710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        (unicode('10'), 10),
324710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        (unicode('99'), 99),
334710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        (unicode('100'), 100),
344710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        (unicode('314'), 314),
354710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        (unicode(' 314'), 314),
364710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        (unicode('\u0663\u0661\u0664 ','raw-unicode-escape'), 314),
374710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        (unicode('  \t\t  314  \t\t  '), 314),
384710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        (unicode('  1x'), ValueError),
394710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        (unicode('  1  '), 1),
404710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        (unicode('  1\02  '), ValueError),
414710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        (unicode(''), ValueError),
424710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        (unicode(' '), ValueError),
434710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        (unicode('  \t\t  '), ValueError),
444710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        (unichr(0x200), ValueError),
454710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm]
464710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm
474710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass IntTestCases(unittest.TestCase):
484710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm
494710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm    def test_basic(self):
504710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertEqual(int(314), 314)
514710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertEqual(int(3.14), 3)
524710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertEqual(int(314L), 314)
534710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        # Check that conversion from float truncates towards zero
544710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertEqual(int(-3.14), -3)
554710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertEqual(int(3.9), 3)
564710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertEqual(int(-3.9), -3)
574710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertEqual(int(3.5), 3)
584710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertEqual(int(-3.5), -3)
594710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        # Different base:
604710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertEqual(int("10",16), 16L)
614710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        if have_unicode:
624710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm            self.assertEqual(int(unicode("10"),16), 16L)
634710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        # Test conversion from strings and various anomalies
644710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        for s, v in L:
654710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm            for sign in "", "+", "-":
664710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm                for prefix in "", " ", "\t", "  \t\t  ":
674710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm                    ss = prefix + sign + s
684710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm                    vv = v
694710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm                    if sign == "-" and v is not ValueError:
704710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm                        vv = -v
714710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm                    try:
724710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm                        self.assertEqual(int(ss), vv)
734710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm                    except v:
744710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm                        pass
754710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm
764710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        s = repr(-1-sys.maxint)
774710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        x = int(s)
784710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertEqual(x+1, -sys.maxint)
794710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertIsInstance(x, int)
804710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        # should return long
814710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertEqual(int(s[1:]), sys.maxint+1)
824710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm
834710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        # should return long
844710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        x = int(1e100)
854710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertIsInstance(x, long)
864710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        x = int(-1e100)
874710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertIsInstance(x, long)
884710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm
894710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm
904710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        # SF bug 434186:  0x80000000/2 != 0x80000000>>1.
914710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        # Worked by accident in Windows release build, but failed in debug build.
924710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        # Failed in all Linux builds.
934710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        x = -1-sys.maxint
944710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertEqual(x >> 1, x//2)
954710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm
964710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertRaises(ValueError, int, '123\0')
974710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertRaises(ValueError, int, '53', 40)
984710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm
994710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        # SF bug 1545497: embedded NULs were not detected with
1004710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        # explicit base
1014710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertRaises(ValueError, int, '123\0', 10)
1024710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertRaises(ValueError, int, '123\x00 245', 20)
1034710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm
1044710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        x = int('1' * 600)
1054710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertIsInstance(x, long)
1064710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm
1074710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        if have_unicode:
1084710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm            x = int(unichr(0x661) * 600)
1094710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm            self.assertIsInstance(x, long)
1104710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm
1114710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertRaises(TypeError, int, 1, 12)
1124710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm
1134710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertEqual(int('0123', 0), 83)
1144710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertEqual(int('0x123', 16), 291)
1154710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm
1164710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        # Bug 1679: "0x" is not a valid hex literal
1174710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertRaises(ValueError, int, "0x", 16)
1184710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertRaises(ValueError, int, "0x", 0)
1194710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm
1204710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertRaises(ValueError, int, "0o", 8)
1214710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertRaises(ValueError, int, "0o", 0)
1224710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm
1234710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertRaises(ValueError, int, "0b", 2)
1244710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertRaises(ValueError, int, "0b", 0)
1254710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm
1264710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm
1274710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        # SF bug 1334662: int(string, base) wrong answers
1284710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        # Various representations of 2**32 evaluated to 0
1294710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        # rather than 2**32 in previous versions
1304710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm
1314710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertEqual(int('100000000000000000000000000000000', 2), 4294967296L)
1324710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertEqual(int('102002022201221111211', 3), 4294967296L)
1334710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertEqual(int('10000000000000000', 4), 4294967296L)
1344710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertEqual(int('32244002423141', 5), 4294967296L)
1354710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertEqual(int('1550104015504', 6), 4294967296L)
1364710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertEqual(int('211301422354', 7), 4294967296L)
1374710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertEqual(int('40000000000', 8), 4294967296L)
1384710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertEqual(int('12068657454', 9), 4294967296L)
1394710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertEqual(int('4294967296', 10), 4294967296L)
1404710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertEqual(int('1904440554', 11), 4294967296L)
1414710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertEqual(int('9ba461594', 12), 4294967296L)
1424710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertEqual(int('535a79889', 13), 4294967296L)
1434710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertEqual(int('2ca5b7464', 14), 4294967296L)
1444710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertEqual(int('1a20dcd81', 15), 4294967296L)
1454710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertEqual(int('100000000', 16), 4294967296L)
1464710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertEqual(int('a7ffda91', 17), 4294967296L)
1474710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertEqual(int('704he7g4', 18), 4294967296L)
1484710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertEqual(int('4f5aff66', 19), 4294967296L)
1494710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertEqual(int('3723ai4g', 20), 4294967296L)
1504710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertEqual(int('281d55i4', 21), 4294967296L)
1514710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertEqual(int('1fj8b184', 22), 4294967296L)
1524710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertEqual(int('1606k7ic', 23), 4294967296L)
1534710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertEqual(int('mb994ag', 24), 4294967296L)
1544710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertEqual(int('hek2mgl', 25), 4294967296L)
1554710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertEqual(int('dnchbnm', 26), 4294967296L)
1564710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertEqual(int('b28jpdm', 27), 4294967296L)
1574710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertEqual(int('8pfgih4', 28), 4294967296L)
1584710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertEqual(int('76beigg', 29), 4294967296L)
1594710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertEqual(int('5qmcpqg', 30), 4294967296L)
1604710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertEqual(int('4q0jto4', 31), 4294967296L)
1614710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertEqual(int('4000000', 32), 4294967296L)
1624710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertEqual(int('3aokq94', 33), 4294967296L)
1634710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertEqual(int('2qhxjli', 34), 4294967296L)
1644710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertEqual(int('2br45qb', 35), 4294967296L)
1654710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertEqual(int('1z141z4', 36), 4294967296L)
1664710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm
1674710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        # tests with base 0
1684710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        # this fails on 3.0, but in 2.x the old octal syntax is allowed
1694710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertEqual(int(' 0123  ', 0), 83)
1704710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertEqual(int(' 0123  ', 0), 83)
1714710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertEqual(int('000', 0), 0)
1724710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertEqual(int('0o123', 0), 83)
1734710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertEqual(int('0x123', 0), 291)
1744710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertEqual(int('0b100', 0), 4)
1754710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertEqual(int(' 0O123   ', 0), 83)
1764710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertEqual(int(' 0X123  ', 0), 291)
1774710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertEqual(int(' 0B100 ', 0), 4)
1784710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertEqual(int('0', 0), 0)
1794710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertEqual(int('+0', 0), 0)
1804710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertEqual(int('-0', 0), 0)
1814710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertEqual(int('00', 0), 0)
1824710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertRaises(ValueError, int, '08', 0)
1834710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertRaises(ValueError, int, '-012395', 0)
1844710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm
1854710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        # without base still base 10
1864710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertEqual(int('0123'), 123)
1874710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertEqual(int('0123', 10), 123)
1884710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm
1894710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        # tests with prefix and base != 0
1904710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertEqual(int('0x123', 16), 291)
1914710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertEqual(int('0o123', 8), 83)
1924710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertEqual(int('0b100', 2), 4)
1934710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertEqual(int('0X123', 16), 291)
1944710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertEqual(int('0O123', 8), 83)
1954710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertEqual(int('0B100', 2), 4)
1964710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm
1974710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        # the code has special checks for the first character after the
1984710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        #  type prefix
1994710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertRaises(ValueError, int, '0b2', 2)
2004710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertRaises(ValueError, int, '0b02', 2)
2014710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertRaises(ValueError, int, '0B2', 2)
2024710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertRaises(ValueError, int, '0B02', 2)
2034710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertRaises(ValueError, int, '0o8', 8)
2044710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertRaises(ValueError, int, '0o08', 8)
2054710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertRaises(ValueError, int, '0O8', 8)
2064710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertRaises(ValueError, int, '0O08', 8)
2074710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertRaises(ValueError, int, '0xg', 16)
2084710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertRaises(ValueError, int, '0x0g', 16)
2094710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertRaises(ValueError, int, '0Xg', 16)
2104710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertRaises(ValueError, int, '0X0g', 16)
2114710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm
2124710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        # SF bug 1334662: int(string, base) wrong answers
2134710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        # Checks for proper evaluation of 2**32 + 1
2144710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertEqual(int('100000000000000000000000000000001', 2), 4294967297L)
2154710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertEqual(int('102002022201221111212', 3), 4294967297L)
2164710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertEqual(int('10000000000000001', 4), 4294967297L)
2174710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertEqual(int('32244002423142', 5), 4294967297L)
2184710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertEqual(int('1550104015505', 6), 4294967297L)
2194710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertEqual(int('211301422355', 7), 4294967297L)
2204710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertEqual(int('40000000001', 8), 4294967297L)
2214710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertEqual(int('12068657455', 9), 4294967297L)
2224710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertEqual(int('4294967297', 10), 4294967297L)
2234710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertEqual(int('1904440555', 11), 4294967297L)
2244710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertEqual(int('9ba461595', 12), 4294967297L)
2254710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertEqual(int('535a7988a', 13), 4294967297L)
2264710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertEqual(int('2ca5b7465', 14), 4294967297L)
2274710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertEqual(int('1a20dcd82', 15), 4294967297L)
2284710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertEqual(int('100000001', 16), 4294967297L)
2294710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertEqual(int('a7ffda92', 17), 4294967297L)
2304710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertEqual(int('704he7g5', 18), 4294967297L)
2314710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertEqual(int('4f5aff67', 19), 4294967297L)
2324710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertEqual(int('3723ai4h', 20), 4294967297L)
2334710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertEqual(int('281d55i5', 21), 4294967297L)
2344710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertEqual(int('1fj8b185', 22), 4294967297L)
2354710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertEqual(int('1606k7id', 23), 4294967297L)
2364710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertEqual(int('mb994ah', 24), 4294967297L)
2374710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertEqual(int('hek2mgm', 25), 4294967297L)
2384710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertEqual(int('dnchbnn', 26), 4294967297L)
2394710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertEqual(int('b28jpdn', 27), 4294967297L)
2404710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertEqual(int('8pfgih5', 28), 4294967297L)
2414710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertEqual(int('76beigh', 29), 4294967297L)
2424710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertEqual(int('5qmcpqh', 30), 4294967297L)
2434710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertEqual(int('4q0jto5', 31), 4294967297L)
2444710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertEqual(int('4000001', 32), 4294967297L)
2454710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertEqual(int('3aokq95', 33), 4294967297L)
2464710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertEqual(int('2qhxjlj', 34), 4294967297L)
2474710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertEqual(int('2br45qc', 35), 4294967297L)
2484710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertEqual(int('1z141z5', 36), 4294967297L)
2494710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm
2504710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm    def test_bit_length(self):
2514710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        tiny = 1e-10
2524710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        for x in xrange(-65000, 65000):
2534710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm            k = x.bit_length()
2544710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm            # Check equivalence with Python version
2554710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm            self.assertEqual(k, len(bin(x).lstrip('-0b')))
2564710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm            # Behaviour as specified in the docs
2574710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm            if x != 0:
2584710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm                self.assertTrue(2**(k-1) <= abs(x) < 2**k)
2594710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm            else:
2604710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm                self.assertEqual(k, 0)
2614710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm            # Alternative definition: x.bit_length() == 1 + floor(log_2(x))
2624710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm            if x != 0:
2634710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm                # When x is an exact power of 2, numeric errors can
2644710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm                # cause floor(log(x)/log(2)) to be one too small; for
2654710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm                # small x this can be fixed by adding a small quantity
2664710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm                # to the quotient before taking the floor.
2674710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm                self.assertEqual(k, 1 + math.floor(
2684710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm                        math.log(abs(x))/math.log(2) + tiny))
2694710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm
2704710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertEqual((0).bit_length(), 0)
2714710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertEqual((1).bit_length(), 1)
2724710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertEqual((-1).bit_length(), 1)
2734710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertEqual((2).bit_length(), 2)
2744710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertEqual((-2).bit_length(), 2)
2754710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        for i in [2, 3, 15, 16, 17, 31, 32, 33, 63, 64]:
2764710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm            a = 2**i
2774710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm            self.assertEqual((a-1).bit_length(), i)
2784710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm            self.assertEqual((1-a).bit_length(), i)
2794710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm            self.assertEqual((a).bit_length(), i+1)
2804710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm            self.assertEqual((-a).bit_length(), i+1)
2814710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm            self.assertEqual((a+1).bit_length(), i+1)
2824710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm            self.assertEqual((-a-1).bit_length(), i+1)
2834710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm
2844710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm    @unittest.skipUnless(float.__getformat__("double").startswith("IEEE"),
2854710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm                         "test requires IEEE 754 doubles")
2864710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm    def test_float_conversion(self):
2874710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        # values exactly representable as floats
2884710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        exact_values = [-2, -1, 0, 1, 2, 2**52, 2**53-1, 2**53, 2**53+2,
2894710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm                         2**53+4, 2**54-4, 2**54-2, 2**63, -2**63, 2**64,
2904710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm                         -2**64, 10**20, 10**21, 10**22]
2914710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        for value in exact_values:
2924710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm            self.assertEqual(int(float(int(value))), value)
2934710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm
2944710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        # test round-half-to-even
2954710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertEqual(int(float(2**53+1)), 2**53)
2964710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertEqual(int(float(2**53+2)), 2**53+2)
2974710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertEqual(int(float(2**53+3)), 2**53+4)
2984710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertEqual(int(float(2**53+5)), 2**53+4)
2994710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertEqual(int(float(2**53+6)), 2**53+6)
3004710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertEqual(int(float(2**53+7)), 2**53+8)
3014710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm
3024710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertEqual(int(float(-2**53-1)), -2**53)
3034710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertEqual(int(float(-2**53-2)), -2**53-2)
3044710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertEqual(int(float(-2**53-3)), -2**53-4)
3054710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertEqual(int(float(-2**53-5)), -2**53-4)
3064710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertEqual(int(float(-2**53-6)), -2**53-6)
3074710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertEqual(int(float(-2**53-7)), -2**53-8)
3084710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm
3094710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertEqual(int(float(2**54-2)), 2**54-2)
3104710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertEqual(int(float(2**54-1)), 2**54)
3114710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertEqual(int(float(2**54+2)), 2**54)
3124710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertEqual(int(float(2**54+3)), 2**54+4)
3134710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertEqual(int(float(2**54+5)), 2**54+4)
3144710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertEqual(int(float(2**54+6)), 2**54+8)
3154710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertEqual(int(float(2**54+10)), 2**54+8)
3164710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertEqual(int(float(2**54+11)), 2**54+12)
3174710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm
3184710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm    def test_intconversion(self):
3194710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        # Test __int__()
3204710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        class ClassicMissingMethods:
3214710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm            pass
3224710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertRaises(AttributeError, int, ClassicMissingMethods())
3234710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm
3244710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        class MissingMethods(object):
3254710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm            pass
3264710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertRaises(TypeError, int, MissingMethods())
3274710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm
3284710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        class Foo0:
3294710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm            def __int__(self):
3304710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm                return 42
3314710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm
3324710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        class Foo1(object):
3334710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm            def __int__(self):
3344710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm                return 42
3354710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm
3364710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        class Foo2(int):
3374710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm            def __int__(self):
3384710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm                return 42
3394710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm
3404710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        class Foo3(int):
3414710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm            def __int__(self):
3424710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm                return self
3434710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm
3444710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        class Foo4(int):
3454710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm            def __int__(self):
3464710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm                return 42L
3474710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm
3484710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        class Foo5(int):
3494710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm            def __int__(self):
3504710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm                return 42.
3514710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm
3524710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertEqual(int(Foo0()), 42)
3534710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertEqual(int(Foo1()), 42)
3544710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertEqual(int(Foo2()), 42)
3554710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertEqual(int(Foo3()), 0)
3564710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertEqual(int(Foo4()), 42L)
3574710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertRaises(TypeError, int, Foo5())
3584710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm
3594710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        class Classic:
3604710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm            pass
3614710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        for base in (object, Classic):
3624710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm            class IntOverridesTrunc(base):
3634710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm                def __int__(self):
3644710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm                    return 42
3654710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm                def __trunc__(self):
3664710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm                    return -12
3674710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm            self.assertEqual(int(IntOverridesTrunc()), 42)
3684710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm
3694710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm            class JustTrunc(base):
3704710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm                def __trunc__(self):
3714710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm                    return 42
3724710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm            self.assertEqual(int(JustTrunc()), 42)
3734710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm
3744710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm            for trunc_result_base in (object, Classic):
3754710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm                class Integral(trunc_result_base):
3764710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm                    def __int__(self):
3774710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm                        return 42
3784710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm
3794710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm                class TruncReturnsNonInt(base):
3804710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm                    def __trunc__(self):
3814710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm                        return Integral()
3824710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm                self.assertEqual(int(TruncReturnsNonInt()), 42)
3834710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm
3844710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm                class NonIntegral(trunc_result_base):
3854710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm                    def __trunc__(self):
3864710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm                        # Check that we avoid infinite recursion.
3874710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm                        return NonIntegral()
3884710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm
3894710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm                class TruncReturnsNonIntegral(base):
3904710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm                    def __trunc__(self):
3914710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm                        return NonIntegral()
3924710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm                try:
3934710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm                    int(TruncReturnsNonIntegral())
3944710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm                except TypeError as e:
3954710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm                    self.assertEqual(str(e),
3964710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm                                      "__trunc__ returned non-Integral"
3974710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm                                      " (type NonIntegral)")
3984710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm                else:
3994710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm                    self.fail("Failed to raise TypeError with %s" %
4004710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm                              ((base, trunc_result_base),))
4014710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm
4024710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmdef test_main():
4034710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm    run_unittest(IntTestCases)
4044710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm
4054710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmif __name__ == "__main__":
4064710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm    test_main()
407