+++ /dev/null
-// Copyright 2014 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package parse
-
-import (
- "reflect"
- "strings"
- "testing"
-)
-
-func TestParseLine(t *testing.T) {
- cases := []struct {
- line string
- want *Benchmark
- err bool // expect an error
- }{
- {
- line: "BenchmarkEncrypt 100000000 19.6 ns/op",
- want: &Benchmark{
- Name: "BenchmarkEncrypt",
- N: 100000000, NsPerOp: 19.6,
- Measured: NsPerOp,
- },
- },
- {
- line: "BenchmarkEncrypt 100000000 19.6 ns/op 817.77 MB/s",
- want: &Benchmark{
- Name: "BenchmarkEncrypt",
- N: 100000000, NsPerOp: 19.6, MBPerS: 817.77,
- Measured: NsPerOp | MBPerS,
- },
- },
- {
- line: "BenchmarkEncrypt 100000000 19.6 ns/op 817.77",
- want: &Benchmark{
- Name: "BenchmarkEncrypt",
- N: 100000000, NsPerOp: 19.6,
- Measured: NsPerOp,
- },
- },
- {
- line: "BenchmarkEncrypt 100000000 19.6 ns/op 817.77 MB/s 5 allocs/op",
- want: &Benchmark{
- Name: "BenchmarkEncrypt",
- N: 100000000, NsPerOp: 19.6, MBPerS: 817.77, AllocsPerOp: 5,
- Measured: NsPerOp | MBPerS | AllocsPerOp,
- },
- },
- {
- line: "BenchmarkEncrypt 100000000 19.6 ns/op 817.77 MB/s 3 B/op 5 allocs/op",
- want: &Benchmark{
- Name: "BenchmarkEncrypt",
- N: 100000000, NsPerOp: 19.6, MBPerS: 817.77, AllocedBytesPerOp: 3, AllocsPerOp: 5,
- Measured: NsPerOp | MBPerS | AllocedBytesPerOp | AllocsPerOp,
- },
- },
- // error handling cases
- {
- line: "BenchPress 100 19.6 ns/op", // non-benchmark
- err: true,
- },
- {
- line: "BenchmarkEncrypt lots 19.6 ns/op", // non-int iterations
- err: true,
- },
- {
- line: "BenchmarkBridge 100000000 19.6 smoots", // unknown unit
- want: &Benchmark{
- Name: "BenchmarkBridge",
- N: 100000000,
- },
- },
- {
- line: "PASS",
- err: true,
- },
- }
-
- for _, tt := range cases {
- have, err := ParseLine(tt.line)
- if tt.err && err == nil {
- t.Errorf("parsing line %q should have failed", tt.line)
- continue
- }
- if !reflect.DeepEqual(have, tt.want) {
- t.Errorf("parsed line %q incorrectly, want %v have %v", tt.line, tt.want, have)
- }
- }
-}
-
-func TestParseSet(t *testing.T) {
- // Test two things:
- // 1. The noise that can accompany testing.B output gets ignored.
- // 2. Benchmarks with the same name have their order preserved.
- in := `
- ? crypto [no test files]
- PASS
- pem_decrypt_test.go:17: test 4. %!s(x509.PEMCipher=5)
- ... [output truncated]
-
- BenchmarkEncrypt 100000000 19.6 ns/op
- BenchmarkEncrypt 5000000 517 ns/op
- === RUN TestChunk
- --- PASS: TestChunk (0.00 seconds)
- --- SKIP: TestLinuxSendfile (0.00 seconds)
- fs_test.go:716: skipping; linux-only test
- BenchmarkReadRequestApachebench 1000000 2960 ns/op 27.70 MB/s 839 B/op 9 allocs/op
- BenchmarkClientServerParallel64 50000 59192 ns/op 7028 B/op 60 allocs/op
- ok net/http 95.783s
- `
-
- want := Set{
- "BenchmarkReadRequestApachebench": []*Benchmark{
- {
- Name: "BenchmarkReadRequestApachebench",
- N: 1000000, NsPerOp: 2960, MBPerS: 27.70, AllocedBytesPerOp: 839, AllocsPerOp: 9,
- Measured: NsPerOp | MBPerS | AllocedBytesPerOp | AllocsPerOp,
- Ord: 2,
- },
- },
- "BenchmarkClientServerParallel64": []*Benchmark{
- {
- Name: "BenchmarkClientServerParallel64",
- N: 50000, NsPerOp: 59192, AllocedBytesPerOp: 7028, AllocsPerOp: 60,
- Measured: NsPerOp | AllocedBytesPerOp | AllocsPerOp,
- Ord: 3,
- },
- },
- "BenchmarkEncrypt": []*Benchmark{
- {
- Name: "BenchmarkEncrypt",
- N: 100000000, NsPerOp: 19.6,
- Measured: NsPerOp,
- Ord: 0,
- },
- {
- Name: "BenchmarkEncrypt",
- N: 5000000, NsPerOp: 517,
- Measured: NsPerOp,
- Ord: 1,
- },
- },
- }
-
- have, err := ParseSet(strings.NewReader(in))
- if err != nil {
- t.Fatalf("unexpected err during ParseSet: %v", err)
- }
- if !reflect.DeepEqual(want, have) {
- t.Errorf("parsed bench set incorrectly, want %v have %v", want, have)
- }
-}
-
-func TestString(t *testing.T) {
- tests := []struct {
- name string
- input *Benchmark
- wanted string
- }{
- {
- name: "nsTest",
- input: &Benchmark{
- Name: "BenchmarkTest",
- N: 100000000, NsPerOp: 19.6,
- Measured: NsPerOp,
- },
- wanted: "BenchmarkTest 100000000 19.60 ns/op",
- },
- {
- name: "mbTest",
- input: &Benchmark{
- Name: "BenchmarkTest",
- N: 100000000, MBPerS: 19.6,
- Measured: MBPerS,
- },
- wanted: "BenchmarkTest 100000000 19.60 MB/s",
- },
- {
- name: "allocatedBytesTest",
- input: &Benchmark{
- Name: "BenchmarkTest",
- N: 100000000, AllocedBytesPerOp: 5,
- Measured: AllocedBytesPerOp,
- },
- wanted: "BenchmarkTest 100000000 5 B/op",
- },
- {
- name: "allocsTest",
- input: &Benchmark{
- Name: "BenchmarkTest",
- N: 100000000, AllocsPerOp: 5,
- Measured: AllocsPerOp,
- },
- wanted: "BenchmarkTest 100000000 5 allocs/op",
- },
- }
-
- for _, tt := range tests {
- t.Run(tt.name, func(t *testing.T) {
- result := tt.input.String()
- if result != tt.wanted {
- t.Errorf("String() is called, want %q, have %q", tt.wanted, result)
- }
- })
- }
-}