1979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Petersonimport sys 2979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson 3979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Petersonimport unittest 4cddcafaf6b11f4da66fdccba20a777ccb55b800bAndrew Svetlovfrom test import test_support 5979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Petersonfrom test.test_support import run_unittest, have_unicode 61a707981c8b57e5ca7c5b8aa38d3e5e6ca235dbfMark Dickinsonimport math 7979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson 8979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin PetersonL = [ 9979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson ('0', 0), 10979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson ('1', 1), 11979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson ('9', 9), 12979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson ('10', 10), 13979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson ('99', 99), 14979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson ('100', 100), 15979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson ('314', 314), 16979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson (' 314', 314), 17979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson ('314 ', 314), 18979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson (' \t\t 314 \t\t ', 314), 19979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson (repr(sys.maxint), sys.maxint), 20979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson (' 1x', ValueError), 21979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson (' 1 ', 1), 22979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson (' 1\02 ', ValueError), 23979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson ('', ValueError), 24979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson (' ', ValueError), 25979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson (' \t\t ', ValueError) 26979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson] 27979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Petersonif have_unicode: 28979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson L += [ 29979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson (unicode('0'), 0), 30979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson (unicode('1'), 1), 31979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson (unicode('9'), 9), 32979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson (unicode('10'), 10), 33979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson (unicode('99'), 99), 34979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson (unicode('100'), 100), 35979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson (unicode('314'), 314), 36979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson (unicode(' 314'), 314), 37979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson (unicode('\u0663\u0661\u0664 ','raw-unicode-escape'), 314), 38979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson (unicode(' \t\t 314 \t\t '), 314), 39979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson (unicode(' 1x'), ValueError), 40979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson (unicode(' 1 '), 1), 41979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson (unicode(' 1\02 '), ValueError), 42979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson (unicode(''), ValueError), 43979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson (unicode(' '), ValueError), 44979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson (unicode(' \t\t '), ValueError), 45979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson (unichr(0x200), ValueError), 46979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson] 47979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson 488d30ad7c8ad5df59be8a65c8f8dab0d13be00dabSerhiy Storchakaclass IntSubclass(int): 498d30ad7c8ad5df59be8a65c8f8dab0d13be00dabSerhiy Storchaka pass 508d30ad7c8ad5df59be8a65c8f8dab0d13be00dabSerhiy Storchaka 516f70fe804690bbfea9caefe1ba01029aa1abf0ebChris Jerdonekclass IntLongCommonTests(object): 526f70fe804690bbfea9caefe1ba01029aa1abf0ebChris Jerdonek 536f70fe804690bbfea9caefe1ba01029aa1abf0ebChris Jerdonek """Mixin of test cases to share between both test_int and test_long.""" 546f70fe804690bbfea9caefe1ba01029aa1abf0ebChris Jerdonek 556f70fe804690bbfea9caefe1ba01029aa1abf0ebChris Jerdonek # Change to int or long in the TestCase subclass. 566f70fe804690bbfea9caefe1ba01029aa1abf0ebChris Jerdonek ntype = None 576f70fe804690bbfea9caefe1ba01029aa1abf0ebChris Jerdonek 586f70fe804690bbfea9caefe1ba01029aa1abf0ebChris Jerdonek def test_no_args(self): 596f70fe804690bbfea9caefe1ba01029aa1abf0ebChris Jerdonek self.assertEqual(self.ntype(), 0) 606f70fe804690bbfea9caefe1ba01029aa1abf0ebChris Jerdonek 616f70fe804690bbfea9caefe1ba01029aa1abf0ebChris Jerdonek def test_keyword_args(self): 626f70fe804690bbfea9caefe1ba01029aa1abf0ebChris Jerdonek # Test invoking constructor using keyword arguments. 636f70fe804690bbfea9caefe1ba01029aa1abf0ebChris Jerdonek self.assertEqual(self.ntype(x=1.2), 1) 646f70fe804690bbfea9caefe1ba01029aa1abf0ebChris Jerdonek self.assertEqual(self.ntype('100', base=2), 4) 656f70fe804690bbfea9caefe1ba01029aa1abf0ebChris Jerdonek self.assertEqual(self.ntype(x='100', base=2), 4) 66cf095f8e0f0ed1111995a5b8a8a5ebdb189683f2Serhiy Storchaka self.assertRaises(TypeError, self.ntype, base=10) 67cf095f8e0f0ed1111995a5b8a8a5ebdb189683f2Serhiy Storchaka self.assertRaises(TypeError, self.ntype, base=0) 686f70fe804690bbfea9caefe1ba01029aa1abf0ebChris Jerdonek 696f70fe804690bbfea9caefe1ba01029aa1abf0ebChris Jerdonekclass IntTestCases(IntLongCommonTests, unittest.TestCase): 706f70fe804690bbfea9caefe1ba01029aa1abf0ebChris Jerdonek 716f70fe804690bbfea9caefe1ba01029aa1abf0ebChris Jerdonek ntype = int 72979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson 73979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson def test_basic(self): 74979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson self.assertEqual(int(314), 314) 75979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson self.assertEqual(int(3.14), 3) 76979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson self.assertEqual(int(314L), 314) 77979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson # Check that conversion from float truncates towards zero 78979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson self.assertEqual(int(-3.14), -3) 79979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson self.assertEqual(int(3.9), 3) 80979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson self.assertEqual(int(-3.9), -3) 81979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson self.assertEqual(int(3.5), 3) 82979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson self.assertEqual(int(-3.5), -3) 83979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson # Different base: 84979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson self.assertEqual(int("10",16), 16L) 85979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson if have_unicode: 86979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson self.assertEqual(int(unicode("10"),16), 16L) 87979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson # Test conversion from strings and various anomalies 88979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson for s, v in L: 89979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson for sign in "", "+", "-": 90979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson for prefix in "", " ", "\t", " \t\t ": 91979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson ss = prefix + sign + s 92979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson vv = v 93979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson if sign == "-" and v is not ValueError: 94979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson vv = -v 95979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson try: 96979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson self.assertEqual(int(ss), vv) 97979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson except v: 98979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson pass 99979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson 100979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson s = repr(-1-sys.maxint) 101979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson x = int(s) 102979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson self.assertEqual(x+1, -sys.maxint) 103b0f5adc3f4e098b1744eeac65fc830fb1df2b8abEzio Melotti self.assertIsInstance(x, int) 104979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson # should return long 105979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson self.assertEqual(int(s[1:]), sys.maxint+1) 106979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson 107979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson # should return long 108979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson x = int(1e100) 109b0f5adc3f4e098b1744eeac65fc830fb1df2b8abEzio Melotti self.assertIsInstance(x, long) 110979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson x = int(-1e100) 111b0f5adc3f4e098b1744eeac65fc830fb1df2b8abEzio Melotti self.assertIsInstance(x, long) 112979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson 113979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson 114979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson # SF bug 434186: 0x80000000/2 != 0x80000000>>1. 115979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson # Worked by accident in Windows release build, but failed in debug build. 116979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson # Failed in all Linux builds. 117979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson x = -1-sys.maxint 118979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson self.assertEqual(x >> 1, x//2) 119979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson 120979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson self.assertRaises(ValueError, int, '123\0') 121979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson self.assertRaises(ValueError, int, '53', 40) 122979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson 123979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson # SF bug 1545497: embedded NULs were not detected with 124979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson # explicit base 125979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson self.assertRaises(ValueError, int, '123\0', 10) 126979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson self.assertRaises(ValueError, int, '123\x00 245', 20) 127979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson 128979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson x = int('1' * 600) 129b0f5adc3f4e098b1744eeac65fc830fb1df2b8abEzio Melotti self.assertIsInstance(x, long) 130979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson 131979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson if have_unicode: 132979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson x = int(unichr(0x661) * 600) 133b0f5adc3f4e098b1744eeac65fc830fb1df2b8abEzio Melotti self.assertIsInstance(x, long) 134979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson 135979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson self.assertRaises(TypeError, int, 1, 12) 136979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson 137979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson self.assertEqual(int('0123', 0), 83) 138979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson self.assertEqual(int('0x123', 16), 291) 139979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson 140979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson # Bug 1679: "0x" is not a valid hex literal 141979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson self.assertRaises(ValueError, int, "0x", 16) 142979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson self.assertRaises(ValueError, int, "0x", 0) 143979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson 144979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson self.assertRaises(ValueError, int, "0o", 8) 145979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson self.assertRaises(ValueError, int, "0o", 0) 146979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson 147979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson self.assertRaises(ValueError, int, "0b", 2) 148979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson self.assertRaises(ValueError, int, "0b", 0) 149979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson 150979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson 151979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson # SF bug 1334662: int(string, base) wrong answers 152979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson # Various representations of 2**32 evaluated to 0 153979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson # rather than 2**32 in previous versions 154979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson 155979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson self.assertEqual(int('100000000000000000000000000000000', 2), 4294967296L) 156979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson self.assertEqual(int('102002022201221111211', 3), 4294967296L) 157979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson self.assertEqual(int('10000000000000000', 4), 4294967296L) 158979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson self.assertEqual(int('32244002423141', 5), 4294967296L) 159979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson self.assertEqual(int('1550104015504', 6), 4294967296L) 160979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson self.assertEqual(int('211301422354', 7), 4294967296L) 161979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson self.assertEqual(int('40000000000', 8), 4294967296L) 162979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson self.assertEqual(int('12068657454', 9), 4294967296L) 163979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson self.assertEqual(int('4294967296', 10), 4294967296L) 164979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson self.assertEqual(int('1904440554', 11), 4294967296L) 165979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson self.assertEqual(int('9ba461594', 12), 4294967296L) 166979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson self.assertEqual(int('535a79889', 13), 4294967296L) 167979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson self.assertEqual(int('2ca5b7464', 14), 4294967296L) 168979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson self.assertEqual(int('1a20dcd81', 15), 4294967296L) 169979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson self.assertEqual(int('100000000', 16), 4294967296L) 170979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson self.assertEqual(int('a7ffda91', 17), 4294967296L) 171979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson self.assertEqual(int('704he7g4', 18), 4294967296L) 172979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson self.assertEqual(int('4f5aff66', 19), 4294967296L) 173979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson self.assertEqual(int('3723ai4g', 20), 4294967296L) 174979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson self.assertEqual(int('281d55i4', 21), 4294967296L) 175979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson self.assertEqual(int('1fj8b184', 22), 4294967296L) 176979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson self.assertEqual(int('1606k7ic', 23), 4294967296L) 177979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson self.assertEqual(int('mb994ag', 24), 4294967296L) 178979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson self.assertEqual(int('hek2mgl', 25), 4294967296L) 179979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson self.assertEqual(int('dnchbnm', 26), 4294967296L) 180979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson self.assertEqual(int('b28jpdm', 27), 4294967296L) 181979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson self.assertEqual(int('8pfgih4', 28), 4294967296L) 182979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson self.assertEqual(int('76beigg', 29), 4294967296L) 183979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson self.assertEqual(int('5qmcpqg', 30), 4294967296L) 184979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson self.assertEqual(int('4q0jto4', 31), 4294967296L) 185979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson self.assertEqual(int('4000000', 32), 4294967296L) 186979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson self.assertEqual(int('3aokq94', 33), 4294967296L) 187979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson self.assertEqual(int('2qhxjli', 34), 4294967296L) 188979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson self.assertEqual(int('2br45qb', 35), 4294967296L) 189979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson self.assertEqual(int('1z141z4', 36), 4294967296L) 190979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson 191979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson # tests with base 0 192979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson # this fails on 3.0, but in 2.x the old octal syntax is allowed 193979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson self.assertEqual(int(' 0123 ', 0), 83) 194979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson self.assertEqual(int(' 0123 ', 0), 83) 195979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson self.assertEqual(int('000', 0), 0) 196979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson self.assertEqual(int('0o123', 0), 83) 197979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson self.assertEqual(int('0x123', 0), 291) 198979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson self.assertEqual(int('0b100', 0), 4) 199979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson self.assertEqual(int(' 0O123 ', 0), 83) 200979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson self.assertEqual(int(' 0X123 ', 0), 291) 201979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson self.assertEqual(int(' 0B100 ', 0), 4) 202784a47f2c0fcdee61518407900baa1e08025182bMark Dickinson self.assertEqual(int('0', 0), 0) 203784a47f2c0fcdee61518407900baa1e08025182bMark Dickinson self.assertEqual(int('+0', 0), 0) 204784a47f2c0fcdee61518407900baa1e08025182bMark Dickinson self.assertEqual(int('-0', 0), 0) 205784a47f2c0fcdee61518407900baa1e08025182bMark Dickinson self.assertEqual(int('00', 0), 0) 206784a47f2c0fcdee61518407900baa1e08025182bMark Dickinson self.assertRaises(ValueError, int, '08', 0) 207784a47f2c0fcdee61518407900baa1e08025182bMark Dickinson self.assertRaises(ValueError, int, '-012395', 0) 208979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson 209979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson # without base still base 10 210979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson self.assertEqual(int('0123'), 123) 211979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson self.assertEqual(int('0123', 10), 123) 212979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson 213979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson # tests with prefix and base != 0 214979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson self.assertEqual(int('0x123', 16), 291) 215979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson self.assertEqual(int('0o123', 8), 83) 216979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson self.assertEqual(int('0b100', 2), 4) 217979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson self.assertEqual(int('0X123', 16), 291) 218979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson self.assertEqual(int('0O123', 8), 83) 219979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson self.assertEqual(int('0B100', 2), 4) 220979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson 221979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson # the code has special checks for the first character after the 222979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson # type prefix 223979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson self.assertRaises(ValueError, int, '0b2', 2) 224979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson self.assertRaises(ValueError, int, '0b02', 2) 225979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson self.assertRaises(ValueError, int, '0B2', 2) 226979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson self.assertRaises(ValueError, int, '0B02', 2) 227979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson self.assertRaises(ValueError, int, '0o8', 8) 228979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson self.assertRaises(ValueError, int, '0o08', 8) 229979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson self.assertRaises(ValueError, int, '0O8', 8) 230979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson self.assertRaises(ValueError, int, '0O08', 8) 231979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson self.assertRaises(ValueError, int, '0xg', 16) 232979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson self.assertRaises(ValueError, int, '0x0g', 16) 233979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson self.assertRaises(ValueError, int, '0Xg', 16) 234979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson self.assertRaises(ValueError, int, '0X0g', 16) 235979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson 236979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson # SF bug 1334662: int(string, base) wrong answers 237979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson # Checks for proper evaluation of 2**32 + 1 238979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson self.assertEqual(int('100000000000000000000000000000001', 2), 4294967297L) 239979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson self.assertEqual(int('102002022201221111212', 3), 4294967297L) 240979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson self.assertEqual(int('10000000000000001', 4), 4294967297L) 241979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson self.assertEqual(int('32244002423142', 5), 4294967297L) 242979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson self.assertEqual(int('1550104015505', 6), 4294967297L) 243979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson self.assertEqual(int('211301422355', 7), 4294967297L) 244979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson self.assertEqual(int('40000000001', 8), 4294967297L) 245979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson self.assertEqual(int('12068657455', 9), 4294967297L) 246979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson self.assertEqual(int('4294967297', 10), 4294967297L) 247979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson self.assertEqual(int('1904440555', 11), 4294967297L) 248979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson self.assertEqual(int('9ba461595', 12), 4294967297L) 249979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson self.assertEqual(int('535a7988a', 13), 4294967297L) 250979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson self.assertEqual(int('2ca5b7465', 14), 4294967297L) 251979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson self.assertEqual(int('1a20dcd82', 15), 4294967297L) 252979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson self.assertEqual(int('100000001', 16), 4294967297L) 253979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson self.assertEqual(int('a7ffda92', 17), 4294967297L) 254979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson self.assertEqual(int('704he7g5', 18), 4294967297L) 255979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson self.assertEqual(int('4f5aff67', 19), 4294967297L) 256979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson self.assertEqual(int('3723ai4h', 20), 4294967297L) 257979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson self.assertEqual(int('281d55i5', 21), 4294967297L) 258979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson self.assertEqual(int('1fj8b185', 22), 4294967297L) 259979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson self.assertEqual(int('1606k7id', 23), 4294967297L) 260979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson self.assertEqual(int('mb994ah', 24), 4294967297L) 261979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson self.assertEqual(int('hek2mgm', 25), 4294967297L) 262979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson self.assertEqual(int('dnchbnn', 26), 4294967297L) 263979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson self.assertEqual(int('b28jpdn', 27), 4294967297L) 264979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson self.assertEqual(int('8pfgih5', 28), 4294967297L) 265979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson self.assertEqual(int('76beigh', 29), 4294967297L) 266979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson self.assertEqual(int('5qmcpqh', 30), 4294967297L) 267979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson self.assertEqual(int('4q0jto5', 31), 4294967297L) 268979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson self.assertEqual(int('4000001', 32), 4294967297L) 269979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson self.assertEqual(int('3aokq95', 33), 4294967297L) 270979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson self.assertEqual(int('2qhxjlj', 34), 4294967297L) 271979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson self.assertEqual(int('2br45qc', 35), 4294967297L) 272979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson self.assertEqual(int('1z141z5', 36), 4294967297L) 273979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson 2741a707981c8b57e5ca7c5b8aa38d3e5e6ca235dbfMark Dickinson def test_bit_length(self): 2751a707981c8b57e5ca7c5b8aa38d3e5e6ca235dbfMark Dickinson tiny = 1e-10 2761a707981c8b57e5ca7c5b8aa38d3e5e6ca235dbfMark Dickinson for x in xrange(-65000, 65000): 2771a707981c8b57e5ca7c5b8aa38d3e5e6ca235dbfMark Dickinson k = x.bit_length() 2781a707981c8b57e5ca7c5b8aa38d3e5e6ca235dbfMark Dickinson # Check equivalence with Python version 2791a707981c8b57e5ca7c5b8aa38d3e5e6ca235dbfMark Dickinson self.assertEqual(k, len(bin(x).lstrip('-0b'))) 2801a707981c8b57e5ca7c5b8aa38d3e5e6ca235dbfMark Dickinson # Behaviour as specified in the docs 2811a707981c8b57e5ca7c5b8aa38d3e5e6ca235dbfMark Dickinson if x != 0: 2825c8da86f3a515ce1a6d5f27fd15e3c5f4d8e931eBenjamin Peterson self.assertTrue(2**(k-1) <= abs(x) < 2**k) 2831a707981c8b57e5ca7c5b8aa38d3e5e6ca235dbfMark Dickinson else: 2841a707981c8b57e5ca7c5b8aa38d3e5e6ca235dbfMark Dickinson self.assertEqual(k, 0) 2851a707981c8b57e5ca7c5b8aa38d3e5e6ca235dbfMark Dickinson # Alternative definition: x.bit_length() == 1 + floor(log_2(x)) 2861a707981c8b57e5ca7c5b8aa38d3e5e6ca235dbfMark Dickinson if x != 0: 2871a707981c8b57e5ca7c5b8aa38d3e5e6ca235dbfMark Dickinson # When x is an exact power of 2, numeric errors can 2881a707981c8b57e5ca7c5b8aa38d3e5e6ca235dbfMark Dickinson # cause floor(log(x)/log(2)) to be one too small; for 2891a707981c8b57e5ca7c5b8aa38d3e5e6ca235dbfMark Dickinson # small x this can be fixed by adding a small quantity 2901a707981c8b57e5ca7c5b8aa38d3e5e6ca235dbfMark Dickinson # to the quotient before taking the floor. 2911a707981c8b57e5ca7c5b8aa38d3e5e6ca235dbfMark Dickinson self.assertEqual(k, 1 + math.floor( 2921a707981c8b57e5ca7c5b8aa38d3e5e6ca235dbfMark Dickinson math.log(abs(x))/math.log(2) + tiny)) 2931a707981c8b57e5ca7c5b8aa38d3e5e6ca235dbfMark Dickinson 2941a707981c8b57e5ca7c5b8aa38d3e5e6ca235dbfMark Dickinson self.assertEqual((0).bit_length(), 0) 2951a707981c8b57e5ca7c5b8aa38d3e5e6ca235dbfMark Dickinson self.assertEqual((1).bit_length(), 1) 2961a707981c8b57e5ca7c5b8aa38d3e5e6ca235dbfMark Dickinson self.assertEqual((-1).bit_length(), 1) 2971a707981c8b57e5ca7c5b8aa38d3e5e6ca235dbfMark Dickinson self.assertEqual((2).bit_length(), 2) 2981a707981c8b57e5ca7c5b8aa38d3e5e6ca235dbfMark Dickinson self.assertEqual((-2).bit_length(), 2) 2991a707981c8b57e5ca7c5b8aa38d3e5e6ca235dbfMark Dickinson for i in [2, 3, 15, 16, 17, 31, 32, 33, 63, 64]: 3001a707981c8b57e5ca7c5b8aa38d3e5e6ca235dbfMark Dickinson a = 2**i 3011a707981c8b57e5ca7c5b8aa38d3e5e6ca235dbfMark Dickinson self.assertEqual((a-1).bit_length(), i) 3021a707981c8b57e5ca7c5b8aa38d3e5e6ca235dbfMark Dickinson self.assertEqual((1-a).bit_length(), i) 3031a707981c8b57e5ca7c5b8aa38d3e5e6ca235dbfMark Dickinson self.assertEqual((a).bit_length(), i+1) 3041a707981c8b57e5ca7c5b8aa38d3e5e6ca235dbfMark Dickinson self.assertEqual((-a).bit_length(), i+1) 3051a707981c8b57e5ca7c5b8aa38d3e5e6ca235dbfMark Dickinson self.assertEqual((a+1).bit_length(), i+1) 3061a707981c8b57e5ca7c5b8aa38d3e5e6ca235dbfMark Dickinson self.assertEqual((-a-1).bit_length(), i+1) 3071a707981c8b57e5ca7c5b8aa38d3e5e6ca235dbfMark Dickinson 3086736cf8d20b67b74e8e959622132963285156242Mark Dickinson @unittest.skipUnless(float.__getformat__("double").startswith("IEEE"), 3096736cf8d20b67b74e8e959622132963285156242Mark Dickinson "test requires IEEE 754 doubles") 3106736cf8d20b67b74e8e959622132963285156242Mark Dickinson def test_float_conversion(self): 3116736cf8d20b67b74e8e959622132963285156242Mark Dickinson # values exactly representable as floats 3126736cf8d20b67b74e8e959622132963285156242Mark Dickinson exact_values = [-2, -1, 0, 1, 2, 2**52, 2**53-1, 2**53, 2**53+2, 3136736cf8d20b67b74e8e959622132963285156242Mark Dickinson 2**53+4, 2**54-4, 2**54-2, 2**63, -2**63, 2**64, 3146736cf8d20b67b74e8e959622132963285156242Mark Dickinson -2**64, 10**20, 10**21, 10**22] 3156736cf8d20b67b74e8e959622132963285156242Mark Dickinson for value in exact_values: 3166736cf8d20b67b74e8e959622132963285156242Mark Dickinson self.assertEqual(int(float(int(value))), value) 3176736cf8d20b67b74e8e959622132963285156242Mark Dickinson 3186736cf8d20b67b74e8e959622132963285156242Mark Dickinson # test round-half-to-even 3196736cf8d20b67b74e8e959622132963285156242Mark Dickinson self.assertEqual(int(float(2**53+1)), 2**53) 3206736cf8d20b67b74e8e959622132963285156242Mark Dickinson self.assertEqual(int(float(2**53+2)), 2**53+2) 3216736cf8d20b67b74e8e959622132963285156242Mark Dickinson self.assertEqual(int(float(2**53+3)), 2**53+4) 3226736cf8d20b67b74e8e959622132963285156242Mark Dickinson self.assertEqual(int(float(2**53+5)), 2**53+4) 3236736cf8d20b67b74e8e959622132963285156242Mark Dickinson self.assertEqual(int(float(2**53+6)), 2**53+6) 3246736cf8d20b67b74e8e959622132963285156242Mark Dickinson self.assertEqual(int(float(2**53+7)), 2**53+8) 3256736cf8d20b67b74e8e959622132963285156242Mark Dickinson 3266736cf8d20b67b74e8e959622132963285156242Mark Dickinson self.assertEqual(int(float(-2**53-1)), -2**53) 3276736cf8d20b67b74e8e959622132963285156242Mark Dickinson self.assertEqual(int(float(-2**53-2)), -2**53-2) 3286736cf8d20b67b74e8e959622132963285156242Mark Dickinson self.assertEqual(int(float(-2**53-3)), -2**53-4) 3296736cf8d20b67b74e8e959622132963285156242Mark Dickinson self.assertEqual(int(float(-2**53-5)), -2**53-4) 3306736cf8d20b67b74e8e959622132963285156242Mark Dickinson self.assertEqual(int(float(-2**53-6)), -2**53-6) 3316736cf8d20b67b74e8e959622132963285156242Mark Dickinson self.assertEqual(int(float(-2**53-7)), -2**53-8) 3326736cf8d20b67b74e8e959622132963285156242Mark Dickinson 3336736cf8d20b67b74e8e959622132963285156242Mark Dickinson self.assertEqual(int(float(2**54-2)), 2**54-2) 3346736cf8d20b67b74e8e959622132963285156242Mark Dickinson self.assertEqual(int(float(2**54-1)), 2**54) 3356736cf8d20b67b74e8e959622132963285156242Mark Dickinson self.assertEqual(int(float(2**54+2)), 2**54) 3366736cf8d20b67b74e8e959622132963285156242Mark Dickinson self.assertEqual(int(float(2**54+3)), 2**54+4) 3376736cf8d20b67b74e8e959622132963285156242Mark Dickinson self.assertEqual(int(float(2**54+5)), 2**54+4) 3386736cf8d20b67b74e8e959622132963285156242Mark Dickinson self.assertEqual(int(float(2**54+6)), 2**54+8) 3396736cf8d20b67b74e8e959622132963285156242Mark Dickinson self.assertEqual(int(float(2**54+10)), 2**54+8) 3406736cf8d20b67b74e8e959622132963285156242Mark Dickinson self.assertEqual(int(float(2**54+11)), 2**54+12) 3416736cf8d20b67b74e8e959622132963285156242Mark Dickinson 342cddcafaf6b11f4da66fdccba20a777ccb55b800bAndrew Svetlov def test_valid_non_numeric_input_types_for_x(self): 343cddcafaf6b11f4da66fdccba20a777ccb55b800bAndrew Svetlov # Test possible valid non-numeric types for x, including subclasses 344cddcafaf6b11f4da66fdccba20a777ccb55b800bAndrew Svetlov # of the allowed built-in types. 345cddcafaf6b11f4da66fdccba20a777ccb55b800bAndrew Svetlov class CustomStr(str): pass 3466156560e4b40ae81304d80b5a932fd90e6b4ba80Serhiy Storchaka class CustomByteArray(bytearray): pass 3476156560e4b40ae81304d80b5a932fd90e6b4ba80Serhiy Storchaka factories = [str, bytearray, CustomStr, CustomByteArray, buffer] 348cddcafaf6b11f4da66fdccba20a777ccb55b800bAndrew Svetlov 349cddcafaf6b11f4da66fdccba20a777ccb55b800bAndrew Svetlov if have_unicode: 350cddcafaf6b11f4da66fdccba20a777ccb55b800bAndrew Svetlov class CustomUnicode(unicode): pass 3516156560e4b40ae81304d80b5a932fd90e6b4ba80Serhiy Storchaka factories += [unicode, CustomUnicode] 352cddcafaf6b11f4da66fdccba20a777ccb55b800bAndrew Svetlov 3536156560e4b40ae81304d80b5a932fd90e6b4ba80Serhiy Storchaka for f in factories: 35443e9007767618aac7d6c30228518ae375ebb3008Serhiy Storchaka with test_support.check_py3k_warnings(quiet=True): 35543e9007767618aac7d6c30228518ae375ebb3008Serhiy Storchaka x = f('100') 356cddcafaf6b11f4da66fdccba20a777ccb55b800bAndrew Svetlov msg = 'x has value %s and type %s' % (x, type(x).__name__) 357cddcafaf6b11f4da66fdccba20a777ccb55b800bAndrew Svetlov try: 3588876145fabec7924981f36019f0c2e45f73fbad2Serhiy Storchaka self.assertEqual(int(x), 100, msg=msg) 3596156560e4b40ae81304d80b5a932fd90e6b4ba80Serhiy Storchaka if isinstance(x, basestring): 3606156560e4b40ae81304d80b5a932fd90e6b4ba80Serhiy Storchaka self.assertEqual(int(x, 2), 4, msg=msg) 361cddcafaf6b11f4da66fdccba20a777ccb55b800bAndrew Svetlov except TypeError, err: 362cddcafaf6b11f4da66fdccba20a777ccb55b800bAndrew Svetlov raise AssertionError('For %s got TypeError: %s' % 363cddcafaf6b11f4da66fdccba20a777ccb55b800bAndrew Svetlov (type(x).__name__, err)) 3646156560e4b40ae81304d80b5a932fd90e6b4ba80Serhiy Storchaka if not isinstance(x, basestring): 3656156560e4b40ae81304d80b5a932fd90e6b4ba80Serhiy Storchaka errmsg = "can't convert non-string" 3666156560e4b40ae81304d80b5a932fd90e6b4ba80Serhiy Storchaka with self.assertRaisesRegexp(TypeError, errmsg, msg=msg): 3676156560e4b40ae81304d80b5a932fd90e6b4ba80Serhiy Storchaka int(x, 2) 3686156560e4b40ae81304d80b5a932fd90e6b4ba80Serhiy Storchaka errmsg = 'invalid literal' 36943e9007767618aac7d6c30228518ae375ebb3008Serhiy Storchaka with self.assertRaisesRegexp(ValueError, errmsg, msg=msg), \ 37043e9007767618aac7d6c30228518ae375ebb3008Serhiy Storchaka test_support.check_py3k_warnings(quiet=True): 3716156560e4b40ae81304d80b5a932fd90e6b4ba80Serhiy Storchaka int(f('A' * 0x10)) 3726156560e4b40ae81304d80b5a932fd90e6b4ba80Serhiy Storchaka 3736156560e4b40ae81304d80b5a932fd90e6b4ba80Serhiy Storchaka def test_int_buffer(self): 37443e9007767618aac7d6c30228518ae375ebb3008Serhiy Storchaka with test_support.check_py3k_warnings(): 37543e9007767618aac7d6c30228518ae375ebb3008Serhiy Storchaka self.assertEqual(int(buffer('123', 1, 2)), 23) 37643e9007767618aac7d6c30228518ae375ebb3008Serhiy Storchaka self.assertEqual(int(buffer('123\x00', 1, 2)), 23) 37743e9007767618aac7d6c30228518ae375ebb3008Serhiy Storchaka self.assertEqual(int(buffer('123 ', 1, 2)), 23) 37843e9007767618aac7d6c30228518ae375ebb3008Serhiy Storchaka self.assertEqual(int(buffer('123A', 1, 2)), 23) 37943e9007767618aac7d6c30228518ae375ebb3008Serhiy Storchaka self.assertEqual(int(buffer('1234', 1, 2)), 23) 380cddcafaf6b11f4da66fdccba20a777ccb55b800bAndrew Svetlov 381cddcafaf6b11f4da66fdccba20a777ccb55b800bAndrew Svetlov def test_error_on_string_float_for_x(self): 382cddcafaf6b11f4da66fdccba20a777ccb55b800bAndrew Svetlov self.assertRaises(ValueError, int, '1.2') 383cddcafaf6b11f4da66fdccba20a777ccb55b800bAndrew Svetlov 384cddcafaf6b11f4da66fdccba20a777ccb55b800bAndrew Svetlov def test_error_on_bytearray_for_x(self): 385cddcafaf6b11f4da66fdccba20a777ccb55b800bAndrew Svetlov self.assertRaises(TypeError, int, bytearray('100'), 2) 386cddcafaf6b11f4da66fdccba20a777ccb55b800bAndrew Svetlov 387cddcafaf6b11f4da66fdccba20a777ccb55b800bAndrew Svetlov def test_error_on_invalid_int_bases(self): 388cddcafaf6b11f4da66fdccba20a777ccb55b800bAndrew Svetlov for base in [-1, 1, 1000]: 389cddcafaf6b11f4da66fdccba20a777ccb55b800bAndrew Svetlov self.assertRaises(ValueError, int, '100', base) 390cddcafaf6b11f4da66fdccba20a777ccb55b800bAndrew Svetlov 391cddcafaf6b11f4da66fdccba20a777ccb55b800bAndrew Svetlov def test_error_on_string_base(self): 392cddcafaf6b11f4da66fdccba20a777ccb55b800bAndrew Svetlov self.assertRaises(TypeError, int, 100, base='foo') 393cddcafaf6b11f4da66fdccba20a777ccb55b800bAndrew Svetlov 394270767b2ceb5452d052b280eb1b174d7a32d43f5Serhiy Storchaka @test_support.cpython_only 395270767b2ceb5452d052b280eb1b174d7a32d43f5Serhiy Storchaka def test_small_ints(self): 396c90be30b0de9089e3abef0f288caf4a693f81356Serhiy Storchaka self.assertIs(int('10'), 10) 397c90be30b0de9089e3abef0f288caf4a693f81356Serhiy Storchaka self.assertIs(int('-1'), -1) 398270767b2ceb5452d052b280eb1b174d7a32d43f5Serhiy Storchaka if have_unicode: 399c90be30b0de9089e3abef0f288caf4a693f81356Serhiy Storchaka self.assertIs(int(u'10'), 10) 400c90be30b0de9089e3abef0f288caf4a693f81356Serhiy Storchaka self.assertIs(int(u'-1'), -1) 401270767b2ceb5452d052b280eb1b174d7a32d43f5Serhiy Storchaka 402979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson def test_intconversion(self): 403979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson # Test __int__() 404979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson class ClassicMissingMethods: 405979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson pass 406979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson self.assertRaises(AttributeError, int, ClassicMissingMethods()) 407979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson 408979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson class MissingMethods(object): 409979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson pass 410979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson self.assertRaises(TypeError, int, MissingMethods()) 411979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson 412979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson class Foo0: 413979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson def __int__(self): 414979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson return 42 415979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson 416979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson class Foo1(object): 417979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson def __int__(self): 418979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson return 42 419979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson 420979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson class Foo2(int): 421979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson def __int__(self): 422979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson return 42 423979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson 424979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson class Foo3(int): 425979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson def __int__(self): 426979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson return self 427979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson 428979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson class Foo4(int): 429979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson def __int__(self): 430979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson return 42L 431979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson 432979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson class Foo5(int): 433979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson def __int__(self): 434979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson return 42. 435979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson 436979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson self.assertEqual(int(Foo0()), 42) 437979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson self.assertEqual(int(Foo1()), 42) 438979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson self.assertEqual(int(Foo2()), 42) 439979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson self.assertEqual(int(Foo3()), 0) 440979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson self.assertEqual(int(Foo4()), 42L) 441979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson self.assertRaises(TypeError, int, Foo5()) 442979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson 443979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson class Classic: 444979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson pass 445979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson for base in (object, Classic): 446979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson class IntOverridesTrunc(base): 447979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson def __int__(self): 448979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson return 42 449979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson def __trunc__(self): 450979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson return -12 451979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson self.assertEqual(int(IntOverridesTrunc()), 42) 452979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson 453979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson class JustTrunc(base): 454979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson def __trunc__(self): 455979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson return 42 456979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson self.assertEqual(int(JustTrunc()), 42) 457979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson 458979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson for trunc_result_base in (object, Classic): 459979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson class Integral(trunc_result_base): 460979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson def __int__(self): 461979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson return 42 462979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson 463979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson class TruncReturnsNonInt(base): 464979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson def __trunc__(self): 465979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson return Integral() 466979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson self.assertEqual(int(TruncReturnsNonInt()), 42) 467979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson 468979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson class NonIntegral(trunc_result_base): 469979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson def __trunc__(self): 470979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson # Check that we avoid infinite recursion. 471979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson return NonIntegral() 472979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson 473979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson class TruncReturnsNonIntegral(base): 474979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson def __trunc__(self): 475979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson return NonIntegral() 476979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson try: 477979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson int(TruncReturnsNonIntegral()) 478979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson except TypeError as e: 4792623a37852153363335956afab010cb0beb7e74eEzio Melotti self.assertEqual(str(e), 480979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson "__trunc__ returned non-Integral" 481979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson " (type NonIntegral)") 482979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson else: 483979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson self.fail("Failed to raise TypeError with %s" % 484979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson ((base, trunc_result_base),)) 485979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson 4868d30ad7c8ad5df59be8a65c8f8dab0d13be00dabSerhiy Storchaka class TruncReturnsIntSubclass(base): 4878d30ad7c8ad5df59be8a65c8f8dab0d13be00dabSerhiy Storchaka def __trunc__(self): 4888d30ad7c8ad5df59be8a65c8f8dab0d13be00dabSerhiy Storchaka return True 4898d30ad7c8ad5df59be8a65c8f8dab0d13be00dabSerhiy Storchaka good_int = TruncReturnsIntSubclass() 4908d30ad7c8ad5df59be8a65c8f8dab0d13be00dabSerhiy Storchaka n = int(good_int) 4918d30ad7c8ad5df59be8a65c8f8dab0d13be00dabSerhiy Storchaka self.assertEqual(n, 1) 4928d30ad7c8ad5df59be8a65c8f8dab0d13be00dabSerhiy Storchaka self.assertIs(type(n), bool) 4938d30ad7c8ad5df59be8a65c8f8dab0d13be00dabSerhiy Storchaka n = IntSubclass(good_int) 4948d30ad7c8ad5df59be8a65c8f8dab0d13be00dabSerhiy Storchaka self.assertEqual(n, 1) 4958d30ad7c8ad5df59be8a65c8f8dab0d13be00dabSerhiy Storchaka self.assertIs(type(n), IntSubclass) 4968d30ad7c8ad5df59be8a65c8f8dab0d13be00dabSerhiy Storchaka 4978d30ad7c8ad5df59be8a65c8f8dab0d13be00dabSerhiy Storchaka 498979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Petersondef test_main(): 499979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson run_unittest(IntTestCases) 500979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson 501979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Petersonif __name__ == "__main__": 502979395b7a8be422dfc9a081f1cd77260c6ea9aefBenjamin Peterson test_main() 503