@@ -911,4 +911,50 @@ class MapEntry < ::Protobuf::Message
911911 end
912912 end
913913 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
914960end
0 commit comments