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  //}