github.com/cybriq/giocore@v0.0.7-0.20210703034601-cfb9cb5f3900/text/lru_test.go (about) 1 // SPDX-License-Identifier: Unlicense OR MIT 2 3 package text 4 5 import ( 6 "strconv" 7 "testing" 8 9 "github.com/cybriq/giocore/op" 10 ) 11 12 func TestLayoutLRU(t *testing.T) { 13 c := new(layoutCache) 14 put := func(i int) { 15 c.Put(layoutKey{str: strconv.Itoa(i)}, nil) 16 } 17 get := func(i int) bool { 18 _, ok := c.Get(layoutKey{str: strconv.Itoa(i)}) 19 return ok 20 } 21 testLRU(t, put, get) 22 } 23 24 func TestPathLRU(t *testing.T) { 25 c := new(pathCache) 26 put := func(i int) { 27 c.Put(pathKey{str: strconv.Itoa(i)}, op.CallOp{}) 28 } 29 get := func(i int) bool { 30 _, ok := c.Get(pathKey{str: strconv.Itoa(i)}) 31 return ok 32 } 33 testLRU(t, put, get) 34 } 35 36 func testLRU(t *testing.T, put func(i int), get func(i int) bool) { 37 for i := 0; i < maxSize; i++ { 38 put(i) 39 } 40 for i := 0; i < maxSize; i++ { 41 if !get(i) { 42 t.Fatalf("key %d was evicted", i) 43 } 44 } 45 put(maxSize) 46 for i := 1; i < maxSize+1; i++ { 47 if !get(i) { 48 t.Fatalf("key %d was evicted", i) 49 } 50 } 51 if i := 0; get(i) { 52 t.Fatalf("key %d was not evicted", i) 53 } 54 }