17db96d56Sopenharmony_ci"""Test correct treatment of hex/oct constants.
27db96d56Sopenharmony_ci
37db96d56Sopenharmony_ciThis is complex because of changes due to PEP 237.
47db96d56Sopenharmony_ci"""
57db96d56Sopenharmony_ci
67db96d56Sopenharmony_ciimport unittest
77db96d56Sopenharmony_ci
87db96d56Sopenharmony_ciclass TestHexOctBin(unittest.TestCase):
97db96d56Sopenharmony_ci
107db96d56Sopenharmony_ci    def test_hex_baseline(self):
117db96d56Sopenharmony_ci        # A few upper/lowercase tests
127db96d56Sopenharmony_ci        self.assertEqual(0x0, 0X0)
137db96d56Sopenharmony_ci        self.assertEqual(0x1, 0X1)
147db96d56Sopenharmony_ci        self.assertEqual(0x123456789abcdef, 0X123456789abcdef)
157db96d56Sopenharmony_ci        # Baseline tests
167db96d56Sopenharmony_ci        self.assertEqual(0x0, 0)
177db96d56Sopenharmony_ci        self.assertEqual(0x10, 16)
187db96d56Sopenharmony_ci        self.assertEqual(0x7fffffff, 2147483647)
197db96d56Sopenharmony_ci        self.assertEqual(0x7fffffffffffffff, 9223372036854775807)
207db96d56Sopenharmony_ci        # Ditto with a minus sign and parentheses
217db96d56Sopenharmony_ci        self.assertEqual(-(0x0), 0)
227db96d56Sopenharmony_ci        self.assertEqual(-(0x10), -16)
237db96d56Sopenharmony_ci        self.assertEqual(-(0x7fffffff), -2147483647)
247db96d56Sopenharmony_ci        self.assertEqual(-(0x7fffffffffffffff), -9223372036854775807)
257db96d56Sopenharmony_ci        # Ditto with a minus sign and NO parentheses
267db96d56Sopenharmony_ci        self.assertEqual(-0x0, 0)
277db96d56Sopenharmony_ci        self.assertEqual(-0x10, -16)
287db96d56Sopenharmony_ci        self.assertEqual(-0x7fffffff, -2147483647)
297db96d56Sopenharmony_ci        self.assertEqual(-0x7fffffffffffffff, -9223372036854775807)
307db96d56Sopenharmony_ci
317db96d56Sopenharmony_ci    def test_hex_unsigned(self):
327db96d56Sopenharmony_ci        # Positive constants
337db96d56Sopenharmony_ci        self.assertEqual(0x80000000, 2147483648)
347db96d56Sopenharmony_ci        self.assertEqual(0xffffffff, 4294967295)
357db96d56Sopenharmony_ci        # Ditto with a minus sign and parentheses
367db96d56Sopenharmony_ci        self.assertEqual(-(0x80000000), -2147483648)
377db96d56Sopenharmony_ci        self.assertEqual(-(0xffffffff), -4294967295)
387db96d56Sopenharmony_ci        # Ditto with a minus sign and NO parentheses
397db96d56Sopenharmony_ci        # This failed in Python 2.2 through 2.2.2 and in 2.3a1
407db96d56Sopenharmony_ci        self.assertEqual(-0x80000000, -2147483648)
417db96d56Sopenharmony_ci        self.assertEqual(-0xffffffff, -4294967295)
427db96d56Sopenharmony_ci
437db96d56Sopenharmony_ci        # Positive constants
447db96d56Sopenharmony_ci        self.assertEqual(0x8000000000000000, 9223372036854775808)
457db96d56Sopenharmony_ci        self.assertEqual(0xffffffffffffffff, 18446744073709551615)
467db96d56Sopenharmony_ci        # Ditto with a minus sign and parentheses
477db96d56Sopenharmony_ci        self.assertEqual(-(0x8000000000000000), -9223372036854775808)
487db96d56Sopenharmony_ci        self.assertEqual(-(0xffffffffffffffff), -18446744073709551615)
497db96d56Sopenharmony_ci        # Ditto with a minus sign and NO parentheses
507db96d56Sopenharmony_ci        # This failed in Python 2.2 through 2.2.2 and in 2.3a1
517db96d56Sopenharmony_ci        self.assertEqual(-0x8000000000000000, -9223372036854775808)
527db96d56Sopenharmony_ci        self.assertEqual(-0xffffffffffffffff, -18446744073709551615)
537db96d56Sopenharmony_ci
547db96d56Sopenharmony_ci    def test_oct_baseline(self):
557db96d56Sopenharmony_ci        # A few upper/lowercase tests
567db96d56Sopenharmony_ci        self.assertEqual(0o0, 0O0)
577db96d56Sopenharmony_ci        self.assertEqual(0o1, 0O1)
587db96d56Sopenharmony_ci        self.assertEqual(0o1234567, 0O1234567)
597db96d56Sopenharmony_ci        # Baseline tests
607db96d56Sopenharmony_ci        self.assertEqual(0o0, 0)
617db96d56Sopenharmony_ci        self.assertEqual(0o20, 16)
627db96d56Sopenharmony_ci        self.assertEqual(0o17777777777, 2147483647)
637db96d56Sopenharmony_ci        self.assertEqual(0o777777777777777777777, 9223372036854775807)
647db96d56Sopenharmony_ci        # Ditto with a minus sign and parentheses
657db96d56Sopenharmony_ci        self.assertEqual(-(0o0), 0)
667db96d56Sopenharmony_ci        self.assertEqual(-(0o20), -16)
677db96d56Sopenharmony_ci        self.assertEqual(-(0o17777777777), -2147483647)
687db96d56Sopenharmony_ci        self.assertEqual(-(0o777777777777777777777), -9223372036854775807)
697db96d56Sopenharmony_ci        # Ditto with a minus sign and NO parentheses
707db96d56Sopenharmony_ci        self.assertEqual(-0o0, 0)
717db96d56Sopenharmony_ci        self.assertEqual(-0o20, -16)
727db96d56Sopenharmony_ci        self.assertEqual(-0o17777777777, -2147483647)
737db96d56Sopenharmony_ci        self.assertEqual(-0o777777777777777777777, -9223372036854775807)
747db96d56Sopenharmony_ci
757db96d56Sopenharmony_ci    def test_oct_unsigned(self):
767db96d56Sopenharmony_ci        # Positive constants
777db96d56Sopenharmony_ci        self.assertEqual(0o20000000000, 2147483648)
787db96d56Sopenharmony_ci        self.assertEqual(0o37777777777, 4294967295)
797db96d56Sopenharmony_ci        # Ditto with a minus sign and parentheses
807db96d56Sopenharmony_ci        self.assertEqual(-(0o20000000000), -2147483648)
817db96d56Sopenharmony_ci        self.assertEqual(-(0o37777777777), -4294967295)
827db96d56Sopenharmony_ci        # Ditto with a minus sign and NO parentheses
837db96d56Sopenharmony_ci        # This failed in Python 2.2 through 2.2.2 and in 2.3a1
847db96d56Sopenharmony_ci        self.assertEqual(-0o20000000000, -2147483648)
857db96d56Sopenharmony_ci        self.assertEqual(-0o37777777777, -4294967295)
867db96d56Sopenharmony_ci
877db96d56Sopenharmony_ci        # Positive constants
887db96d56Sopenharmony_ci        self.assertEqual(0o1000000000000000000000, 9223372036854775808)
897db96d56Sopenharmony_ci        self.assertEqual(0o1777777777777777777777, 18446744073709551615)
907db96d56Sopenharmony_ci        # Ditto with a minus sign and parentheses
917db96d56Sopenharmony_ci        self.assertEqual(-(0o1000000000000000000000), -9223372036854775808)
927db96d56Sopenharmony_ci        self.assertEqual(-(0o1777777777777777777777), -18446744073709551615)
937db96d56Sopenharmony_ci        # Ditto with a minus sign and NO parentheses
947db96d56Sopenharmony_ci        # This failed in Python 2.2 through 2.2.2 and in 2.3a1
957db96d56Sopenharmony_ci        self.assertEqual(-0o1000000000000000000000, -9223372036854775808)
967db96d56Sopenharmony_ci        self.assertEqual(-0o1777777777777777777777, -18446744073709551615)
977db96d56Sopenharmony_ci
987db96d56Sopenharmony_ci    def test_bin_baseline(self):
997db96d56Sopenharmony_ci        # A few upper/lowercase tests
1007db96d56Sopenharmony_ci        self.assertEqual(0b0, 0B0)
1017db96d56Sopenharmony_ci        self.assertEqual(0b1, 0B1)
1027db96d56Sopenharmony_ci        self.assertEqual(0b10101010101, 0B10101010101)
1037db96d56Sopenharmony_ci        # Baseline tests
1047db96d56Sopenharmony_ci        self.assertEqual(0b0, 0)
1057db96d56Sopenharmony_ci        self.assertEqual(0b10000, 16)
1067db96d56Sopenharmony_ci        self.assertEqual(0b1111111111111111111111111111111, 2147483647)
1077db96d56Sopenharmony_ci        self.assertEqual(0b111111111111111111111111111111111111111111111111111111111111111, 9223372036854775807)
1087db96d56Sopenharmony_ci        # Ditto with a minus sign and parentheses
1097db96d56Sopenharmony_ci        self.assertEqual(-(0b0), 0)
1107db96d56Sopenharmony_ci        self.assertEqual(-(0b10000), -16)
1117db96d56Sopenharmony_ci        self.assertEqual(-(0b1111111111111111111111111111111), -2147483647)
1127db96d56Sopenharmony_ci        self.assertEqual(-(0b111111111111111111111111111111111111111111111111111111111111111), -9223372036854775807)
1137db96d56Sopenharmony_ci        # Ditto with a minus sign and NO parentheses
1147db96d56Sopenharmony_ci        self.assertEqual(-0b0, 0)
1157db96d56Sopenharmony_ci        self.assertEqual(-0b10000, -16)
1167db96d56Sopenharmony_ci        self.assertEqual(-0b1111111111111111111111111111111, -2147483647)
1177db96d56Sopenharmony_ci        self.assertEqual(-0b111111111111111111111111111111111111111111111111111111111111111, -9223372036854775807)
1187db96d56Sopenharmony_ci
1197db96d56Sopenharmony_ci    def test_bin_unsigned(self):
1207db96d56Sopenharmony_ci        # Positive constants
1217db96d56Sopenharmony_ci        self.assertEqual(0b10000000000000000000000000000000, 2147483648)
1227db96d56Sopenharmony_ci        self.assertEqual(0b11111111111111111111111111111111, 4294967295)
1237db96d56Sopenharmony_ci        # Ditto with a minus sign and parentheses
1247db96d56Sopenharmony_ci        self.assertEqual(-(0b10000000000000000000000000000000), -2147483648)
1257db96d56Sopenharmony_ci        self.assertEqual(-(0b11111111111111111111111111111111), -4294967295)
1267db96d56Sopenharmony_ci        # Ditto with a minus sign and NO parentheses
1277db96d56Sopenharmony_ci        # This failed in Python 2.2 through 2.2.2 and in 2.3a1
1287db96d56Sopenharmony_ci        self.assertEqual(-0b10000000000000000000000000000000, -2147483648)
1297db96d56Sopenharmony_ci        self.assertEqual(-0b11111111111111111111111111111111, -4294967295)
1307db96d56Sopenharmony_ci
1317db96d56Sopenharmony_ci        # Positive constants
1327db96d56Sopenharmony_ci        self.assertEqual(0b1000000000000000000000000000000000000000000000000000000000000000, 9223372036854775808)
1337db96d56Sopenharmony_ci        self.assertEqual(0b1111111111111111111111111111111111111111111111111111111111111111, 18446744073709551615)
1347db96d56Sopenharmony_ci        # Ditto with a minus sign and parentheses
1357db96d56Sopenharmony_ci        self.assertEqual(-(0b1000000000000000000000000000000000000000000000000000000000000000), -9223372036854775808)
1367db96d56Sopenharmony_ci        self.assertEqual(-(0b1111111111111111111111111111111111111111111111111111111111111111), -18446744073709551615)
1377db96d56Sopenharmony_ci        # Ditto with a minus sign and NO parentheses
1387db96d56Sopenharmony_ci        # This failed in Python 2.2 through 2.2.2 and in 2.3a1
1397db96d56Sopenharmony_ci        self.assertEqual(-0b1000000000000000000000000000000000000000000000000000000000000000, -9223372036854775808)
1407db96d56Sopenharmony_ci        self.assertEqual(-0b1111111111111111111111111111111111111111111111111111111111111111, -18446744073709551615)
1417db96d56Sopenharmony_ci
1427db96d56Sopenharmony_ciif __name__ == "__main__":
1437db96d56Sopenharmony_ci    unittest.main()
144