@@ -568,11 +568,27 @@ def test_tiny_maps(self, assert_packable, size):
568
568
data_out += bytearray ([0x81 , 64 + el , el ])
569
569
assert_packable (data_in , bytes (data_out ))
570
570
571
+ @pytest .mark .parametrize ("size" , range (0x10 ))
572
+ def test_tiny_maps_padded_key (self , assert_packable , size ):
573
+ data_in = {}
574
+ data_out = bytearray ([0xA0 + size ])
575
+ padding = b"1234567890abcdefghijklmnopqrstuvwxyz"
576
+ for el in range (1 , size + 1 ):
577
+ data_in [padding .decode ("ascii" ) + chr (64 + el )] = el
578
+ data_out += bytearray ([0xD0 , 37 , * padding , 64 + el , el ])
579
+ assert_packable (data_in , bytes (data_out ))
580
+
571
581
def test_map_8 (self , pack , assert_packable ):
572
582
d = {f"A{ i } " : 1 for i in range (40 )}
573
583
b = b"" .join (pack (f"A{ i } " , 1 ) for i in range (40 ))
574
584
assert_packable (d , b"\xd8 \x28 " + b )
575
585
586
+ def test_map_8_padded_key (self , pack , assert_packable ):
587
+ padding = "1234567890abcdefghijklmnopqrstuvwxyz"
588
+ d = {f"{ padding } -{ i } " : 1 for i in range (40 )}
589
+ b = b"" .join (pack (f"{ padding } -{ i } " , 1 ) for i in range (40 ))
590
+ assert_packable (d , b"\xd8 \x28 " + b )
591
+
576
592
def test_map_16 (self , pack , assert_packable ):
577
593
d = {f"A{ i } " : 1 for i in range (40000 )}
578
594
b = b"" .join (pack (f"A{ i } " , 1 ) for i in range (40000 ))
@@ -583,6 +599,30 @@ def test_map_32(self, pack, assert_packable):
583
599
b = b"" .join (pack (f"A{ i } " , 1 ) for i in range (80000 ))
584
600
assert_packable (d , b"\xda \x00 \x01 \x38 \x80 " + b )
585
601
602
+ def test_map_key_tiny_string (self , assert_packable ):
603
+ key = "A"
604
+ d = {key : 1 }
605
+ data_out = b"\xa1 \x81 " + key .encode ("utf-8" ) + b"\x01 "
606
+ assert_packable (d , bytes (data_out ))
607
+
608
+ def test_map_key_string_8 (self , assert_packable ):
609
+ key = "A" * 40
610
+ d = {key : 1 }
611
+ data_out = b"\xa1 \xd0 \x28 " + key .encode ("utf-8" ) + b"\x01 "
612
+ assert_packable (d , data_out )
613
+
614
+ def test_map_key_string_16 (self , assert_packable ):
615
+ key = "A" * 40000
616
+ d = {key : 1 }
617
+ data_out = b"\xa1 \xd1 \x9c \x40 " + key .encode ("utf-8" ) + b"\x01 "
618
+ assert_packable (d , data_out )
619
+
620
+ def test_map_key_string_32 (self , assert_packable ):
621
+ key = "A" * 80000
622
+ d = {key : 1 }
623
+ data_out = b"\xa1 \xd2 \x00 \x01 \x38 \x80 " + key .encode ("utf-8" ) + b"\x01 "
624
+ assert_packable (d , data_out )
625
+
586
626
def test_empty_dataframe_maps (self , assert_packable ):
587
627
df = pd .DataFrame ()
588
628
assert_packable (df , b"\xa0 " , {})
0 commit comments