package gcache_test import ( "fmt" "testing" "time" "github.com/bluele/gcache" ) func buildARCache(size int) gcache.Cache { return gcache.New(size). ARC(). EvictedFunc(evictedFuncForARC). Build() } func buildLoadingARCache(size int) gcache.Cache { return gcache.New(size). ARC(). LoaderFunc(loader). EvictedFunc(evictedFuncForARC). Build() } func buildLoadingARCacheWithExpiration(size int, ep time.Duration) gcache.Cache { return gcache.New(size). ARC(). Expiration(ep). LoaderFunc(loader). EvictedFunc(evictedFuncForARC). Build() } func evictedFuncForARC(key, value interface{}) { fmt.Printf("[ARC] Key:%v Value:%v will evicted.\n", key, value) } func TestARCGet(t *testing.T) { size := 1000 gc := buildARCache(size) testSetCache(t, gc, size) testGetCache(t, gc, size) } func TestLoadingARCGet(t *testing.T) { size := 1000 numbers := 1000 testGetCache(t, buildLoadingARCache(size), numbers) } func TestARCLength(t *testing.T) { gc := buildLoadingARCacheWithExpiration(2, time.Millisecond) gc.Get("test1") gc.Get("test2") gc.Get("test3") length := gc.Len() expectedLength := 2 if length != expectedLength { t.Errorf("Expected length is %v, not %v", expectedLength, length) } time.Sleep(time.Millisecond) gc.Get("test4") length = gc.Len() expectedLength = 1 if length != expectedLength { t.Errorf("Expected length is %v, not %v", expectedLength, length) } } func TestARCEvictItem(t *testing.T) { cacheSize := 10 numbers := 11 gc := buildLoadingARCache(cacheSize) for i := 0; i < numbers; i++ { _, err := gc.Get(fmt.Sprintf("Key-%d", i)) if err != nil { t.Errorf("Unexpected error: %v", err) } } } func TestARCGetIFPresent(t *testing.T) { testGetIFPresent(t, gcache.TYPE_ARC) } func TestARCGetALL(t *testing.T) { testGetALL(t, gcache.TYPE_ARC) }