Last active
November 21, 2018 15:32
-
-
Save kudryashov-sv/304d7754c0e37a0684d284ca5c600a0f to your computer and use it in GitHub Desktop.
filter_test.go
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
func FilterJunior(s []int) []int { | |
var pos = 0 | |
for i := 0; i < len(s); i++ { | |
if s[i]%3 != 0 { | |
s[pos] = s[i] | |
pos++ | |
} | |
} | |
return s[:pos] | |
} | |
func FilterBob(s []int) []int { | |
res := s[:0] | |
for i := range s { | |
if s[i]%3 != 0 { | |
res = append(res, s[i]) | |
} | |
} | |
return res | |
} | |
func FilterPates(s []int) []int { | |
for i := 0; i < len(s); i++ { | |
if s[i]%3 == 0 { | |
s = append(s[:i], s[i+1:]...) | |
} | |
} | |
return s | |
} | |
func BenchmarkFilter(b *testing.B) { | |
in := make([]int, 10000) | |
for i := range in { | |
in[i] = rand.Int() | |
} | |
b.Run("filter-junior", func(b *testing.B) { | |
b.ReportAllocs() | |
for i := 0; i < b.N; i++ { | |
FilterJunior(in) | |
} | |
}) | |
b.Run("filter-bob", func(b *testing.B) { | |
b.ReportAllocs() | |
for i := 0; i < b.N; i++ { | |
FilterBob(in) | |
} | |
}) | |
b.Run("filter-pates", func(b *testing.B) { | |
b.ReportAllocs() | |
for i := 0; i < b.N; i++ { | |
FilterPates(in) | |
} | |
}) | |
} | |
// goos: darwin | |
// goarch: amd64 | |
// pkg: workerpool | |
// BenchmarkFilter/filter-junior-12 100000 13468 ns/op 0 B/op 0 allocs/op | |
// BenchmarkFilter/filter-bob-12 100000 14033 ns/op 0 B/op 0 allocs/op | |
// BenchmarkFilter/filter-pates-12 200000 10222 ns/op 0 B/op 0 allocs/op | |
// PASS | |
func TestFilter(t *testing.T) { | |
require.Equal(t, []int{}, FilterJunior([]int{})) | |
require.Equal(t, []int{1}, FilterJunior([]int{1})) | |
require.Equal(t, []int{1, 2}, FilterJunior([]int{1, 2, 3})) | |
require.Equal(t, []int{1, 2}, FilterJunior([]int{9, 1, 2, 3})) | |
require.Equal(t, []int{1, 2}, FilterJunior([]int{9, 1, 27, 2, 3})) | |
require.Equal(t, []int{}, FilterJunior([]int{3})) | |
require.Equal(t, []int{}, FilterBob([]int{})) | |
require.Equal(t, []int{1}, FilterBob([]int{1})) | |
require.Equal(t, []int{1, 2}, FilterBob([]int{1, 2, 3})) | |
require.Equal(t, []int{1, 2}, FilterBob([]int{9, 1, 2, 3})) | |
require.Equal(t, []int{1, 2}, FilterBob([]int{9, 1, 27, 2, 3})) | |
require.Equal(t, []int{}, FilterBob([]int{3})) | |
require.Equal(t, []int{}, FilterPates([]int{})) | |
require.Equal(t, []int{1}, FilterPates([]int{1})) | |
require.Equal(t, []int{1, 2}, FilterPates([]int{1, 2, 3})) | |
require.Equal(t, []int{1, 2}, FilterPates([]int{9, 1, 2, 3})) | |
require.Equal(t, []int{1, 2}, FilterPates([]int{9, 1, 27, 2, 3})) | |
require.Equal(t, []int{}, FilterPates([]int{3})) | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment