-
Notifications
You must be signed in to change notification settings - Fork 0
/
bench_test.go
67 lines (56 loc) · 1.3 KB
/
bench_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
package ringbuffer_test
import (
//"fmt"
"ringbuffer"
"testing"
)
type benchBuffer ringbuffer.RingBuffer
// Write only a byte at a time.
func BenchmarkInsertByteEr(b *testing.B) {
rb := ringbuffer.New(b.N)
b.ResetTimer()
for i := 0; i < b.N; i++ {
e := rb.Write(byte(7))
if nil != e {
b.Fatalf("Write: %v\n", e)
}
}
}
// Write and Read, using a large-ish struct.
// it says 49 B/op. Makes sense.
func BenchmarkKitchenMedium(b *testing.B) {
rb := ringbuffer.New(b.N)
b.ResetTimer()
nnn := 0
for i := 0; i < b.N; i++ {
_ = rb.Write(&kitchenSink{words: "Benchmarking",
nums: [4]int{nnn, 1 + nnn, 2 + nnn, 3 + nnn}})
nnn += 4
}
//Should we check the values as they come out?
for j := 0; j < b.N; j++ {
ksTmp, ok := rb.Read().(*kitchenSink)
if !ok {
b.Fatalf("Read Type: %T\n", ksTmp)
}
}
}
// Same as above, copying the struct in and out.
// Copying is a little faster!!
func BenchmarkKitchenCopy(b *testing.B) {
rb := ringbuffer.New(b.N)
b.ResetTimer()
nnn := 0
for i := 0; i < b.N; i++ {
_ = rb.Write(kitchenSink{words: "Benchmarking",
nums: [4]int{nnn, 1 + nnn, 2 + nnn, 3 + nnn}})
nnn += 4
}
//Should we check the values as they come out?
for j := 0; j < b.N; j++ {
ksTmp, ok := rb.Read().(kitchenSink)
if !ok {
b.Fatalf("(Copy) Read Type: %T\n", ksTmp)
}
}
}