@@ -22,8 +22,34 @@ import (
2222 "github.com/stretchr/testify/require"
2323)
2424
25+ func TestLRUCacheConfig_ApplyDefaults (t * testing.T ) {
26+ tests := []struct {
27+ name string
28+ input LRUCacheConfig
29+ expected LRUCacheConfig
30+ }{
31+ {
32+ name : "zero values get defaults" ,
33+ input : LRUCacheConfig {},
34+ expected : LRUCacheConfig {Size : 300 , TTL : 5 * time .Minute },
35+ },
36+ {
37+ name : "positive values are preserved" ,
38+ input : LRUCacheConfig {Size : 500 , TTL : 10 * time .Minute },
39+ expected : LRUCacheConfig {Size : 500 , TTL : 10 * time .Minute },
40+ },
41+ }
42+
43+ for _ , tt := range tests {
44+ t .Run (tt .name , func (t * testing.T ) {
45+ result := tt .input .applyDefaults ()
46+ require .Equal (t , tt .expected , result )
47+ })
48+ }
49+ }
50+
2551func TestLRUCache_Basic (t * testing.T ) {
26- cache := NewLRUCache (3 , time .Hour )
52+ cache := NewLRUCache (LRUCacheConfig { Size : 3 , TTL : time .Hour } )
2753
2854 // Initially empty
2955 require .Equal (t , 0 , cache .Size ())
@@ -45,7 +71,7 @@ func TestLRUCache_Basic(t *testing.T) {
4571}
4672
4773func TestLRUCache_SizeLimit (t * testing.T ) {
48- cache := NewLRUCache (2 , time .Hour )
74+ cache := NewLRUCache (LRUCacheConfig { Size : 2 , TTL : time .Hour } )
4975
5076 // Fill cache to capacity
5177 cache .Add ("key1" )
@@ -61,7 +87,7 @@ func TestLRUCache_SizeLimit(t *testing.T) {
6187}
6288
6389func TestLRUCache_LRUOrdering (t * testing.T ) {
64- cache := NewLRUCache (2 , time .Hour )
90+ cache := NewLRUCache (LRUCacheConfig { Size : 2 , TTL : time .Hour } )
6591
6692 // Add two keys
6793 cache .Add ("key1" )
@@ -78,7 +104,7 @@ func TestLRUCache_LRUOrdering(t *testing.T) {
78104}
79105
80106func TestLRUCache_TTL (t * testing.T ) {
81- cache := NewLRUCache (10 , 50 * time .Millisecond )
107+ cache := NewLRUCache (LRUCacheConfig { Size : 10 , TTL : 50 * time .Millisecond } )
82108
83109 cache .Add ("key1" )
84110 require .True (t , cache .Has ("key1" ))
@@ -89,7 +115,7 @@ func TestLRUCache_TTL(t *testing.T) {
89115}
90116
91117func TestLRUCache_Delete (t * testing.T ) {
92- cache := NewLRUCache (10 , time .Hour )
118+ cache := NewLRUCache (LRUCacheConfig { Size : 10 , TTL : time .Hour } )
93119
94120 cache .Add ("key1" )
95121 cache .Add ("key2" )
@@ -108,7 +134,7 @@ func TestLRUCache_Delete(t *testing.T) {
108134}
109135
110136func TestLRUCache_Clear (t * testing.T ) {
111- cache := NewLRUCache (10 , time .Hour )
137+ cache := NewLRUCache (LRUCacheConfig { Size : 10 , TTL : time .Hour } )
112138
113139 cache .Add ("key1" )
114140 cache .Add ("key2" )
@@ -123,7 +149,7 @@ func TestLRUCache_Clear(t *testing.T) {
123149}
124150
125151func TestLRUCache_ConcurrentAccess (t * testing.T ) {
126- cache := NewLRUCache (100 , time .Hour )
152+ cache := NewLRUCache (LRUCacheConfig { Size : 100 , TTL : time .Hour } )
127153
128154 // Test concurrent reads and writes
129155 done := make (chan bool , 10 )
@@ -162,7 +188,7 @@ func TestLRUCache_ConcurrentAccess(t *testing.T) {
162188// Benchmark tests for measuring LRU cache performance
163189
164190func BenchmarkLRUCache_Add (b * testing.B ) {
165- cache := NewLRUCache (1000 , time .Hour )
191+ cache := NewLRUCache (LRUCacheConfig { Size : 1000 , TTL : time .Hour } )
166192
167193 b .ResetTimer ()
168194 for i := 0 ; i < b .N ; i ++ {
@@ -171,7 +197,7 @@ func BenchmarkLRUCache_Add(b *testing.B) {
171197}
172198
173199func BenchmarkLRUCache_Has_Hit (b * testing.B ) {
174- cache := NewLRUCache (1000 , time .Hour )
200+ cache := NewLRUCache (LRUCacheConfig { Size : 1000 , TTL : time .Hour } )
175201
176202 // Pre-populate cache
177203 for i := 0 ; i < 500 ; i ++ {
@@ -185,7 +211,7 @@ func BenchmarkLRUCache_Has_Hit(b *testing.B) {
185211}
186212
187213func BenchmarkLRUCache_Has_Miss (b * testing.B ) {
188- cache := NewLRUCache (1000 , time .Hour )
214+ cache := NewLRUCache (LRUCacheConfig { Size : 1000 , TTL : time .Hour } )
189215
190216 // Pre-populate cache
191217 for i := 0 ; i < 500 ; i ++ {
@@ -199,7 +225,7 @@ func BenchmarkLRUCache_Has_Miss(b *testing.B) {
199225}
200226
201227func BenchmarkLRUCache_Mixed_ReadHeavy (b * testing.B ) {
202- cache := NewLRUCache (1000 , time .Hour )
228+ cache := NewLRUCache (LRUCacheConfig { Size : 1000 , TTL : time .Hour } )
203229
204230 // Pre-populate cache
205231 for i := 0 ; i < 100 ; i ++ {
@@ -217,7 +243,7 @@ func BenchmarkLRUCache_Mixed_ReadHeavy(b *testing.B) {
217243}
218244
219245func BenchmarkLRUCache_ConcurrentAccess (b * testing.B ) {
220- cache := NewLRUCache (1000 , time .Hour )
246+ cache := NewLRUCache (LRUCacheConfig { Size : 1000 , TTL : time .Hour } )
221247
222248 // Pre-populate cache
223249 for i := 0 ; i < 100 ; i ++ {
@@ -240,7 +266,7 @@ func BenchmarkLRUCache_ConcurrentAccess(b *testing.B) {
240266}
241267
242268func BenchmarkLRUCache_EvictionPressure (b * testing.B ) {
243- cache := NewLRUCache (50 , time .Hour ) // Small cache to force evictions
269+ cache := NewLRUCache (LRUCacheConfig { Size : 50 , TTL : time .Hour } ) // Small cache to force evictions
244270
245271 b .ResetTimer ()
246272 for i := 0 ; i < b .N ; i ++ {
0 commit comments