blob: 2b324135c20f829751236bdb9c8e0c936c6a5803 [file] [log] [blame]
package util
import (
"fmt"
"strconv"
"github.com/stretchr/testify/assert"
)
type myTestType struct {
A int
B string
}
func UnitTestCodec() LRUCodec {
return JSONCodec(&myTestType{})
}
func UnitTestLRUCache(t assert.TestingT, cache LRUCache) {
purge(t, cache)
N := 256
for i := 0; i < N; i++ {
cache.Add(strconv.Itoa(i), i)
}
// Make sure out keys are correct
assert.Equal(t, N, cache.Len())
cacheKeys := cache.Keys()
assert.Equal(t, N, len(cacheKeys))
for _, k := range cacheKeys {
assert.IsType(t, "", k)
v, ok := cache.Get(k)
assert.True(t, ok)
assert.IsType(t, 0, v)
assert.Equal(t, k, strconv.Itoa(v.(int)))
}
for i := 0; i < N; i++ {
found, ok := cache.Get(strconv.Itoa(i))
assert.True(t, ok)
assert.IsType(t, 0, found)
assert.Equal(t, found.(int), i)
}
for i := 0; i < N; i++ {
_, ok := cache.Get(strconv.Itoa(i))
assert.True(t, ok)
oldLen := cache.Len()
cache.Remove(strconv.Itoa(i))
assert.Equal(t, oldLen-1, cache.Len())
}
assert.Equal(t, 0, cache.Len())
// Add some TestStructs to make sure the codec works.
for i := 0; i < N; i++ {
strKey := "structkey-" + strconv.Itoa(i)
ts := &myTestType{
A: i,
B: fmt.Sprintf("Val %d", i),
}
cache.Add(strKey, ts)
assert.Equal(t, i+1, cache.Len())
foundTS, ok := cache.Get(strKey)
assert.True(t, ok)
assert.IsType(t, &myTestType{}, foundTS)
assert.Equal(t, ts, foundTS)
}
}
func purge(t assert.TestingT, cache LRUCache) {
for _, k := range cache.Keys() {
cache.Remove(k)
}
assert.Equal(t, 0, cache.Len())
}