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