| Index: go/util/testing.go
|
| diff --git a/go/util/testing.go b/go/util/testing.go
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..7badf8700532493927c39d8a841e3eb9d3144df6
|
| --- /dev/null
|
| +++ b/go/util/testing.go
|
| @@ -0,0 +1,77 @@
|
| +package util
|
| +
|
| +import (
|
| + "fmt"
|
| + "strconv"
|
| + "testing"
|
| +
|
| + "github.com/stretchr/testify/assert"
|
| +)
|
| +
|
| +type myTestType struct {
|
| + A int
|
| + B string
|
| +}
|
| +
|
| +func UnitTestCodec() LRUCodec {
|
| + return JSONCodec(&myTestType{})
|
| +}
|
| +
|
| +func UnitTestLRUCache(t *testing.T, 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 *testing.T, cache LRUCache) {
|
| + for _, k := range cache.Keys() {
|
| + cache.Remove(k)
|
| + }
|
| + assert.Equal(t, 0, cache.Len())
|
| +}
|
|
|