boolmap - nibblemap_test.go
1 package boolmap
2
3 import "testing"
4
5 var (
6 _ testMap = &NibbleMap{}
7 _ testSlice = &NibbleSlice{}
8 )
9
10 func TestNibbleMap(t *testing.T) {
11 tests := []struct {
12 val byte
13 pos uint64
14 repeat bool
15 }{
16 {1, 0, false},
17 {0, 0, false},
18 {15, 0, false},
19 {15, 1, true},
20 {6, 0, true},
21 {12, 3, true},
22 {5, 4, true},
23 {14, 33, true},
24 }
25
26 m := NewNibbleMap()
27
28 for n, test := range tests {
29 m.Set(test.pos, test.val)
30 if g := m.Get(test.pos); g != test.val {
31 t.Errorf("test %d-1: expecting %d, got %d", n+1, test.val, g)
32 }
33 }
34 for n, test := range tests {
35 if !test.repeat {
36 continue
37 }
38 if g := m.Get(test.pos); g != test.val {
39 t.Errorf("test %d-2: expecting %d, got %d", n+1, test.val, g)
40 }
41 }
42 }
43
44 func TestNibbleSlice(t *testing.T) {
45 tests := []struct {
46 val byte
47 pos uint
48 repeat bool
49 }{
50 {1, 0, false},
51 {0, 0, false},
52 {15, 0, false},
53 {15, 1, true},
54 {6, 0, true},
55 {12, 3, true},
56 {5, 4, true},
57 {14, 33, true},
58 }
59
60 s := NewNibbleSlice()
61
62 for n, test := range tests {
63 s.Set(test.pos, test.val)
64 if g := s.Get(test.pos); g != test.val {
65 t.Errorf("test %d-1: expecting %d, got %d", n+1, test.val, g)
66 }
67 }
68 for n, test := range tests {
69 if !test.repeat {
70 continue
71 }
72 if g := s.Get(test.pos); g != test.val {
73 t.Errorf("test %d-2: expecting %d, got %d", n+1, test.val, g)
74 }
75 }
76 }
77
78 func BenchmarkNibbleMap(b *testing.B) {
79 m := NewNibbleMap()
80 for n := 0; n < b.N; n++ {
81 for i := uint64(0); i < 100; i++ {
82 m.Set(i, byte(i&15))
83 }
84 }
85 }
86
87 func BenchmarkNonNibbleMap(b *testing.B) {
88 m := make(map[uint64]byte)
89 for n := 0; n < b.N; n++ {
90 for i := uint64(0); i < 100; i++ {
91 m[i] = byte(i & 15)
92 }
93 }
94 }