@@ -580,23 +580,30 @@ def test_compare_equal(self):
580580 # individual values. This is not true for float values since they can
581581 # be NaN, and NaN is not equal to itself.
582582
583+ def check_equal (view , is_equal ):
584+ self .assertEqual (view == view , is_equal )
585+ self .assertEqual (view != view , not is_equal )
586+
587+ # Comparison with a different memoryview doesn't use
588+ # the optimization and should give the same result.
589+ view2 = memoryview (view )
590+ self .assertEqual (view2 == view , is_equal )
591+ self .assertEqual (view2 != view2 , not is_equal )
592+
583593 # Test integer formats
584594 for int_format in 'bBhHiIlLqQ' :
585595 with self .subTest (format = int_format ):
586596 a = array .array (int_format , [1 , 2 , 3 ])
587597 m = memoryview (a )
588- self .assertTrue (m == m )
589- self .assertFalse (m != m )
598+ check_equal (m , True )
590599
591600 if int_format in 'bB' :
592601 m2 = m .cast ('@' + m .format )
593- self .assertTrue (m2 == m2 )
594- self .assertFalse (m2 != m2 )
602+ check_equal (m2 , True )
595603
596604 # Test '?' format
597605 m = memoryview (b'\0 \1 \2 ' ).cast ('?' )
598- self .assertTrue (m == m )
599- self .assertFalse (m != m )
606+ check_equal (m , True )
600607
601608 # Test 'P' format
602609 if struct .calcsize ('L' ) == struct .calcsize ('P' ):
@@ -607,22 +614,19 @@ def test_compare_equal(self):
607614 raise ValueError ('unable to get void* format in struct' )
608615 a = array .array (int_format , [1 , 2 , 3 ])
609616 m = memoryview (a .tobytes ()).cast ('P' )
610- self .assertTrue (m == m )
611- self .assertFalse (m != m )
617+ check_equal (m , True )
612618
613619 # Test float formats
614620 for float_format in 'fd' :
615621 with self .subTest (format = float_format ):
616622 a = array .array (float_format , [1.0 , 2.0 , float ('nan' )])
617623 m = memoryview (a )
618624 # nan is not equal to nan
619- self .assertFalse (m == m )
620- self .assertTrue (m != m )
625+ check_equal (m , False )
621626
622627 a = array .array (float_format , [1.0 , 2.0 , 3.0 ])
623628 m = memoryview (a )
624- self .assertTrue (m == m )
625- self .assertFalse (m != m )
629+ check_equal (m , True )
626630
627631
628632class BytesMemorySliceTest (unittest .TestCase ,
0 commit comments