Skip to content

Commit c7c6a7d

Browse files
committed
Update tests: precision and modulo-precision (two's complement)
1 parent 2af85c7 commit c7c6a7d

File tree

1 file changed

+60
-0
lines changed

1 file changed

+60
-0
lines changed

Lib/test/test_long.py

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -676,6 +676,16 @@ def test__format__(self):
676676
self.assertEqual(format(123456789, ','), '123,456,789')
677677
self.assertEqual(format(123456789, '_'), '123_456_789')
678678

679+
## precision
680+
self.assertEqual(format(0, '.0'), '0')
681+
self.assertEqual(format(67, '2.3'), '067')
682+
self.assertEqual(format(67, '8.3'), ' 067')
683+
self.assertEqual(format(67, ' .3'), ' 067')
684+
685+
with self.assertRaises(ValueError):
686+
format(123, ".2147483648")
687+
# too large
688+
679689
# sign and aligning are interdependent
680690
self.assertEqual(format(1, "-"), '1')
681691
self.assertEqual(format(-1, "-"), '-1')
@@ -707,6 +717,23 @@ def test__format__(self):
707717
self.assertEqual(format(1234567890, '_x'), '4996_02d2')
708718
self.assertEqual(format(1234567890, '_X'), '4996_02D2')
709719

720+
## precision
721+
self.assertEqual(format(10, '#.2x'), '0x0a')
722+
self.assertEqual(format(21, '#.4x'), '0x0015')
723+
self.assertEqual(format(8086, '#.4x'), '0x1f96')
724+
self.assertEqual(format(314159, '#.4x'), '0x4cb2f')
725+
self.assertEqual(format(-21, '#.4x'), '-0x0015')
726+
self.assertEqual(format(-8086, '#.4x'), '-0x1f96')
727+
self.assertEqual(format(-314159, '#.4x'), '-0x4cb2f')
728+
729+
## modulo / two's complement wrap
730+
self.assertEqual(format(-129, 'z#.2x'), '0x7f')
731+
self.assertEqual(format(127, 'z#.2x'), '0x7f')
732+
self.assertEqual(format(383, 'z#.2x'), '0x7f')
733+
self.assertEqual(format(-1, 'z#.2x'), '0xff')
734+
self.assertEqual(format(255, 'z#.2x'), '0xff')
735+
self.assertEqual(format(10, 'z#.2x'), '0x0a')
736+
710737
# octal
711738
self.assertEqual(format(3, "o"), "3")
712739
self.assertEqual(format(-3, "o"), "-3")
@@ -721,6 +748,18 @@ def test__format__(self):
721748
self.assertRaises(ValueError, format, 1234567890, ',o')
722749
self.assertEqual(format(1234567890, '_o'), '111_4540_1322')
723750

751+
## precision
752+
self.assertEqual(format(18, '#.3o'), '0o022')
753+
self.assertEqual(format(256, 'z.3o'), '400')
754+
self.assertEqual(format(64, 'z.2o'), '00')
755+
self.assertEqual(format(-257, 'z.3o'), '377')
756+
757+
self.assertEqual(format(-1, 'z.3o'), '777')
758+
# different from C `printf("%hho\n", -1);` which is '377'
759+
# because hh is 8 bits, not divisible by 3, the number of
760+
# bits per octal digit, whereas Python has unlimited precision
761+
# and we request 9 bits (3 bits per octal digit * 3 digits)
762+
724763
# binary
725764
self.assertEqual(format(3, "b"), "11")
726765
self.assertEqual(format(-3, "b"), "-11")
@@ -735,6 +774,27 @@ def test__format__(self):
735774
self.assertRaises(ValueError, format, 1234567890, ',b')
736775
self.assertEqual(format(12345, '_b'), '11_0000_0011_1001')
737776

777+
## precision
778+
self.assertEqual(format( 1, '#.8b'), "0b00000001")
779+
self.assertEqual(format(-1, '#.8b'), "-0b00000001")
780+
self.assertEqual(format(127, '#.8b'), "0b01111111")
781+
self.assertEqual(format(128, '#.8b'), "0b10000000")
782+
self.assertEqual(format(129, '#.8b'), "0b10000001")
783+
self.assertEqual(format(301, '#.8b'), "0b100101101")
784+
self.assertEqual(format( 15, ' #.8b'), " 0b00001111")
785+
self.assertEqual(format( 15, '+#.8b'), "+0b00001111")
786+
self.assertEqual(format(-15, ' #.8b'), "-0b00001111")
787+
788+
## modulo / two's complement wrap
789+
self.assertEqual(format(-129, 'z#.8b'), '0b01111111')
790+
self.assertEqual(format(127, 'z#.8b'), '0b01111111')
791+
self.assertEqual(format(383, 'z#.8b'), '0b01111111')
792+
self.assertEqual(format(-1, 'z#.8b'), '0b11111111')
793+
self.assertEqual(format(255, 'z#.8b'), '0b11111111')
794+
self.assertEqual(format(10, 'z#.8b'), '0b00001010')
795+
self.assertEqual(format(600, ' z#8.8b'), ' 0b01011000')
796+
self.assertEqual(format(600, ' z#12.8b'), ' 0b01011000')
797+
738798
# make sure these are errors for 'c' presentation type
739799
self.assertRaises(ValueError, format, 3, ".3c") # precision,
740800
self.assertRaises(ValueError, format, 3, "zc") # two's complement,

0 commit comments

Comments
 (0)