github.com/fiatjaf/generic-ristretto@v0.0.1/store_test.go (about) 1 package ristretto 2 3 // 4 //import ( 5 // "testing" 6 // "time" 7 // 8 // "github.com/fiatjaf/generic-ristretto/z" 9 // "github.com/stretchr/testify/require" 10 //) 11 // 12 //func TestStoreSetGet(t *testing.T) { 13 // s := newStore() 14 // key, conflict := z.KeyToHash(1) 15 // i := Item[int]{ 16 // Key: key, 17 // Conflict: conflict, 18 // Value: 2, 19 // } 20 // s.Set(&i) 21 // val, ok := s.Get(key, conflict) 22 // require.True(t, ok) 23 // require.Equal(t, 2, val.(int)) 24 // 25 // i.Value = 3 26 // s.Set(&i) 27 // val, ok = s.Get(key, conflict) 28 // require.True(t, ok) 29 // require.Equal(t, 3, val.(int)) 30 // 31 // key, conflict = z.KeyToHash(2) 32 // i = Item{ 33 // Key: key, 34 // Conflict: conflict, 35 // Value: 2, 36 // } 37 // s.Set(&i) 38 // val, ok = s.Get(key, conflict) 39 // require.True(t, ok) 40 // require.Equal(t, 2, val.(int)) 41 //} 42 // 43 //func TestStoreDel(t *testing.T) { 44 // s := newStore() 45 // key, conflict := z.KeyToHash(1) 46 // i := Item{ 47 // Key: key, 48 // Conflict: conflict, 49 // Value: 1, 50 // } 51 // s.Set(&i) 52 // s.Del(key, conflict) 53 // val, ok := s.Get(key, conflict) 54 // require.False(t, ok) 55 // require.Nil(t, val) 56 // 57 // s.Del(2, 0) 58 //} 59 // 60 //func TestStoreClear(t *testing.T) { 61 // s := newStore() 62 // for i := uint64(0); i < 1000; i++ { 63 // key, conflict := z.KeyToHash(i) 64 // it := Item{ 65 // Key: key, 66 // Conflict: conflict, 67 // Value: i, 68 // } 69 // s.Set(&it) 70 // } 71 // s.Clear(nil) 72 // for i := uint64(0); i < 1000; i++ { 73 // key, conflict := z.KeyToHash(i) 74 // val, ok := s.Get(key, conflict) 75 // require.False(t, ok) 76 // require.Nil(t, val) 77 // } 78 //} 79 // 80 //func TestStoreUpdate(t *testing.T) { 81 // s := newStore() 82 // key, conflict := z.KeyToHash(1) 83 // i := Item{ 84 // Key: key, 85 // Conflict: conflict, 86 // Value: 1, 87 // } 88 // s.Set(&i) 89 // i.Value = 2 90 // _, ok := s.Update(&i) 91 // require.True(t, ok) 92 // 93 // val, ok := s.Get(key, conflict) 94 // require.True(t, ok) 95 // require.NotNil(t, val) 96 // 97 // val, ok = s.Get(key, conflict) 98 // require.True(t, ok) 99 // require.Equal(t, 2, val.(int)) 100 // 101 // i.Value = 3 102 // _, ok = s.Update(&i) 103 // require.True(t, ok) 104 // 105 // val, ok = s.Get(key, conflict) 106 // require.True(t, ok) 107 // require.Equal(t, 3, val.(int)) 108 // 109 // key, conflict = z.KeyToHash(2) 110 // i = Item{ 111 // Key: key, 112 // Conflict: conflict, 113 // Value: 2, 114 // } 115 // _, ok = s.Update(&i) 116 // require.False(t, ok) 117 // val, ok = s.Get(key, conflict) 118 // require.False(t, ok) 119 // require.Nil(t, val) 120 //} 121 // 122 //func TestStoreCollision(t *testing.T) { 123 // s := newShardedMap() 124 // s.shards[1].Lock() 125 // s.shards[1].data[1] = storeItem{ 126 // key: 1, 127 // conflict: 0, 128 // value: 1, 129 // } 130 // s.shards[1].Unlock() 131 // val, ok := s.Get(1, 1) 132 // require.False(t, ok) 133 // require.Nil(t, val) 134 // 135 // i := Item{ 136 // Key: 1, 137 // Conflict: 1, 138 // Value: 2, 139 // } 140 // s.Set(&i) 141 // val, ok = s.Get(1, 0) 142 // require.True(t, ok) 143 // require.NotEqual(t, 2, val.(int)) 144 // 145 // _, ok = s.Update(&i) 146 // require.False(t, ok) 147 // val, ok = s.Get(1, 0) 148 // require.True(t, ok) 149 // require.NotEqual(t, 2, val.(int)) 150 // 151 // s.Del(1, 1) 152 // val, ok = s.Get(1, 0) 153 // require.True(t, ok) 154 // require.NotNil(t, val) 155 //} 156 // 157 //func TestStoreExpiration(t *testing.T) { 158 // s := newStore() 159 // key, conflict := z.KeyToHash(1) 160 // expiration := time.Now().Add(time.Second) 161 // i := Item{ 162 // Key: key, 163 // Conflict: conflict, 164 // Value: 1, 165 // Expiration: expiration, 166 // } 167 // s.Set(&i) 168 // val, ok := s.Get(key, conflict) 169 // require.True(t, ok) 170 // require.Equal(t, 1, val.(int)) 171 // 172 // ttl := s.Expiration(key) 173 // require.Equal(t, expiration, ttl) 174 // 175 // s.Del(key, conflict) 176 // 177 // _, ok = s.Get(key, conflict) 178 // require.False(t, ok) 179 // require.True(t, s.Expiration(key).IsZero()) 180 // 181 // // missing item 182 // key, _ = z.KeyToHash(4340958203495) 183 // ttl = s.Expiration(key) 184 // require.True(t, ttl.IsZero()) 185 //} 186 // 187 //func BenchmarkStoreGet(b *testing.B) { 188 // s := newStore() 189 // key, conflict := z.KeyToHash(1) 190 // i := Item{ 191 // Key: key, 192 // Conflict: conflict, 193 // Value: 1, 194 // } 195 // s.Set(&i) 196 // b.SetBytes(1) 197 // b.RunParallel(func(pb *testing.PB) { 198 // for pb.Next() { 199 // s.Get(key, conflict) 200 // } 201 // }) 202 //} 203 // 204 //func BenchmarkStoreSet(b *testing.B) { 205 // s := newStore() 206 // key, conflict := z.KeyToHash(1) 207 // b.SetBytes(1) 208 // b.RunParallel(func(pb *testing.PB) { 209 // for pb.Next() { 210 // i := Item{ 211 // Key: key, 212 // Conflict: conflict, 213 // Value: 1, 214 // } 215 // s.Set(&i) 216 // } 217 // }) 218 //} 219 // 220 //func BenchmarkStoreUpdate(b *testing.B) { 221 // s := newStore() 222 // key, conflict := z.KeyToHash(1) 223 // i := Item{ 224 // Key: key, 225 // Conflict: conflict, 226 // Value: 1, 227 // } 228 // s.Set(&i) 229 // b.SetBytes(1) 230 // b.RunParallel(func(pb *testing.PB) { 231 // for pb.Next() { 232 // s.Update(&Item{ 233 // Key: key, 234 // Conflict: conflict, 235 // Value: 2, 236 // }) 237 // } 238 // }) 239 //}