| package parallel | |
| import ( | |
| "testing" | |
| "time" | |
| "github.com/stretchr/testify/assert" | |
| ) | |
| func TestParallel(t *testing.T) { | |
| fn := func(s string) int { | |
| return len(s) | |
| } | |
| for _, unit := range []struct { | |
| args []string | |
| want []int | |
| }{ | |
| { | |
| args: []string{"a", "ab", "hello", "world"}, | |
| want: []int{1, 2, 5, 5}, | |
| }, | |
| { | |
| args: []string{}, | |
| want: []int{}, | |
| }, | |
| } { | |
| result := Parallel(fn, unit.args...) | |
| assert.Equal(t, unit.want, result) | |
| } | |
| } | |
| func mockSlowFn(x int) int { | |
| time.Sleep(10 * time.Millisecond) | |
| return x * x | |
| } | |
| func BenchmarkParallel(b *testing.B) { | |
| args := make([]int, 100) | |
| for i := 0; i < 100; i++ { | |
| args[i] = i | |
| } | |
| b.ResetTimer() | |
| for i := 0; i < b.N; i++ { | |
| Parallel(mockSlowFn, args...) | |
| } | |
| } | |
| func BenchmarkSerial(b *testing.B) { | |
| args := make([]int, 100) | |
| for i := 0; i < 100; i++ { | |
| args[i] = i | |
| } | |
| b.ResetTimer() | |
| for i := 0; i < b.N; i++ { | |
| results := make([]int, len(args)) | |
| for j, v := range args { | |
| results[j] = mockSlowFn(v) | |
| } | |
| } | |
| } | |