github.com/MetalBlockchain/metalgo@v1.11.9/cache/unique_cache_test.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 type evictable[K comparable] struct { 15 id K 16 evicted int 17 } 18 19 func (e *evictable[K]) Key() K { 20 return e.id 21 } 22 23 func (e *evictable[_]) Evict() { 24 e.evicted++ 25 } 26 27 func TestEvictableLRU(t *testing.T) { 28 require := require.New(t) 29 30 cache := EvictableLRU[ids.ID, *evictable[ids.ID]]{} 31 32 expectedValue1 := &evictable[ids.ID]{id: ids.ID{1}} 33 require.Equal(expectedValue1, cache.Deduplicate(expectedValue1)) 34 require.Zero(expectedValue1.evicted) 35 require.Equal(expectedValue1, cache.Deduplicate(expectedValue1)) 36 require.Zero(expectedValue1.evicted) 37 38 expectedValue2 := &evictable[ids.ID]{id: ids.ID{2}} 39 returnedValue := cache.Deduplicate(expectedValue2) 40 require.Equal(expectedValue2, returnedValue) 41 require.Equal(1, expectedValue1.evicted) 42 require.Zero(expectedValue2.evicted) 43 44 cache.Size = 2 45 46 expectedValue3 := &evictable[ids.ID]{id: ids.ID{2}} 47 returnedValue = cache.Deduplicate(expectedValue3) 48 require.Equal(expectedValue2, returnedValue) 49 require.Equal(1, expectedValue1.evicted) 50 require.Zero(expectedValue2.evicted) 51 52 cache.Flush() 53 require.Equal(1, expectedValue1.evicted) 54 require.Equal(1, expectedValue2.evicted) 55 require.Zero(expectedValue3.evicted) 56 }