package hw3test import ( "bytes" "io" "math/rand" "testing" ) func TestComparisonReaderMatchesEnvFile(t *testing.T) { for _, seed := range []int64{-7824, 0, 1, 7824, 9223372036854775807} { for _, chunkSize := range []int{1, 6, 7, 8, 13, 64 * 1024, 131071} { const total = 1024*1024 + 19 expected := make([]byte, total) actual := make([]byte, total) _, err := io.ReadFull(rand.New(rand.NewSource(seed)), expected) if err != nil { t.Fatal(err) } reader := newComparisonReader(seed) for offset := 0; offset < total; { end := offset + chunkSize if end > total { end = total } if _, err := io.ReadFull(reader, actual[offset:end]); err != nil { t.Fatal(err) } offset = end } if !bytes.Equal(actual, expected) { t.Fatalf("different bytes for seed %d and chunk size %d", seed, chunkSize) } } } } func BenchmarkComparisonReaders(b *testing.B) { const size = 128 * 1024 * 1024 buffer := make([]byte, 64*1024) for _, candidate := range []struct { name string open func() io.Reader }{ {"math/rand", func() io.Reader { return rand.New(rand.NewSource(7824)) }}, {"comparison", func() io.Reader { return newComparisonReader(7824) }}, } { b.Run(candidate.name, func(b *testing.B) { b.SetBytes(size) for i := 0; i < b.N; i++ { reader := candidate.open() for remaining := size; remaining > 0; remaining -= len(buffer) { if _, err := io.ReadFull(reader, buffer); err != nil { b.Fatal(err) } } } }) } }