@@ -648,6 +648,28 @@ def check_equal(view, is_equal):
648648 m = memoryview (data ).cast (complex_format )
649649 check_equal (m , True )
650650
651+ def test_boolean_format (self ):
652+ # Test '?' format (keep all the checks below for UBSan)
653+ # See github.com/python/cpython/issues/148390.
654+
655+ # m1a and m1b are equivalent to [False, True, False]
656+ m1a = memoryview (b'\0 \2 \0 ' ).cast ('?' )
657+ self .assertEqual (m1a .tolist (), [False , True , False ])
658+ m1b = memoryview (b'\0 \4 \0 ' ).cast ('?' )
659+ self .assertEqual (m1b .tolist (), [False , True , False ])
660+ self .assertEqual (m1a , m1b )
661+
662+ # m2a and m2b are equivalent to [True, True, True]
663+ m2a = memoryview (b'\1 \3 \5 ' ).cast ('?' )
664+ self .assertEqual (m2a .tolist (), [True , True , True ])
665+ m2b = memoryview (b'\2 \4 \6 ' ).cast ('?' )
666+ self .assertEqual (m2b .tolist (), [True , True , True ])
667+ self .assertEqual (m2a , m2b )
668+
669+ allbytes = bytes (range (256 ))
670+ allbytes = memoryview (allbytes ).cast ('?' )
671+ self .assertEqual (allbytes .tolist (), [False ] + [True ] * 255 )
672+
651673
652674class BytesMemorySliceTest (unittest .TestCase ,
653675 BaseMemorySliceTests , BaseBytesMemoryTests ):
0 commit comments