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