1edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoepimport sys 2edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep 3edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoepimport unittest 4edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoepfrom test import test_support 5edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoepfrom test.test_support import run_unittest, have_unicode 6edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoepimport math 7edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep 8edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander StoepL = [ 9edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep ('0', 0), 10edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep ('1', 1), 11edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep ('9', 9), 12edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep ('10', 10), 13edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep ('99', 99), 14edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep ('100', 100), 15edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep ('314', 314), 16edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep (' 314', 314), 17edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep ('314 ', 314), 18edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep (' \t\t 314 \t\t ', 314), 19edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep (repr(sys.maxint), sys.maxint), 20edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep (' 1x', ValueError), 21edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep (' 1 ', 1), 22edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep (' 1\02 ', ValueError), 23edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep ('', ValueError), 24edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep (' ', ValueError), 25edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep (' \t\t ', ValueError) 26edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep] 27edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoepif have_unicode: 28edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep L += [ 29edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep (unicode('0'), 0), 30edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep (unicode('1'), 1), 31edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep (unicode('9'), 9), 32edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep (unicode('10'), 10), 33edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep (unicode('99'), 99), 34edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep (unicode('100'), 100), 35edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep (unicode('314'), 314), 36edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep (unicode(' 314'), 314), 37edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep (unicode('\u0663\u0661\u0664 ','raw-unicode-escape'), 314), 38edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep (unicode(' \t\t 314 \t\t '), 314), 39edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep (unicode(' 1x'), ValueError), 40edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep (unicode(' 1 '), 1), 41edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep (unicode(' 1\02 '), ValueError), 42edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep (unicode(''), ValueError), 43edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep (unicode(' '), ValueError), 44edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep (unicode(' \t\t '), ValueError), 45edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep (unichr(0x200), ValueError), 46edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep] 47edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep 48edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoepclass IntLongCommonTests(object): 49edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep 50edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep """Mixin of test cases to share between both test_int and test_long.""" 51edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep 52edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep # Change to int or long in the TestCase subclass. 53edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep ntype = None 54edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep 55edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep def test_no_args(self): 56edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(self.ntype(), 0) 57edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep 58edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep def test_keyword_args(self): 59edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep # Test invoking constructor using keyword arguments. 60edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(self.ntype(x=1.2), 1) 61edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(self.ntype('100', base=2), 4) 62edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(self.ntype(x='100', base=2), 4) 63edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertRaises(TypeError, self.ntype, base=10) 64edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertRaises(TypeError, self.ntype, base=0) 65edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep 66edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoepclass IntTestCases(IntLongCommonTests, unittest.TestCase): 67edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep 68edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep ntype = int 69edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep 70edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep def test_basic(self): 71edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(int(314), 314) 72edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(int(3.14), 3) 73edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(int(314L), 314) 74edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep # Check that conversion from float truncates towards zero 75edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(int(-3.14), -3) 76edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(int(3.9), 3) 77edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(int(-3.9), -3) 78edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(int(3.5), 3) 79edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(int(-3.5), -3) 80edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep # Different base: 81edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(int("10",16), 16L) 82edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep if have_unicode: 83edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(int(unicode("10"),16), 16L) 84edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep # Test conversion from strings and various anomalies 85edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep for s, v in L: 86edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep for sign in "", "+", "-": 87edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep for prefix in "", " ", "\t", " \t\t ": 88edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep ss = prefix + sign + s 89edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep vv = v 90edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep if sign == "-" and v is not ValueError: 91edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep vv = -v 92edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep try: 93edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(int(ss), vv) 94edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep except v: 95edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep pass 96edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep 97edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep s = repr(-1-sys.maxint) 98edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep x = int(s) 99edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(x+1, -sys.maxint) 100edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertIsInstance(x, int) 101edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep # should return long 102edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(int(s[1:]), sys.maxint+1) 103edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep 104edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep # should return long 105edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep x = int(1e100) 106edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertIsInstance(x, long) 107edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep x = int(-1e100) 108edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertIsInstance(x, long) 109edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep 110edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep 111edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep # SF bug 434186: 0x80000000/2 != 0x80000000>>1. 112edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep # Worked by accident in Windows release build, but failed in debug build. 113edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep # Failed in all Linux builds. 114edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep x = -1-sys.maxint 115edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(x >> 1, x//2) 116edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep 117edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertRaises(ValueError, int, '123\0') 118edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertRaises(ValueError, int, '53', 40) 119edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep 120edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep # SF bug 1545497: embedded NULs were not detected with 121edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep # explicit base 122edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertRaises(ValueError, int, '123\0', 10) 123edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertRaises(ValueError, int, '123\x00 245', 20) 124edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep 125edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep x = int('1' * 600) 126edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertIsInstance(x, long) 127edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep 128edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep if have_unicode: 129edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep x = int(unichr(0x661) * 600) 130edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertIsInstance(x, long) 131edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep 132edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertRaises(TypeError, int, 1, 12) 133edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep 134edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(int('0123', 0), 83) 135edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(int('0x123', 16), 291) 136edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep 137edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep # Bug 1679: "0x" is not a valid hex literal 138edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertRaises(ValueError, int, "0x", 16) 139edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertRaises(ValueError, int, "0x", 0) 140edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep 141edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertRaises(ValueError, int, "0o", 8) 142edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertRaises(ValueError, int, "0o", 0) 143edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep 144edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertRaises(ValueError, int, "0b", 2) 145edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertRaises(ValueError, int, "0b", 0) 146edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep 147edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep 148edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep # SF bug 1334662: int(string, base) wrong answers 149edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep # Various representations of 2**32 evaluated to 0 150edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep # rather than 2**32 in previous versions 151edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep 152edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(int('100000000000000000000000000000000', 2), 4294967296L) 153edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(int('102002022201221111211', 3), 4294967296L) 154edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(int('10000000000000000', 4), 4294967296L) 155edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(int('32244002423141', 5), 4294967296L) 156edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(int('1550104015504', 6), 4294967296L) 157edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(int('211301422354', 7), 4294967296L) 158edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(int('40000000000', 8), 4294967296L) 159edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(int('12068657454', 9), 4294967296L) 160edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(int('4294967296', 10), 4294967296L) 161edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(int('1904440554', 11), 4294967296L) 162edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(int('9ba461594', 12), 4294967296L) 163edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(int('535a79889', 13), 4294967296L) 164edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(int('2ca5b7464', 14), 4294967296L) 165edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(int('1a20dcd81', 15), 4294967296L) 166edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(int('100000000', 16), 4294967296L) 167edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(int('a7ffda91', 17), 4294967296L) 168edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(int('704he7g4', 18), 4294967296L) 169edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(int('4f5aff66', 19), 4294967296L) 170edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(int('3723ai4g', 20), 4294967296L) 171edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(int('281d55i4', 21), 4294967296L) 172edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(int('1fj8b184', 22), 4294967296L) 173edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(int('1606k7ic', 23), 4294967296L) 174edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(int('mb994ag', 24), 4294967296L) 175edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(int('hek2mgl', 25), 4294967296L) 176edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(int('dnchbnm', 26), 4294967296L) 177edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(int('b28jpdm', 27), 4294967296L) 178edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(int('8pfgih4', 28), 4294967296L) 179edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(int('76beigg', 29), 4294967296L) 180edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(int('5qmcpqg', 30), 4294967296L) 181edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(int('4q0jto4', 31), 4294967296L) 182edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(int('4000000', 32), 4294967296L) 183edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(int('3aokq94', 33), 4294967296L) 184edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(int('2qhxjli', 34), 4294967296L) 185edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(int('2br45qb', 35), 4294967296L) 186edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(int('1z141z4', 36), 4294967296L) 187edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep 188edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep # tests with base 0 189edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep # this fails on 3.0, but in 2.x the old octal syntax is allowed 190edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(int(' 0123 ', 0), 83) 191edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(int(' 0123 ', 0), 83) 192edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(int('000', 0), 0) 193edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(int('0o123', 0), 83) 194edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(int('0x123', 0), 291) 195edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(int('0b100', 0), 4) 196edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(int(' 0O123 ', 0), 83) 197edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(int(' 0X123 ', 0), 291) 198edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(int(' 0B100 ', 0), 4) 199edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(int('0', 0), 0) 200edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(int('+0', 0), 0) 201edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(int('-0', 0), 0) 202edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(int('00', 0), 0) 203edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertRaises(ValueError, int, '08', 0) 204edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertRaises(ValueError, int, '-012395', 0) 205edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep 206edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep # without base still base 10 207edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(int('0123'), 123) 208edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(int('0123', 10), 123) 209edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep 210edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep # tests with prefix and base != 0 211edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(int('0x123', 16), 291) 212edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(int('0o123', 8), 83) 213edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(int('0b100', 2), 4) 214edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(int('0X123', 16), 291) 215edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(int('0O123', 8), 83) 216edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(int('0B100', 2), 4) 217edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep 218edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep # the code has special checks for the first character after the 219edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep # type prefix 220edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertRaises(ValueError, int, '0b2', 2) 221edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertRaises(ValueError, int, '0b02', 2) 222edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertRaises(ValueError, int, '0B2', 2) 223edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertRaises(ValueError, int, '0B02', 2) 224edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertRaises(ValueError, int, '0o8', 8) 225edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertRaises(ValueError, int, '0o08', 8) 226edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertRaises(ValueError, int, '0O8', 8) 227edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertRaises(ValueError, int, '0O08', 8) 228edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertRaises(ValueError, int, '0xg', 16) 229edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertRaises(ValueError, int, '0x0g', 16) 230edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertRaises(ValueError, int, '0Xg', 16) 231edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertRaises(ValueError, int, '0X0g', 16) 232edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep 233edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep # SF bug 1334662: int(string, base) wrong answers 234edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep # Checks for proper evaluation of 2**32 + 1 235edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(int('100000000000000000000000000000001', 2), 4294967297L) 236edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(int('102002022201221111212', 3), 4294967297L) 237edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(int('10000000000000001', 4), 4294967297L) 238edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(int('32244002423142', 5), 4294967297L) 239edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(int('1550104015505', 6), 4294967297L) 240edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(int('211301422355', 7), 4294967297L) 241edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(int('40000000001', 8), 4294967297L) 242edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(int('12068657455', 9), 4294967297L) 243edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(int('4294967297', 10), 4294967297L) 244edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(int('1904440555', 11), 4294967297L) 245edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(int('9ba461595', 12), 4294967297L) 246edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(int('535a7988a', 13), 4294967297L) 247edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(int('2ca5b7465', 14), 4294967297L) 248edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(int('1a20dcd82', 15), 4294967297L) 249edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(int('100000001', 16), 4294967297L) 250edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(int('a7ffda92', 17), 4294967297L) 251edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(int('704he7g5', 18), 4294967297L) 252edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(int('4f5aff67', 19), 4294967297L) 253edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(int('3723ai4h', 20), 4294967297L) 254edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(int('281d55i5', 21), 4294967297L) 255edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(int('1fj8b185', 22), 4294967297L) 256edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(int('1606k7id', 23), 4294967297L) 257edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(int('mb994ah', 24), 4294967297L) 258edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(int('hek2mgm', 25), 4294967297L) 259edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(int('dnchbnn', 26), 4294967297L) 260edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(int('b28jpdn', 27), 4294967297L) 261edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(int('8pfgih5', 28), 4294967297L) 262edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(int('76beigh', 29), 4294967297L) 263edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(int('5qmcpqh', 30), 4294967297L) 264edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(int('4q0jto5', 31), 4294967297L) 265edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(int('4000001', 32), 4294967297L) 266edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(int('3aokq95', 33), 4294967297L) 267edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(int('2qhxjlj', 34), 4294967297L) 268edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(int('2br45qc', 35), 4294967297L) 269edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(int('1z141z5', 36), 4294967297L) 270edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep 271edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep def test_bit_length(self): 272edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep tiny = 1e-10 273edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep for x in xrange(-65000, 65000): 274edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep k = x.bit_length() 275edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep # Check equivalence with Python version 276edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(k, len(bin(x).lstrip('-0b'))) 277edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep # Behaviour as specified in the docs 278edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep if x != 0: 279edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertTrue(2**(k-1) <= abs(x) < 2**k) 280edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep else: 281edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(k, 0) 282edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep # Alternative definition: x.bit_length() == 1 + floor(log_2(x)) 283edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep if x != 0: 284edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep # When x is an exact power of 2, numeric errors can 285edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep # cause floor(log(x)/log(2)) to be one too small; for 286edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep # small x this can be fixed by adding a small quantity 287edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep # to the quotient before taking the floor. 288edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(k, 1 + math.floor( 289edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep math.log(abs(x))/math.log(2) + tiny)) 290edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep 291edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual((0).bit_length(), 0) 292edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual((1).bit_length(), 1) 293edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual((-1).bit_length(), 1) 294edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual((2).bit_length(), 2) 295edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual((-2).bit_length(), 2) 296edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep for i in [2, 3, 15, 16, 17, 31, 32, 33, 63, 64]: 297edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep a = 2**i 298edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual((a-1).bit_length(), i) 299edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual((1-a).bit_length(), i) 300edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual((a).bit_length(), i+1) 301edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual((-a).bit_length(), i+1) 302edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual((a+1).bit_length(), i+1) 303edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual((-a-1).bit_length(), i+1) 304edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep 305edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep @unittest.skipUnless(float.__getformat__("double").startswith("IEEE"), 306edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep "test requires IEEE 754 doubles") 307edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep def test_float_conversion(self): 308edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep # values exactly representable as floats 309edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep exact_values = [-2, -1, 0, 1, 2, 2**52, 2**53-1, 2**53, 2**53+2, 310edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep 2**53+4, 2**54-4, 2**54-2, 2**63, -2**63, 2**64, 311edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep -2**64, 10**20, 10**21, 10**22] 312edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep for value in exact_values: 313edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(int(float(int(value))), value) 314edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep 315edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep # test round-half-to-even 316edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(int(float(2**53+1)), 2**53) 317edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(int(float(2**53+2)), 2**53+2) 318edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(int(float(2**53+3)), 2**53+4) 319edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(int(float(2**53+5)), 2**53+4) 320edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(int(float(2**53+6)), 2**53+6) 321edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(int(float(2**53+7)), 2**53+8) 322edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep 323edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(int(float(-2**53-1)), -2**53) 324edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(int(float(-2**53-2)), -2**53-2) 325edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(int(float(-2**53-3)), -2**53-4) 326edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(int(float(-2**53-5)), -2**53-4) 327edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(int(float(-2**53-6)), -2**53-6) 328edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(int(float(-2**53-7)), -2**53-8) 329edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep 330edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(int(float(2**54-2)), 2**54-2) 331edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(int(float(2**54-1)), 2**54) 332edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(int(float(2**54+2)), 2**54) 333edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(int(float(2**54+3)), 2**54+4) 334edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(int(float(2**54+5)), 2**54+4) 335edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(int(float(2**54+6)), 2**54+8) 336edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(int(float(2**54+10)), 2**54+8) 337edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(int(float(2**54+11)), 2**54+12) 338edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep 339edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep def test_valid_non_numeric_input_types_for_x(self): 340edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep # Test possible valid non-numeric types for x, including subclasses 341edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep # of the allowed built-in types. 342edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep class CustomStr(str): pass 343edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep values = ['100', CustomStr('100')] 344edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep 345edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep if have_unicode: 346edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep class CustomUnicode(unicode): pass 347edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep values += [unicode('100'), CustomUnicode(unicode('100'))] 348edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep 349edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep for x in values: 350edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep msg = 'x has value %s and type %s' % (x, type(x).__name__) 351edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep try: 352edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(int(x), 100, msg=msg) 353edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(int(x, 2), 4, msg=msg) 354edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep except TypeError, err: 355edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep raise AssertionError('For %s got TypeError: %s' % 356edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep (type(x).__name__, err)) 357edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep 358edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep def test_error_on_string_float_for_x(self): 359edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertRaises(ValueError, int, '1.2') 360edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep 361edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep def test_error_on_bytearray_for_x(self): 362edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertRaises(TypeError, int, bytearray('100'), 2) 363edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep 364edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep def test_error_on_invalid_int_bases(self): 365edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep for base in [-1, 1, 1000]: 366edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertRaises(ValueError, int, '100', base) 367edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep 368edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep def test_error_on_string_base(self): 369edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertRaises(TypeError, int, 100, base='foo') 370edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep 371edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep @test_support.cpython_only 372edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep def test_small_ints(self): 373edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertIs(int('10'), 10) 374edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertIs(int('-1'), -1) 375edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep if have_unicode: 376edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertIs(int(u'10'), 10) 377edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertIs(int(u'-1'), -1) 378edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep 379edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep def test_intconversion(self): 380edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep # Test __int__() 381edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep class ClassicMissingMethods: 382edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep pass 383edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertRaises(AttributeError, int, ClassicMissingMethods()) 384edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep 385edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep class MissingMethods(object): 386edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep pass 387edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertRaises(TypeError, int, MissingMethods()) 388edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep 389edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep class Foo0: 390edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep def __int__(self): 391edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep return 42 392edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep 393edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep class Foo1(object): 394edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep def __int__(self): 395edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep return 42 396edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep 397edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep class Foo2(int): 398edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep def __int__(self): 399edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep return 42 400edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep 401edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep class Foo3(int): 402edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep def __int__(self): 403edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep return self 404edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep 405edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep class Foo4(int): 406edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep def __int__(self): 407edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep return 42L 408edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep 409edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep class Foo5(int): 410edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep def __int__(self): 411edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep return 42. 412edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep 413edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(int(Foo0()), 42) 414edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(int(Foo1()), 42) 415edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(int(Foo2()), 42) 416edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(int(Foo3()), 0) 417edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(int(Foo4()), 42L) 418edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertRaises(TypeError, int, Foo5()) 419edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep 420edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep class Classic: 421edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep pass 422edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep for base in (object, Classic): 423edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep class IntOverridesTrunc(base): 424edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep def __int__(self): 425edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep return 42 426edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep def __trunc__(self): 427edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep return -12 428edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(int(IntOverridesTrunc()), 42) 429edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep 430edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep class JustTrunc(base): 431edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep def __trunc__(self): 432edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep return 42 433edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(int(JustTrunc()), 42) 434edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep 435edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep for trunc_result_base in (object, Classic): 436edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep class Integral(trunc_result_base): 437edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep def __int__(self): 438edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep return 42 439edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep 440edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep class TruncReturnsNonInt(base): 441edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep def __trunc__(self): 442edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep return Integral() 443edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(int(TruncReturnsNonInt()), 42) 444edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep 445edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep class NonIntegral(trunc_result_base): 446edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep def __trunc__(self): 447edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep # Check that we avoid infinite recursion. 448edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep return NonIntegral() 449edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep 450edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep class TruncReturnsNonIntegral(base): 451edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep def __trunc__(self): 452edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep return NonIntegral() 453edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep try: 454edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep int(TruncReturnsNonIntegral()) 455edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep except TypeError as e: 456edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(str(e), 457edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep "__trunc__ returned non-Integral" 458edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep " (type NonIntegral)") 459edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep else: 460edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.fail("Failed to raise TypeError with %s" % 461edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep ((base, trunc_result_base),)) 462edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep 463edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoepdef test_main(): 464edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep run_unittest(IntTestCases) 465edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep 466edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoepif __name__ == "__main__": 467edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep test_main() 468