@@ -3999,14 +3999,42 @@ def test_memoryview_hash(self):
39993999 m = memoryview (x )
40004000 self .assertEqual (hash (m ), hash (x ))
40014001
4002+ # equality-hash invariant
4003+ x = ndarray (list (range (12 )), shape = [12 ], format = 'B' )
4004+ a = memoryview (nd )
4005+
4006+ y = ndarray (list (range (12 )), shape = [12 ], format = 'b' )
4007+ b = memoryview (nd )
4008+
4009+ z = ndarray (list (bytes (chr (x ), 'latin-1' ) for x in range (12 )),
4010+ shape = [12 ], format = 'c' )
4011+ c = memoryview (nd )
4012+
4013+ if (a == b ):
4014+ self .assertEqual (hash (a ), hash (b ))
4015+
4016+ if (a == c ):
4017+ self .assertEqual (hash (a ), hash (c ))
4018+
4019+ if (b == c ):
4020+ self .assertEqual (hash (b ), hash (c ))
4021+
40024022 # non-byte formats
40034023 nd = ndarray (list (range (12 )), shape = [2 ,2 ,3 ], format = 'L' )
40044024 m = memoryview (nd )
4005- self .assertEqual ( hash ( m ), hash ( nd . tobytes ()) )
4025+ self .assertRaises ( ValueError , m . __hash__ )
40064026
40074027 nd = ndarray (list (range (- 6 , 6 )), shape = [2 ,2 ,3 ], format = 'h' )
40084028 m = memoryview (nd )
4009- self .assertEqual (hash (m ), hash (nd .tobytes ()))
4029+ self .assertRaises (ValueError , m .__hash__ )
4030+
4031+ nd = ndarray (list (range (12 )), shape = [2 ,2 ,3 ], format = '= L' )
4032+ m = memoryview (nd )
4033+ self .assertRaises (ValueError , m .__hash__ )
4034+
4035+ nd = ndarray (list (range (- 6 , 6 )), shape = [2 ,2 ,3 ], format = '< h' )
4036+ m = memoryview (nd )
4037+ self .assertRaises (ValueError , m .__hash__ )
40104038
40114039 def test_memoryview_release (self ):
40124040
0 commit comments