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  }