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