8 func Benchmark2Q_Rand(b *testing.B) {
11 b.Fatalf("err: %v", err)
14 trace := make([]int64, b.N*2)
15 for i := 0; i < b.N*2; i++ {
16 trace[i] = rand.Int63() % 32768
22 for i := 0; i < 2*b.N; i++ {
24 l.Add(trace[i], trace[i])
26 _, ok := l.Get(trace[i])
34 b.Logf("hit: %d miss: %d ratio: %f", hit, miss, float64(hit)/float64(miss))
37 func Benchmark2Q_Freq(b *testing.B) {
40 b.Fatalf("err: %v", err)
43 trace := make([]int64, b.N*2)
44 for i := 0; i < b.N*2; i++ {
46 trace[i] = rand.Int63() % 16384
48 trace[i] = rand.Int63() % 32768
54 for i := 0; i < b.N; i++ {
55 l.Add(trace[i], trace[i])
58 for i := 0; i < b.N; i++ {
59 _, ok := l.Get(trace[i])
66 b.Logf("hit: %d miss: %d ratio: %f", hit, miss, float64(hit)/float64(miss))
69 func Test2Q_RandomOps(t *testing.T) {
73 t.Fatalf("err: %v", err)
77 for i := 0; i < n; i++ {
78 key := rand.Int63() % 512
89 if l.recent.Len()+l.frequent.Len() > size {
90 t.Fatalf("bad: recent: %d freq: %d",
91 l.recent.Len(), l.frequent.Len())
96 func Test2Q_Get_RecentToFrequent(t *testing.T) {
99 t.Fatalf("err: %v", err)
102 // Touch all the entries, should be in t1
103 for i := 0; i < 128; i++ {
106 if n := l.recent.Len(); n != 128 {
107 t.Fatalf("bad: %d", n)
109 if n := l.frequent.Len(); n != 0 {
110 t.Fatalf("bad: %d", n)
113 // Get should upgrade to t2
114 for i := 0; i < 128; i++ {
117 t.Fatalf("missing: %d", i)
120 if n := l.recent.Len(); n != 0 {
121 t.Fatalf("bad: %d", n)
123 if n := l.frequent.Len(); n != 128 {
124 t.Fatalf("bad: %d", n)
128 for i := 0; i < 128; i++ {
131 t.Fatalf("missing: %d", i)
134 if n := l.recent.Len(); n != 0 {
135 t.Fatalf("bad: %d", n)
137 if n := l.frequent.Len(); n != 128 {
138 t.Fatalf("bad: %d", n)
142 func Test2Q_Add_RecentToFrequent(t *testing.T) {
145 t.Fatalf("err: %v", err)
148 // Add initially to recent
150 if n := l.recent.Len(); n != 1 {
151 t.Fatalf("bad: %d", n)
153 if n := l.frequent.Len(); n != 0 {
154 t.Fatalf("bad: %d", n)
157 // Add should upgrade to frequent
159 if n := l.recent.Len(); n != 0 {
160 t.Fatalf("bad: %d", n)
162 if n := l.frequent.Len(); n != 1 {
163 t.Fatalf("bad: %d", n)
166 // Add should remain in frequent
168 if n := l.recent.Len(); n != 0 {
169 t.Fatalf("bad: %d", n)
171 if n := l.frequent.Len(); n != 1 {
172 t.Fatalf("bad: %d", n)
176 func Test2Q_Add_RecentEvict(t *testing.T) {
179 t.Fatalf("err: %v", err)
182 // Add 1,2,3,4,5 -> Evict 1
188 if n := l.recent.Len(); n != 4 {
189 t.Fatalf("bad: %d", n)
191 if n := l.recentEvict.Len(); n != 1 {
192 t.Fatalf("bad: %d", n)
194 if n := l.frequent.Len(); n != 0 {
195 t.Fatalf("bad: %d", n)
198 // Pull in the recently evicted
200 if n := l.recent.Len(); n != 3 {
201 t.Fatalf("bad: %d", n)
203 if n := l.recentEvict.Len(); n != 1 {
204 t.Fatalf("bad: %d", n)
206 if n := l.frequent.Len(); n != 1 {
207 t.Fatalf("bad: %d", n)
210 // Add 6, should cause another recent evict
212 if n := l.recent.Len(); n != 3 {
213 t.Fatalf("bad: %d", n)
215 if n := l.recentEvict.Len(); n != 2 {
216 t.Fatalf("bad: %d", n)
218 if n := l.frequent.Len(); n != 1 {
219 t.Fatalf("bad: %d", n)
223 func Test2Q(t *testing.T) {
226 t.Fatalf("err: %v", err)
229 for i := 0; i < 256; i++ {
233 t.Fatalf("bad len: %v", l.Len())
236 for i, k := range l.Keys() {
237 if v, ok := l.Get(k); !ok || v != k || v != i+128 {
238 t.Fatalf("bad key: %v", k)
241 for i := 0; i < 128; i++ {
244 t.Fatalf("should be evicted")
247 for i := 128; i < 256; i++ {
250 t.Fatalf("should not be evicted")
253 for i := 128; i < 192; i++ {
257 t.Fatalf("should be deleted")
263 t.Fatalf("bad len: %v", l.Len())
265 if _, ok := l.Get(200); ok {
266 t.Fatalf("should contain nothing")
270 // Test that Contains doesn't update recent-ness
271 func Test2Q_Contains(t *testing.T) {
274 t.Fatalf("err: %v", err)
280 t.Errorf("1 should be contained")
285 t.Errorf("Contains should not have updated recent-ness of 1")
289 // Test that Peek doesn't update recent-ness
290 func Test2Q_Peek(t *testing.T) {
293 t.Fatalf("err: %v", err)
298 if v, ok := l.Peek(1); !ok || v != 1 {
299 t.Errorf("1 should be set to 1: %v, %v", v, ok)
304 t.Errorf("should not have updated recent-ness of 1")