diff --git a/pmap_test.go b/pmap_test.go index 868ca7a..735ca4d 100644 --- a/pmap_test.go +++ b/pmap_test.go @@ -35,6 +35,8 @@ func BenchmarkGet(b *testing.B) { b.Run("size=100", func(b *testing.B) { benchmarkGet(b, 100) }) b.Run("size=1000", func(b *testing.B) { benchmarkGet(b, 1000) }) b.Run("size=10000", func(b *testing.B) { benchmarkGet(b, 10000) }) + //b.Run("size=100000", func(b *testing.B) { benchmarkGet(b, 100000) }) + //b.Run("size=1000000", func(b *testing.B) { benchmarkGet(b, 1000000) }) } func BenchmarkGetAbsent(b *testing.B) { @@ -69,7 +71,7 @@ func benchmarkGet(b *testing.B, numElems int) { func benchmarkGetAbsent(b *testing.B, numElems int) { p := New(hash) for i := range iter(numElems) { - p = p.Set(-i-1, i) + p = p.Set(i-numElems, i) } if p.Len() != numElems { b.Fatalf("Len() = %v, want %v", p.Len(), numElems) @@ -94,6 +96,8 @@ func BenchmarkHmapGet_baseline(b *testing.B) { b.Run("size=100", func(b *testing.B) { benchmarkHmapGet(b, 100) }) b.Run("size=1000", func(b *testing.B) { benchmarkHmapGet(b, 1000) }) b.Run("size=10000", func(b *testing.B) { benchmarkHmapGet(b, 10000) }) + b.Run("size=100000", func(b *testing.B) { benchmarkHmapGet(b, 100000) }) + b.Run("size=1000000", func(b *testing.B) { benchmarkHmapGet(b, 1000000) }) } func benchmarkHmapGet(b *testing.B, numElems int) { @@ -117,3 +121,54 @@ func benchmarkHmapGet(b *testing.B, numElems int) { } } } + +func BenchmarkSet(b *testing.B) { + b.Run("size=10", func(b *testing.B) { benchmarkSet(b, 10) }) + b.Run("size=100", func(b *testing.B) { benchmarkSet(b, 100) }) + b.Run("size=1000", func(b *testing.B) { benchmarkSet(b, 1000) }) + b.Run("size=10000", func(b *testing.B) { benchmarkSet(b, 10000) }) + if !testing.Short() { + b.Run("size=100000", func(b *testing.B) { benchmarkSet(b, 100000) }) + } +} + +func benchmarkSet(b *testing.B, numElems int) { + p := New(hash) + for i := range iter(numElems) { + p = p.Set(i, i) + } + if p.Len() != numElems { + b.Fatalf("Len() = %v, want %v", p.Len(), numElems) + } + b.ResetTimer() + for i := range iter(b.N) { + k := i + numElems + _ = p.Set(k, k) + } +} + +func BenchmarkHmapSet_baseline(b *testing.B) { + b.Run("size=10", func(b *testing.B) { benchmarkHmapSet(b, 10) }) + b.Run("size=100", func(b *testing.B) { benchmarkHmapSet(b, 100) }) + b.Run("size=1000", func(b *testing.B) { benchmarkHmapSet(b, 1000) }) + b.Run("size=10000", func(b *testing.B) { benchmarkHmapSet(b, 10000) }) + if !testing.Short() { + b.Run("size=100000", func(b *testing.B) { benchmarkHmapSet(b, 100000) }) + } +} + +func benchmarkHmapSet(b *testing.B, numElems int) { + h := make(map[int]int) + for i := range iter(numElems) { + h[i] = i + } + if len(h) != numElems { + b.Fatalf("Len() = %v, want %v", len(h), numElems) + } + b.ResetTimer() + for i := range iter(b.N) { + k := i + numElems + h[k] = k + delete(h, k) + } +}