@@ -112,7 +112,30 @@ def test_codec_base8(self):
112112 self .assertEqual (codecs .decode (B8 , "base8-01234567" ), STR )
113113 self .assertRaises (LookupError , codecs .encode , "test" , "base8-0123456" )
114114 self .assertRaises (LookupError , codecs .encode , "test" , "base8-012345678" )
115-
115+
116+ def test_codec_base10 (self ):
117+ B10 = "2361031878030638688519054699098996"
118+ self .assertEqual (codecs .encode (STR , "base10" ), B10 )
119+ self .assertEqual (codecs .encode (b (STR ), "base10" ), b (B10 ))
120+ self .assertEqual (codecs .decode (B10 , "base10" ), STR )
121+ self .assertEqual (codecs .decode (b (B10 ), "base10" ), b (STR ))
122+ for alias in ["int" , "integer" , "dec" , "decimal" ]:
123+ self .assertEqual (codecs .encode (STR , alias ), B10 )
124+ self .assertEqual (codecs .decode (B10 , alias ), STR )
125+ # leading null bytes must be preserved as leading '0' characters
126+ self .assertEqual (codecs .encode ("\x00 abc" , "base10" ), "06382179" )
127+ self .assertEqual (codecs .encode ("\x00 " , "base10" ), "0" )
128+ self .assertEqual (codecs .encode ("\x00 \x00 abc" , "base10" ), "006382179" )
129+ self .assertEqual (codecs .decode ("06382179" , "base10" ), "\x00 abc" )
130+ self .assertEqual (codecs .decode ("00" , "base10" ), "\x00 \x00 " )
131+ self .assertEqual (codecs .encode (b ("\x00 abc" ), "base10" ), b ("06382179" ))
132+ self .assertEqual (codecs .decode (b ("06382179" ), "base10" ), b ("\x00 abc" ))
133+ # a value whose big integer ends in a 0xe nibble must survive decoding
134+ self .assertEqual (codecs .decode (codecs .encode (b"d\xc6 \xfe " , "base10" ), "base10" ), b"d\xc6 \xfe " )
135+ # large inputs must not hit the int<->str conversion digit limit
136+ for data in [b"\x00 \xff \xfe " , b"\x00 \x00 " , b"\x2a " * 2048 ]:
137+ self .assertEqual (codecs .decode (codecs .encode (data , "base10" ), "base10" ), data )
138+
116139 def test_codec_base16 (self ):
117140 B16 = "7468697320697320612074657374"
118141 self .assertEqual (codecs .encode (STR , "base16" ), B16 )
0 commit comments