@@ -357,6 +357,26 @@ func TestGetElement(t *testing.T) {
357357 })
358358}
359359
360+ func TestOrderedMap_Has (t * testing.T ) {
361+ t .Run ("ReturnsFalseIfKeyDoesNotExist" , func (t * testing.T ) {
362+ m := orderedmap .NewOrderedMap ()
363+ assert .False (t , m .Has ("foo" ))
364+ })
365+
366+ t .Run ("ReturnsTrueIfKeyExists" , func (t * testing.T ) {
367+ m := orderedmap .NewOrderedMap ()
368+ m .Set ("foo" , "bar" )
369+ assert .True (t , m .Has ("foo" ))
370+ })
371+
372+ t .Run ("KeyDoesNotExistAfterDelete" , func (t * testing.T ) {
373+ m := orderedmap .NewOrderedMap ()
374+ m .Set ("foo" , "bar" )
375+ m .Delete ("foo" )
376+ assert .False (t , m .Has ("foo" ))
377+ })
378+ }
379+
360380func benchmarkMap_Set (multiplier int ) func (b * testing.B ) {
361381 return func (b * testing.B ) {
362382 m := make (map [int ]bool )
@@ -524,6 +544,40 @@ func benchmarkOrderedMap_Iterate(multiplier int) func(b *testing.B) {
524544 }
525545}
526546
547+ func benchmarkMap_Has (multiplier int ) func (b * testing.B ) {
548+ m := make (map [int ]bool )
549+ for i := 0 ; i < 1000 * multiplier ; i ++ {
550+ m [i ] = true
551+ }
552+
553+ return func (b * testing.B ) {
554+ for i := 0 ; i < b .N ; i ++ {
555+ _ = m [i % 1000 * multiplier ]
556+ }
557+ }
558+ }
559+
560+ func BenchmarkMap_Has (b * testing.B ) {
561+ benchmarkMap_Has (1 )(b )
562+ }
563+
564+ func benchmarkOrderedMap_Has (multiplier int ) func (b * testing.B ) {
565+ m := orderedmap .NewOrderedMap ()
566+ for i := 0 ; i < 1000 * multiplier ; i ++ {
567+ m .Set (i , true )
568+ }
569+
570+ return func (b * testing.B ) {
571+ for i := 0 ; i < b .N ; i ++ {
572+ m .Has (i % 1000 * multiplier )
573+ }
574+ }
575+ }
576+
577+ func BenchmarkOrderedMap_Has (b * testing.B ) {
578+ benchmarkOrderedMap_Has (1 )(b )
579+ }
580+
527581func BenchmarkOrderedMap_Iterate (b * testing.B ) {
528582 benchmarkOrderedMap_Iterate (1 )(b )
529583}
@@ -698,6 +752,42 @@ func BenchmarkOrderedMapString_Iterate(b *testing.B) {
698752 benchmarkOrderedMapString_Iterate (1 )(b )
699753}
700754
755+ func benchmarkMapString_Has (multiplier int ) func (b * testing.B ) {
756+ m := make (map [string ]bool )
757+ a := "12345678"
758+ for i := 0 ; i < 1000 * multiplier ; i ++ {
759+ m [a + strconv .Itoa (i )] = true
760+ }
761+
762+ return func (b * testing.B ) {
763+ for i := 0 ; i < b .N ; i ++ {
764+ _ = m [a + strconv .Itoa (i % 1000 * multiplier )]
765+ }
766+ }
767+ }
768+
769+ func BenchmarkMapString_Has (b * testing.B ) {
770+ benchmarkMapString_Has (1 )(b )
771+ }
772+
773+ func benchmarkOrderedMapString_Has (multiplier int ) func (b * testing.B ) {
774+ m := orderedmap .NewOrderedMap ()
775+ a := "12345678"
776+ for i := 0 ; i < 1000 * multiplier ; i ++ {
777+ m .Set (a + strconv .Itoa (i ), true )
778+ }
779+
780+ return func (b * testing.B ) {
781+ for i := 0 ; i < b .N ; i ++ {
782+ m .Has (a + strconv .Itoa (i % 1000 * multiplier ))
783+ }
784+ }
785+ }
786+
787+ func BenchmarkOrderedMapString_Has (b * testing.B ) {
788+ benchmarkOrderedMapString_Has (1 )(b )
789+ }
790+
701791func BenchmarkOrderedMap_Keys (b * testing.B ) {
702792 benchmarkOrderedMap_Keys (1 )(b )
703793}
@@ -882,6 +972,44 @@ func benchmarkBigMapString_Set() func(b *testing.B) {
882972 }
883973}
884974
975+ func benchmarkBigMap_Has () func (b * testing.B ) {
976+ m := make (map [int ]bool )
977+ for i := 0 ; i < 10000000 ; i ++ {
978+ m [i ] = true
979+ }
980+
981+ return func (b * testing.B ) {
982+ for j := 0 ; j < b .N ; j ++ {
983+ for i := 0 ; i < 10000000 ; i ++ {
984+ _ = m [i ]
985+ }
986+ }
987+ }
988+ }
989+
990+ func BenchmarkBigMap_Has (b * testing.B ) {
991+ benchmarkBigMap_Has ()(b )
992+ }
993+
994+ func benchmarkBigOrderedMap_Has () func (b * testing.B ) {
995+ m := orderedmap .NewOrderedMap ()
996+ for i := 0 ; i < 10000000 ; i ++ {
997+ m .Set (i , true )
998+ }
999+
1000+ return func (b * testing.B ) {
1001+ for j := 0 ; j < b .N ; j ++ {
1002+ for i := 0 ; i < 10000000 ; i ++ {
1003+ m .Has (i )
1004+ }
1005+ }
1006+ }
1007+ }
1008+
1009+ func BenchmarkBigOrderedMap_Has (b * testing.B ) {
1010+ benchmarkBigOrderedMap_Has ()(b )
1011+ }
1012+
8851013func BenchmarkBigMapString_Set (b * testing.B ) {
8861014 benchmarkBigMapString_Set ()(b )
8871015}
@@ -1001,6 +1129,45 @@ func BenchmarkBigOrderedMapString_Iterate(b *testing.B) {
10011129 benchmarkBigOrderedMapString_Iterate ()(b )
10021130}
10031131
1132+ func benchmarkBigMapString_Has () func (b * testing.B ) {
1133+ m := make (map [string ]bool )
1134+ a := "12345678"
1135+ for i := 0 ; i < 10000000 ; i ++ {
1136+ m [a + strconv .Itoa (i )] = true
1137+ }
1138+
1139+ return func (b * testing.B ) {
1140+ for j := 0 ; j < b .N ; j ++ {
1141+ for i := 0 ; i < 10000000 ; i ++ {
1142+ _ = m [a + strconv .Itoa (i )]
1143+ }
1144+ }
1145+ }
1146+ }
1147+
1148+ func BenchmarkBigMapString_Has (b * testing.B ) {
1149+ benchmarkBigMapString_Has ()(b )
1150+ }
1151+
1152+ func benchmarkBigOrderedMapString_Has () func (b * testing.B ) {
1153+ m := orderedmap .NewOrderedMap ()
1154+ for i := 0 ; i < 10000000 ; i ++ {
1155+ m .Set (i , true )
1156+ }
1157+
1158+ return func (b * testing.B ) {
1159+ for j := 0 ; j < b .N ; j ++ {
1160+ for i := 0 ; i < 10000000 ; i ++ {
1161+ m .Has (i )
1162+ }
1163+ }
1164+ }
1165+ }
1166+
1167+ func BenchmarkBigOrderedMapString_Has (b * testing.B ) {
1168+ benchmarkBigOrderedMapString_Has ()(b )
1169+ }
1170+
10041171func BenchmarkAll (b * testing.B ) {
10051172 b .Run ("BenchmarkOrderedMap_Keys" , BenchmarkOrderedMap_Keys )
10061173
@@ -1013,6 +1180,8 @@ func BenchmarkAll(b *testing.B) {
10131180 b .Run ("BenchmarkMap_Delete" , BenchmarkMap_Delete )
10141181 b .Run ("BenchmarkOrderedMap_Iterate" , BenchmarkOrderedMap_Iterate )
10151182 b .Run ("BenchmarkMap_Iterate" , BenchmarkMap_Iterate )
1183+ b .Run ("BenchmarkOrderedMap_Has" , BenchmarkOrderedMap_Has )
1184+ b .Run ("BenchmarkMap_Has" , BenchmarkMap_Has )
10161185
10171186 b .Run ("BenchmarkBigMap_Set" , BenchmarkBigMap_Set )
10181187 b .Run ("BenchmarkBigOrderedMap_Set" , BenchmarkBigOrderedMap_Set )
@@ -1021,6 +1190,8 @@ func BenchmarkAll(b *testing.B) {
10211190 b .Run ("BenchmarkBigOrderedMap_GetElement" , BenchmarkBigOrderedMap_GetElement )
10221191 b .Run ("BenchmarkBigOrderedMap_Iterate" , BenchmarkBigOrderedMap_Iterate )
10231192 b .Run ("BenchmarkBigMap_Iterate" , BenchmarkBigMap_Iterate )
1193+ b .Run ("BenchmarkBigMap_Has" , BenchmarkBigMap_Has )
1194+ b .Run ("BenchmarkBigOrderedMap_Has" , BenchmarkBigOrderedMap_Has )
10241195
10251196 b .Run ("BenchmarkOrderedMapString_Set" , BenchmarkOrderedMapString_Set )
10261197 b .Run ("BenchmarkMapString_Set" , BenchmarkMapString_Set )
@@ -1031,6 +1202,8 @@ func BenchmarkAll(b *testing.B) {
10311202 b .Run ("BenchmarkMapString_Delete" , BenchmarkMapString_Delete )
10321203 b .Run ("BenchmarkOrderedMapString_Iterate" , BenchmarkOrderedMapString_Iterate )
10331204 b .Run ("BenchmarkMapString_Iterate" , BenchmarkMapString_Iterate )
1205+ b .Run ("BenchmarkMapString_Has" , BenchmarkMapString_Has )
1206+ b .Run ("BenchmarkOrderedMapString_Has" , BenchmarkOrderedMapString_Has )
10341207
10351208 b .Run ("BenchmarkBigMapString_Set" , BenchmarkBigMapString_Set )
10361209 b .Run ("BenchmarkBigOrderedMapString_Set" , BenchmarkBigOrderedMapString_Set )
@@ -1039,4 +1212,6 @@ func BenchmarkAll(b *testing.B) {
10391212 b .Run ("BenchmarkBigOrderedMapString_GetElement" , BenchmarkBigOrderedMapString_GetElement )
10401213 b .Run ("BenchmarkBigOrderedMapString_Iterate" , BenchmarkBigOrderedMapString_Iterate )
10411214 b .Run ("BenchmarkBigMapString_Iterate" , BenchmarkBigMapString_Iterate )
1215+ b .Run ("BenchmarkBigMapString_Has" , BenchmarkBigMapString_Has )
1216+ b .Run ("BenchmarkBigOrderedMapString_Has" , BenchmarkBigOrderedMapString_Has )
10421217}
0 commit comments