okami.mom/ultraviolet

git clone https://git.nkp.pet/okami.mom/ultraviolet

Vadimperf(layout): add LRU cache for layout splitting (#91)227cc8b

main
937 B52 linesraw
1package lru
2
3import (
4	"strconv"
5	"testing"
6)
7
8func TestLRU(t *testing.T) {
9	const size = 20
10
11	cache := New[int, string](size)
12
13	val := strconv.Itoa
14
15	for i := range size {
16		v := val(i)
17
18		if cache.Add(i, v) {
19			t.Fatalf("Cache.Add: value evicted before size limit at %d", i)
20		}
21
22		got, ok := cache.Get(i)
23		if !ok {
24			t.Fatalf("Cache.Get: value not found at key %d", i)
25		}
26
27		if v != got {
28			t.Fatalf("Cache.Get: value at key %d not equal: want %q, got %q", i, v, got)
29		}
30	}
31
32	if !cache.Add(size, val(size)) {
33		t.Fatalf("Cache.Add: value not evicted after limit at %d", size)
34	}
35
36	if _, ok := cache.Get(0); ok {
37		t.Fatalf("Cache.Get: value at key %d not evicted", 0)
38	}
39
40	for i := 1; i <= size; i++ {
41		got, ok := cache.Get(i)
42		if !ok {
43			t.Fatalf("Cache.Get: value not found at key %d", i)
44		}
45
46		want := val(i)
47
48		if want != got {
49			t.Fatalf("Cache.Get: value at key %d not equal: want %q, got %q", i, want, got)
50		}
51	}
52}