@@ -911,4 +911,50 @@ class MapEntry < ::Protobuf::Message
911
911
end
912
912
end
913
913
end
914
+
915
+ describe 'equality & hash codes' do
916
+ let ( :m1 ) { ::Test ::Resource . new ( :name => "Jim" ) }
917
+ let ( :m2 ) { ::Test ::Resource . new ( :date_created => nil , :name => "Jim" ) }
918
+ let ( :m3 ) { ::Test ::Resource . new ( :date_created => 55 , :name => "Jim" ) }
919
+
920
+ let ( :hash ) do
921
+ { m1 => 4 , m3 => 6 }
922
+ end
923
+
924
+ it 'works with equality' do
925
+ expect ( m1 . nil? ) . to eq ( false )
926
+ expect ( m1 == 5 ) . to eq ( false )
927
+
928
+ expect ( m1 . equal? ( m2 ) ) . to eq ( false )
929
+ expect ( m1 . equal? ( m3 ) ) . to eq ( false )
930
+ expect ( m2 . equal? ( m1 ) ) . to eq ( false )
931
+ expect ( m2 . equal? ( m3 ) ) . to eq ( false )
932
+ expect ( m3 . equal? ( m1 ) ) . to eq ( false )
933
+ expect ( m3 . equal? ( m2 ) ) . to eq ( false )
934
+
935
+ expect ( m1 == m2 ) . to eq ( true )
936
+ expect ( m2 == m1 ) . to eq ( true )
937
+ expect ( m1 . eql? ( m2 ) ) . to eq ( true )
938
+ expect ( m2 . eql? ( m1 ) ) . to eq ( true )
939
+
940
+ expect ( m1 == m3 ) . to eq ( false )
941
+ expect ( m2 == m3 ) . to eq ( false )
942
+ expect ( m3 == m1 ) . to eq ( false )
943
+ expect ( m3 == m2 ) . to eq ( false )
944
+ end
945
+
946
+ it 'works with hash codes' do
947
+ expect ( m1 . hash ) . to eq ( m2 . hash )
948
+ expect ( m1 . hash ) . to_not eq ( m3 . hash )
949
+
950
+ expect ( [ m1 ] == [ m2 ] ) . to eq ( true )
951
+ expect ( [ m1 ] - [ m2 ] ) . to eq ( [ ] )
952
+
953
+ expect ( [ m1 , m3 ] - [ m2 ] ) . to eq ( [ m3 ] )
954
+
955
+ expect ( hash [ m1 ] ) . to eq ( 4 )
956
+ expect ( hash [ m2 ] ) . to eq ( 4 )
957
+ expect ( hash [ m3 ] ) . to eq ( 6 )
958
+ end
959
+ end
914
960
end
0 commit comments