155 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			Go
		
	
	
	
			
		
		
	
	
			155 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			Go
		
	
	
	
| // 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)
 | |
| 	}
 | |
| }
 |