github.com/ava-labs/avalanchego@v1.11.11/cache/cachetest/cacher.go (about) 1 // Copyright (C) 2019-2024, Ava Labs, Inc. All rights reserved. 2 // See the file LICENSE for licensing terms. 3 4 package cachetest 5 6 import ( 7 "testing" 8 9 "github.com/stretchr/testify/require" 10 11 "github.com/ava-labs/avalanchego/cache" 12 "github.com/ava-labs/avalanchego/ids" 13 ) 14 15 const IntSize = ids.IDLen + 8 16 17 func IntSizeFunc(ids.ID, int64) int { 18 return IntSize 19 } 20 21 // Tests is a list of all Cacher tests 22 var Tests = []struct { 23 Size int 24 Func func(t *testing.T, c cache.Cacher[ids.ID, int64]) 25 }{ 26 {Size: 1, Func: TestBasic}, 27 {Size: 2, Func: TestEviction}, 28 } 29 30 func TestBasic(t *testing.T, cache cache.Cacher[ids.ID, int64]) { 31 require := require.New(t) 32 33 id1 := ids.ID{1} 34 _, found := cache.Get(id1) 35 require.False(found) 36 37 expectedValue1 := int64(1) 38 cache.Put(id1, expectedValue1) 39 value, found := cache.Get(id1) 40 require.True(found) 41 require.Equal(expectedValue1, value) 42 43 cache.Put(id1, expectedValue1) 44 value, found = cache.Get(id1) 45 require.True(found) 46 require.Equal(expectedValue1, value) 47 48 cache.Put(id1, expectedValue1) 49 value, found = cache.Get(id1) 50 require.True(found) 51 require.Equal(expectedValue1, value) 52 53 id2 := ids.ID{2} 54 55 expectedValue2 := int64(2) 56 cache.Put(id2, expectedValue2) 57 _, found = cache.Get(id1) 58 require.False(found) 59 60 value, found = cache.Get(id2) 61 require.True(found) 62 require.Equal(expectedValue2, value) 63 } 64 65 func TestEviction(t *testing.T, cache cache.Cacher[ids.ID, int64]) { 66 require := require.New(t) 67 68 id1 := ids.ID{1} 69 id2 := ids.ID{2} 70 id3 := ids.ID{3} 71 72 expectedValue1 := int64(1) 73 expectedValue2 := int64(2) 74 expectedValue3 := int64(3) 75 76 require.Zero(cache.Len()) 77 78 cache.Put(id1, expectedValue1) 79 80 require.Equal(1, cache.Len()) 81 82 cache.Put(id2, expectedValue2) 83 84 require.Equal(2, cache.Len()) 85 86 val, found := cache.Get(id1) 87 require.True(found) 88 require.Equal(expectedValue1, val) 89 90 val, found = cache.Get(id2) 91 require.True(found) 92 require.Equal(expectedValue2, val) 93 94 _, found = cache.Get(id3) 95 require.False(found) 96 97 cache.Put(id3, expectedValue3) 98 require.Equal(2, cache.Len()) 99 100 _, found = cache.Get(id1) 101 require.False(found) 102 103 val, found = cache.Get(id2) 104 require.True(found) 105 require.Equal(expectedValue2, val) 106 107 val, found = cache.Get(id3) 108 require.True(found) 109 require.Equal(expectedValue3, val) 110 111 cache.Get(id2) 112 cache.Put(id1, expectedValue1) 113 114 val, found = cache.Get(id1) 115 require.True(found) 116 require.Equal(expectedValue1, val) 117 118 val, found = cache.Get(id2) 119 require.True(found) 120 require.Equal(expectedValue2, val) 121 122 _, found = cache.Get(id3) 123 require.False(found) 124 125 cache.Evict(id2) 126 cache.Put(id3, expectedValue3) 127 128 val, found = cache.Get(id1) 129 require.True(found) 130 require.Equal(expectedValue1, val) 131 132 _, found = cache.Get(id2) 133 require.False(found) 134 135 val, found = cache.Get(id3) 136 require.True(found) 137 require.Equal(expectedValue3, val) 138 139 cache.Flush() 140 141 _, found = cache.Get(id1) 142 require.False(found) 143 _, found = cache.Get(id2) 144 require.False(found) 145 _, found = cache.Get(id3) 146 require.False(found) 147 }