map_vs_slice_bench.go

Run Settings
LanguageGo
Language Version
Run Command
package bench_test import ( "sort" "testing" ) func BenchmarkMap_First_10(b *testing.B) { Map(b, 10, 0) } func BenchmarkMap_First_100(b *testing.B) { Map(b, 100, 0) } func BenchmarkMap_First_1000(b *testing.B) { Map(b, 1000, 0) } func BenchmarkMap_First_10000(b *testing.B) { Map(b, 10000, 0) } func BenchmarkSlice_First_10(b *testing.B) { Slice(b, 10, 0) } func BenchmarkSlice_First_100(b *testing.B) { Slice(b, 100, 0) } func BenchmarkSlice_First_1000(b *testing.B) { Slice(b, 1000, 0) } func BenchmarkSlice_First_10000(b *testing.B) { Slice(b, 10000, 0) } func BenchmarkSliceSearch_First_10(b *testing.B) { SliceSearch(b, 10, 0) } func BenchmarkSliceSearch_First_100(b *testing.B) { SliceSearch(b, 100, 0) } func BenchmarkSliceSearch_First_1000(b *testing.B) { SliceSearch(b, 1000, 0) } func BenchmarkSliceSearch_First_10000(b *testing.B) { SliceSearch(b, 10000, 0) } func BenchmarkMap_Last_10(b *testing.B) { Map(b, 10, 9) } func BenchmarkMap_Last_100(b *testing.B) { Map(b, 100, 99) } func BenchmarkMap_Last_1000(b *testing.B) { Map(b, 1000, 999) } func BenchmarkMap_Last_10000(b *testing.B) { Map(b, 10000, 9999) } func BenchmarkSlice_Last_10(b *testing.B) { Slice(b, 10, 9) } func BenchmarkSlice_Last_100(b *testing.B) { Slice(b, 100, 99) } func BenchmarkSlice_Last_1000(b *testing.B) { Slice(b, 1000, 999) } func BenchmarkSlice_Last_10000(b *testing.B) { Slice(b, 10000, 9999) } func BenchmarkSliceSearch_Last_10(b *testing.B) { SliceSearch(b, 10, 9) } func BenchmarkSliceSearch_Last_100(b *testing.B) { SliceSearch(b, 100, 99) } func BenchmarkSliceSearch_Last_1000(b *testing.B) { SliceSearch(b, 1000, 999) } func BenchmarkSliceSearch_Last_10000(b *testing.B) { SliceSearch(b, 10000, 9999) } func BenchmarkMap_NotFound_10(b *testing.B) { Map(b, 10, 11) } func BenchmarkMap_NotFound_100(b *testing.B) { Map(b, 100, 111) } func BenchmarkMap_NotFound_1000(b *testing.B) { Map(b, 1000, 1111) } func BenchmarkMap_NotFound_10000(b *testing.B) { Map(b, 10000, 11111) } func BenchmarkSlice_NotFound_10(b *testing.B) { Slice(b, 10, 11) } func BenchmarkSlice_NotFound_100(b *testing.B) { Slice(b, 100, 111) } func BenchmarkSlice_NotFound_1000(b *testing.B) { Slice(b, 1000, 1111) } func BenchmarkSlice_NotFound_10000(b *testing.B) { Slice(b, 10000, 11111) } func BenchmarkSliceSearch_NotFound_10(b *testing.B) { SliceSearch(b, 10, 11) } func BenchmarkSliceSearch_NotFound_100(b *testing.B) { SliceSearch(b, 100, 111) } func BenchmarkSliceSearch_NotFound_1000(b *testing.B) { SliceSearch(b, 1000, 1111) } func BenchmarkSliceSearch_NotFound_10000(b *testing.B) { SliceSearch(b, 10000, 11111) } func Map(b *testing.B, size, search int) { m := make(map[int]struct{}, size) for i := 0; i < size; i++ { m[i] = struct{}{} } b.ResetTimer() for i := 0; i < b.N; i++ { _, ok := m[search] _ = ok } } func Slice(b *testing.B, size, search int) { s := make([]int, size) for i := 0; i < size; i++ { s[i] = i } b.ResetTimer() for i := 0; i < b.N; i++ { for j := 0; j < size; j++ { if s[j] == search { _ = true break // Found. } } } } func SliceSearch(b *testing.B, size, search int) { s := make([]int, size) for i := 0; i < size; i++ { s[i] = i } b.ResetTimer() for i := 0; i < b.N; i++ { for j := 0; j < size; j++ { position := sort.Search(size, func(i int) bool { return s[i] >= search }) _ = position < size } } }
Editor Settings
Theme
Key bindings
Full width
Lines