github.com/levb/mattermost-server@v5.3.1+incompatible/utils/lru_test.go (about) 1 // This files was copied/modified from https://github.com/hashicorp/golang-lru 2 // which was (see below) 3 4 // This package provides a simple LRU cache. It is based on the 5 // LRU implementation in groupcache: 6 // https://github.com/golang/groupcache/tree/master/lru 7 8 package utils 9 10 import "testing" 11 import "time" 12 13 func TestLRU(t *testing.T) { 14 l := NewLru(128) 15 16 for i := 0; i < 256; i++ { 17 l.Add(i, i) 18 } 19 if l.Len() != 128 { 20 t.Fatalf("bad len: %v", l.Len()) 21 } 22 23 for i, k := range l.Keys() { 24 if v, ok := l.Get(k); !ok || v != k || v != i+128 { 25 t.Fatalf("bad key: %v", k) 26 } 27 } 28 for i := 0; i < 128; i++ { 29 _, ok := l.Get(i) 30 if ok { 31 t.Fatalf("should be evicted") 32 } 33 } 34 for i := 128; i < 256; i++ { 35 _, ok := l.Get(i) 36 if !ok { 37 t.Fatalf("should not be evicted") 38 } 39 } 40 for i := 128; i < 192; i++ { 41 l.Remove(i) 42 _, ok := l.Get(i) 43 if ok { 44 t.Fatalf("should be deleted") 45 } 46 } 47 48 l.Get(192) // expect 192 to be last key in l.Keys() 49 50 for i, k := range l.Keys() { 51 if (i < 63 && k != i+193) || (i == 63 && k != 192) { 52 t.Fatalf("out of order key: %v", k) 53 } 54 } 55 56 l.Purge() 57 if l.Len() != 0 { 58 t.Fatalf("bad len: %v", l.Len()) 59 } 60 if _, ok := l.Get(200); ok { 61 t.Fatalf("should contain nothing") 62 } 63 } 64 65 func TestLRUExpire(t *testing.T) { 66 l := NewLru(128) 67 68 l.AddWithExpiresInSecs(1, 1, 1) 69 l.AddWithExpiresInSecs(2, 2, 1) 70 l.AddWithExpiresInSecs(3, 3, 0) 71 72 time.Sleep(time.Millisecond * 2100) 73 74 if r1, ok := l.Get(1); ok { 75 t.Fatal(r1) 76 } 77 78 if _, ok2 := l.Get(3); !ok2 { 79 t.Fatal("should exist") 80 } 81 }