@@ -7,68 +7,62 @@ import (
77)
88
99func TestCircularCache (t * testing.T ) {
10+ cache , err := New (- 1 )
11+ require .Nil (t , cache )
12+ require .Error (t , err )
13+
1014 size := 10
11- cache , err : = New (size )
15+ cache , err = New (size )
1216 require .NoError (t , err )
1317 // fill up cache
1418 for i := 1 ; i <= size ; i ++ {
1519 evicted := cache .Add (i , i )
1620 require .False (t , evicted )
1721 }
18- require .Equal (t , cache .Len (), size )
19- back , ok := cache .Peek (1 )
20- require .True (t , ok )
21- two , ok := cache .Peek (2 )
22- require .True (t , ok )
23- front , ok := cache .Peek (10 )
24- require .True (t , ok )
25- _ , ok = cache .Peek (11 )
26- require .False (t , ok )
2722
28- require .Equal (t , back , 1 )
29- require .Equal (t , two , 2 )
30- require .Equal (t , front , 10 )
23+ // adding same key on the same position but no evict becuase the evict is nil
24+ require .True (t , cache .Contains (1 ))
25+ val , _ := cache .Get (1 )
26+ require .Equal (t , 1 , val )
27+ evicted := cache .Add (1 , 11 )
28+ require .False (t , evicted )
29+ require .True (t , cache .Contains (1 ))
30+ val , _ = cache .Get (1 )
31+ require .Equal (t , 11 , val )
3132
3233 // add one more item when the cache is full
33- // 11 will replace the oldest item, a.k.a 1
34- evicted := cache .Add (11 , 11 )
35- require .True (t , evicted )
36- require .Equal (t , cache .Len (), size )
37-
38- eleven , ok := cache .Peek (11 )
39- require .True (t , ok )
40- require .Equal (t , eleven , 11 )
41- _ , ok = cache .Peek (1 )
34+ // 11 will replace the next position, a.k.a 2
35+ require .True (t , cache .Contains (2 ))
36+ val , ok := cache .Get (11 )
37+ require .Nil (t , val )
4238 require .False (t , ok )
39+ evicted = cache .Add (11 , 11 )
40+ require .False (t , evicted )
41+ require .False (t , cache .Contains (2 ))
4342
44- // 12 will replace 11
45- evicted = cache .Add (12 , 12 )
46- require .True (t , evicted )
47- require .Equal (t , cache .Len (), size )
48-
49- twelve , ok := cache .Get (12 ) // 12 is moved to front
50- require .True (t , ok )
51- require .Equal (t , twelve , 12 )
52- _ , ok = cache .Peek (11 )
53- require .False (t , ok )
43+ // Remove
44+ require .True (t , cache .Contains (3 ))
45+ require .True (t , cache .Remove (3 ))
46+ require .False (t , cache .Remove (12 ))
47+ require .False (t , cache .Contains (3 ))
5448
55- // 13 will replace the oldest one, a.k.a 2
56- evicted = cache . Add ( 13 , 13 )
57- require . True ( t , evicted )
58- require .Equal (t , cache .Len (), size )
49+ // Purge
50+ require . True ( t , cache . Contains ( 6 ) )
51+ cache . Purge ( )
52+ require .False (t , cache .Contains ( 6 ) )
5953
60- _ , ok = cache .Peek (2 )
54+ // Add/Get nil value
55+ require .False (t , cache .Add (12 , nil ))
56+ val , ok = cache .Get (12 )
57+ require .Nil (t , val )
6158 require .False (t , ok )
62-
63- cache .Purge ()
64- require .Equal (t , cache .Len (), 0 )
6559}
6660
6761func TestCircularCacheWithCallback (t * testing.T ) {
6862 size := 10
6963 cache , err := NewWithEvict (size , func (key interface {}, value interface {}) {
70- require .Equal (t , key , 2 )
71- require .Equal (t , value , 2 )
64+ require .Equal (t , key , 1 )
65+ require .Equal (t , value , 1 )
7266 })
7367 require .NoError (t , err )
7468 // fill up cache
@@ -77,13 +71,16 @@ func TestCircularCacheWithCallback(t *testing.T) {
7771 require .False (t , evicted )
7872 }
7973
80- // re-add 1 to move it from back to front
74+ // re-add 1, evict callback fundtion will be called
75+ // and check that evicted item is 1/1
76+ require .True (t , cache .Contains (1 ))
8177 evicted := cache .Add (1 , 1 )
82- require .False (t , evicted )
78+ require .True (t , evicted )
79+ require .True (t , cache .Contains (1 ))
8380
84- // Add one more item, evict callback fundtion will be called
85- // and check that evicted item is 2/2, the oldest item
81+ // Add one more item into the next position, 2
82+ require . True ( t , cache . Contains ( 2 ))
8683 evicted = cache .Add (11 , 11 )
87- require .True (t , evicted )
88- require .Equal (t , cache .Len (), size )
84+ require .False (t , evicted )
85+ require .False (t , cache .Contains ( 2 ) )
8986}
0 commit comments