14adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao"""Test correct treatment of hex/oct constants.
24adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
34adfde8bc82dd39f59e0445588c3e599ada477dJosh GaoThis is complex because of changes due to PEP 237.
44adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao"""
54adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
64adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoimport unittest
74adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaofrom test import test_support
84adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
94adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
104adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestHexOctBin(unittest.TestCase):
114adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
124adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    def test_hex_baseline(self):
134adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        # A few upper/lowercase tests
144adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(0x0, 0X0)
154adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(0x1, 0X1)
164adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(0x123456789abcdef, 0X123456789abcdef)
174adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        # Baseline tests
184adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(0x0, 0)
194adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(0x10, 16)
204adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(0x7fffffff, 2147483647)
214adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(0x7fffffffffffffff, 9223372036854775807)
224adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        # Ditto with a minus sign and parentheses
234adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(-(0x0), 0)
244adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(-(0x10), -16)
254adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(-(0x7fffffff), -2147483647)
264adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(-(0x7fffffffffffffff), -9223372036854775807)
274adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        # Ditto with a minus sign and NO parentheses
284adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(-0x0, 0)
294adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(-0x10, -16)
304adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(-0x7fffffff, -2147483647)
314adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(-0x7fffffffffffffff, -9223372036854775807)
324adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
334adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    def test_hex_unsigned(self):
344adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        # Positive constants
354adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(0x80000000, 2147483648L)
364adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(0xffffffff, 4294967295L)
374adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        # Ditto with a minus sign and parentheses
384adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(-(0x80000000), -2147483648L)
394adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(-(0xffffffff), -4294967295L)
404adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        # Ditto with a minus sign and NO parentheses
414adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        # This failed in Python 2.2 through 2.2.2 and in 2.3a1
424adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(-0x80000000, -2147483648L)
434adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(-0xffffffff, -4294967295L)
444adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
454adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        # Positive constants
464adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(0x8000000000000000, 9223372036854775808L)
474adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(0xffffffffffffffff, 18446744073709551615L)
484adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        # Ditto with a minus sign and parentheses
494adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(-(0x8000000000000000), -9223372036854775808L)
504adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(-(0xffffffffffffffff), -18446744073709551615L)
514adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        # Ditto with a minus sign and NO parentheses
524adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        # This failed in Python 2.2 through 2.2.2 and in 2.3a1
534adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(-0x8000000000000000, -9223372036854775808L)
544adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(-0xffffffffffffffff, -18446744073709551615L)
554adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
564adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    def test_oct_baseline(self):
574adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        # Baseline tests
584adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(00, 0)
594adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(020, 16)
604adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(017777777777, 2147483647)
614adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(0777777777777777777777, 9223372036854775807)
624adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        # Ditto with a minus sign and parentheses
634adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(-(00), 0)
644adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(-(020), -16)
654adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(-(017777777777), -2147483647)
664adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(-(0777777777777777777777), -9223372036854775807)
674adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        # Ditto with a minus sign and NO parentheses
684adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(-00, 0)
694adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(-020, -16)
704adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(-017777777777, -2147483647)
714adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(-0777777777777777777777, -9223372036854775807)
724adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
734adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    def test_oct_baseline_new(self):
744adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        # A few upper/lowercase tests
754adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(0o0, 0O0)
764adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(0o1, 0O1)
774adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(0o1234567, 0O1234567)
784adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        # Baseline tests
794adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(0o0, 0)
804adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(0o20, 16)
814adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(0o17777777777, 2147483647)
824adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(0o777777777777777777777, 9223372036854775807)
834adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        # Ditto with a minus sign and parentheses
844adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(-(0o0), 0)
854adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(-(0o20), -16)
864adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(-(0o17777777777), -2147483647)
874adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(-(0o777777777777777777777), -9223372036854775807)
884adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        # Ditto with a minus sign and NO parentheses
894adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(-0o0, 0)
904adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(-0o20, -16)
914adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(-0o17777777777, -2147483647)
924adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(-0o777777777777777777777, -9223372036854775807)
934adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
944adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    def test_oct_unsigned(self):
954adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        # Positive constants
964adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(020000000000, 2147483648L)
974adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(037777777777, 4294967295L)
984adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        # Ditto with a minus sign and parentheses
994adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(-(020000000000), -2147483648L)
1004adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(-(037777777777), -4294967295L)
1014adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        # Ditto with a minus sign and NO parentheses
1024adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        # This failed in Python 2.2 through 2.2.2 and in 2.3a1
1034adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(-020000000000, -2147483648L)
1044adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(-037777777777, -4294967295L)
1054adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
1064adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        # Positive constants
1074adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(01000000000000000000000, 9223372036854775808L)
1084adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(01777777777777777777777, 18446744073709551615L)
1094adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        # Ditto with a minus sign and parentheses
1104adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(-(01000000000000000000000), -9223372036854775808L)
1114adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(-(01777777777777777777777), -18446744073709551615L)
1124adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        # Ditto with a minus sign and NO parentheses
1134adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        # This failed in Python 2.2 through 2.2.2 and in 2.3a1
1144adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(-01000000000000000000000, -9223372036854775808L)
1154adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(-01777777777777777777777, -18446744073709551615L)
1164adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
1174adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    def test_oct_unsigned_new(self):
1184adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        # Positive constants
1194adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(0o20000000000, 2147483648L)
1204adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(0o37777777777, 4294967295L)
1214adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        # Ditto with a minus sign and parentheses
1224adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(-(0o20000000000), -2147483648L)
1234adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(-(0o37777777777), -4294967295L)
1244adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        # Ditto with a minus sign and NO parentheses
1254adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        # This failed in Python 2.2 through 2.2.2 and in 2.3a1
1264adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(-0o20000000000, -2147483648L)
1274adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(-0o37777777777, -4294967295L)
1284adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
1294adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        # Positive constants
1304adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(0o1000000000000000000000, 9223372036854775808L)
1314adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(0o1777777777777777777777, 18446744073709551615L)
1324adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        # Ditto with a minus sign and parentheses
1334adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(-(0o1000000000000000000000), -9223372036854775808L)
1344adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(-(0o1777777777777777777777), -18446744073709551615L)
1354adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        # Ditto with a minus sign and NO parentheses
1364adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        # This failed in Python 2.2 through 2.2.2 and in 2.3a1
1374adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(-0o1000000000000000000000, -9223372036854775808L)
1384adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(-0o1777777777777777777777, -18446744073709551615L)
1394adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
1404adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    def test_bin_baseline(self):
1414adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        # A few upper/lowercase tests
1424adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(0b0, 0B0)
1434adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(0b1, 0B1)
1444adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(0b10101010101, 0B10101010101)
1454adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        # Baseline tests
1464adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(0b0, 0)
1474adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(0b10000, 16)
1484adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(0b1111111111111111111111111111111, 2147483647)
1494adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(0b111111111111111111111111111111111111111111111111111111111111111, 9223372036854775807)
1504adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        # Ditto with a minus sign and parentheses
1514adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(-(0b0), 0)
1524adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(-(0b10000), -16)
1534adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(-(0b1111111111111111111111111111111), -2147483647)
1544adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(-(0b111111111111111111111111111111111111111111111111111111111111111), -9223372036854775807)
1554adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        # Ditto with a minus sign and NO parentheses
1564adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(-0b0, 0)
1574adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(-0b10000, -16)
1584adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(-0b1111111111111111111111111111111, -2147483647)
1594adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(-0b111111111111111111111111111111111111111111111111111111111111111, -9223372036854775807)
1604adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
1614adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    def test_bin_unsigned(self):
1624adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        # Positive constants
1634adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(0b10000000000000000000000000000000, 2147483648L)
1644adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(0b11111111111111111111111111111111, 4294967295L)
1654adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        # Ditto with a minus sign and parentheses
1664adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(-(0b10000000000000000000000000000000), -2147483648L)
1674adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(-(0b11111111111111111111111111111111), -4294967295L)
1684adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        # Ditto with a minus sign and NO parentheses
1694adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        # This failed in Python 2.2 through 2.2.2 and in 2.3a1
1704adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(-0b10000000000000000000000000000000, -2147483648L)
1714adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(-0b11111111111111111111111111111111, -4294967295L)
1724adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
1734adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        # Positive constants
1744adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(0b1000000000000000000000000000000000000000000000000000000000000000, 9223372036854775808L)
1754adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(0b1111111111111111111111111111111111111111111111111111111111111111, 18446744073709551615L)
1764adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        # Ditto with a minus sign and parentheses
1774adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(-(0b1000000000000000000000000000000000000000000000000000000000000000), -9223372036854775808L)
1784adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(-(0b1111111111111111111111111111111111111111111111111111111111111111), -18446744073709551615L)
1794adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        # Ditto with a minus sign and NO parentheses
1804adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        # This failed in Python 2.2 through 2.2.2 and in 2.3a1
1814adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(-0b1000000000000000000000000000000000000000000000000000000000000000, -9223372036854775808L)
1824adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(-0b1111111111111111111111111111111111111111111111111111111111111111, -18446744073709551615L)
1834adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
1844adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaodef test_main():
1854adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    test_support.run_unittest(TestHexOctBin)
1864adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
1874adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoif __name__ == "__main__":
1884adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    test_main()
189