diff --git a/cache/cache_test.go b/cache/cache_test.go index d9bbe51..0ada46b 100644 --- a/cache/cache_test.go +++ b/cache/cache_test.go @@ -1,10 +1,11 @@ package cache_test import ( - "github.com/KyberNetwork/kutils/cache" - "github.com/stretchr/testify/require" "testing" "time" + + "github.com/KyberNetwork/kutils/cache" + "github.com/stretchr/testify/require" ) func TestCache(t *testing.T) { @@ -70,6 +71,18 @@ func TestCache(t *testing.T) { require.NoError(t, err) require.Equal(t, input, result) }) + t.Run("Slice Types", func(t *testing.T) { + sCache := cache.NewCache(ct.config) + key := "sliceTest" + input := []*example{{Name: "pointer", Age: 25, Value: 100}} + err := sCache.Set(key, input, time.Minute) + require.NoError(t, err) + + var result []*example + err = sCache.Get(key, &result) + require.NoError(t, err) + require.Equal(t, input, result) + }) t.Run("Non-existent Key", func(t *testing.T) { sCache := cache.NewCache(ct.config) diff --git a/cache/ristretto_cache.go b/cache/ristretto_cache.go index 348b19e..b59f147 100644 --- a/cache/ristretto_cache.go +++ b/cache/ristretto_cache.go @@ -118,7 +118,7 @@ func alignTypes(target, value reflect.Value) reflect.Value { // Handle slices within maps if v.Kind() == reflect.Slice { - sliceType := reflect.TypeOf([]int{}) // Create the correct slice type + sliceType := value.Type() // Create the correct slice type newSlice := reflect.MakeSlice(sliceType, v.Len(), v.Cap()) for i := 0; i < v.Len(); i++ { @@ -138,7 +138,7 @@ func alignTypes(target, value reflect.Value) reflect.Value { // Handle slice type conversion if target.Kind() == reflect.Slice && value.Kind() == reflect.Slice { - sliceType := reflect.TypeOf([]int{}) + sliceType := value.Type() newSlice := reflect.MakeSlice(sliceType, value.Len(), value.Cap()) for i := 0; i < value.Len(); i++ { elem := value.Index(i)