100-go-mistakes/concurrency/concurrency-not-magic_test.go
2020-12-12 11:02:16 +01:00

48 lines
995 B
Go

package concurrency
import (
"bufio"
"bytes"
"io/ioutil"
"os"
"testing"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
func Test_parseFile(t *testing.T) {
file, err := os.Open("input.csv")
require.NoError(t, err)
defer file.Close()
reader := bufio.NewReader(file)
customers, err := parseFile(reader)
require.NoError(t, err)
assert.Equal(t, 1_000_000, len(customers))
}
func Benchmark_parseFile(b *testing.B) {
benchmarkParseFile(b, parseFile)
}
func Benchmark_parseFileWorker(b *testing.B) {
benchmarkParseFile(b, parseFileWorker)
}
func Benchmark_parseFileGoroutines(b *testing.B) {
benchmarkParseFile(b, parseFileGoroutines)
}
func benchmarkParseFile(b *testing.B, f func(reader *bufio.Reader) ([]customer, error)) {
file, err := os.Open("input.csv")
require.NoError(b, err)
csv, _ := ioutil.ReadAll(file)
reader := bufio.NewReader(bytes.NewReader(csv))
b.ReportAllocs()
b.ResetTimer()
for i := 0; i < b.N; i++ {
f(reader)
}
}