|
1 | 1 | package cache_test
|
2 | 2 |
|
3 | 3 | import (
|
| 4 | + "math/rand" |
4 | 5 | "sync"
|
5 | 6 | "testing"
|
6 | 7 |
|
7 | 8 | cache "github.com/Code-Hex/go-generics-cache"
|
| 9 | + "github.com/Code-Hex/go-generics-cache/policy/clock" |
| 10 | + "github.com/Code-Hex/go-generics-cache/policy/fifo" |
| 11 | + "github.com/Code-Hex/go-generics-cache/policy/lfu" |
| 12 | + "github.com/Code-Hex/go-generics-cache/policy/lru" |
| 13 | + "github.com/Code-Hex/go-generics-cache/policy/mru" |
8 | 14 | )
|
9 | 15 |
|
10 | 16 | func TestMultiThreadIncr(t *testing.T) {
|
@@ -48,3 +54,52 @@ func TestMultiThreadDecr(t *testing.T) {
|
48 | 54 | t.Errorf("want %v but got %v", 0, counter)
|
49 | 55 | }
|
50 | 56 | }
|
| 57 | + |
| 58 | +func TestMultiThread(t *testing.T) { |
| 59 | + cases := []struct { |
| 60 | + name string |
| 61 | + policy cache.Option[int, int] |
| 62 | + }{ |
| 63 | + { |
| 64 | + name: "LRU", |
| 65 | + policy: cache.AsLRU[int, int](lru.WithCapacity(10)), |
| 66 | + }, |
| 67 | + { |
| 68 | + name: "MRU", |
| 69 | + policy: cache.AsMRU[int, int](mru.WithCapacity(10)), |
| 70 | + }, |
| 71 | + { |
| 72 | + name: "FIFO", |
| 73 | + policy: cache.AsFIFO[int, int](fifo.WithCapacity(10)), |
| 74 | + }, |
| 75 | + { |
| 76 | + name: "Clock", |
| 77 | + policy: cache.AsClock[int, int](clock.WithCapacity(10)), |
| 78 | + }, |
| 79 | + { |
| 80 | + name: "LFU", |
| 81 | + policy: cache.AsLFU[int, int](lfu.WithCapacity(10)), |
| 82 | + }, |
| 83 | + } |
| 84 | + for _, tc := range cases { |
| 85 | + tc := tc |
| 86 | + t.Run(tc.name, func(t *testing.T) { |
| 87 | + c := cache.New(tc.policy) |
| 88 | + var wg sync.WaitGroup |
| 89 | + for i := int64(0); i < 100; i++ { |
| 90 | + wg.Add(1) |
| 91 | + go func(i int64) { |
| 92 | + defer wg.Done() |
| 93 | + m := rand.New(rand.NewSource(i)) |
| 94 | + for n := 0; n < 100; n++ { |
| 95 | + key := m.Intn(100000) |
| 96 | + c.Set(key, m.Intn(100000)) |
| 97 | + c.Get(key) |
| 98 | + } |
| 99 | + }(i) |
| 100 | + } |
| 101 | + |
| 102 | + wg.Wait() |
| 103 | + }) |
| 104 | + } |
| 105 | +} |
0 commit comments