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
}
}
}