Skip to content

Commit 3b773d1

Browse files
committed
Add insert benchmark
Signed-off-by: Sam Batschelet <[email protected]>
1 parent 156dfcd commit 3b773d1

File tree

1 file changed

+57
-20
lines changed

1 file changed

+57
-20
lines changed

tstate/tstate_test.go

+57-20
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ func TestGetValue(t *testing.T) {
5555
_, err := ts.GetValue(ctx, TestKey)
5656
require.ErrorIs(err, ErrKeyNotSpecified, "No error thrown.")
5757
// SetScope
58-
ts.SetScope(ctx, [][]byte{TestKey}, map[Key][]byte{ToStateKeyArray(TestKey): TestVal})
58+
ts.SetScope(ctx, [][]byte{TestKey}, map[*Key][]byte{ToStateKeyArray(TestKey): TestVal})
5959
val, err := ts.GetValue(ctx, TestKey)
6060
require.NoError(err, "Error getting value.")
6161
require.Equal(TestVal, val, "Value was not saved correctly.")
@@ -66,7 +66,7 @@ func TestGetValueNoStorage(t *testing.T) {
6666
ctx := context.TODO()
6767
ts := New(10)
6868
// SetScope but dont add to storage
69-
ts.SetScope(ctx, [][]byte{TestKey}, map[Key][]byte{})
69+
ts.SetScope(ctx, [][]byte{TestKey}, map[*Key][]byte{})
7070
_, err := ts.GetValue(ctx, TestKey)
7171
require.ErrorIs(database.ErrNotFound, err, "No error thrown.")
7272
}
@@ -79,7 +79,7 @@ func TestInsertNew(t *testing.T) {
7979
err := ts.Insert(ctx, TestKey, TestVal)
8080
require.ErrorIs(ErrKeyNotSpecified, err, "No error thrown.")
8181
// SetScope
82-
ts.SetScope(ctx, [][]byte{TestKey}, map[Key][]byte{})
82+
ts.SetScope(ctx, [][]byte{TestKey}, map[*Key][]byte{})
8383
// Insert key
8484
err = ts.Insert(ctx, TestKey, TestVal)
8585
require.NoError(err, "Error thrown.")
@@ -94,7 +94,7 @@ func TestInsertUpdate(t *testing.T) {
9494
ctx := context.TODO()
9595
ts := New(10)
9696
// SetScope and add
97-
ts.SetScope(ctx, [][]byte{TestKey}, map[Key][]byte{ToStateKeyArray(TestKey): TestVal})
97+
ts.SetScope(ctx, [][]byte{TestKey}, map[*Key][]byte{ToStateKeyArray(TestKey): TestVal})
9898
require.Equal(0, ts.OpIndex(), "SetStorage operation was not added.")
9999
// Insert key
100100
newVal := []byte("newVal")
@@ -163,15 +163,15 @@ func TestSetScope(t *testing.T) {
163163
ts := New(10)
164164
ctx := context.TODO()
165165
keys := [][]byte{[]byte("key1"), []byte("key2"), []byte("key3")}
166-
ts.SetScope(ctx, keys, map[Key][]byte{})
166+
ts.SetScope(ctx, keys, map[*Key][]byte{})
167167
require.Equal(keys, ts.scope, "Scope not updated correctly.")
168168
}
169169

170170
func TestRemoveInsertRollback(t *testing.T) {
171171
require := require.New(t)
172172
ts := New(10)
173173
ctx := context.TODO()
174-
ts.SetScope(ctx, [][]byte{TestKey}, map[Key][]byte{})
174+
ts.SetScope(ctx, [][]byte{TestKey}, map[*Key][]byte{})
175175
// Insert
176176
err := ts.Insert(ctx, TestKey, TestVal)
177177
require.NoError(err, "Error from insert.")
@@ -219,7 +219,7 @@ func TestRestoreInsert(t *testing.T) {
219219
ctx := context.TODO()
220220
keys := [][]byte{[]byte("key1"), []byte("key2"), []byte("key3")}
221221
vals := [][]byte{[]byte("val1"), []byte("val2"), []byte("val3")}
222-
ts.SetScope(ctx, keys, map[Key][]byte{})
222+
ts.SetScope(ctx, keys, map[*Key][]byte{})
223223
for i, key := range keys {
224224
err := ts.Insert(ctx, key, vals[i])
225225
require.NoError(err, "Error inserting.")
@@ -249,7 +249,7 @@ func TestRestoreDelete(t *testing.T) {
249249
ctx := context.TODO()
250250
keys := [][]byte{[]byte("key1"), []byte("key2"), []byte("key3")}
251251
vals := [][]byte{[]byte("val1"), []byte("val2"), []byte("val3")}
252-
ts.SetScope(ctx, keys, map[Key][]byte{
252+
ts.SetScope(ctx, keys, map[*Key][]byte{
253253
ToStateKeyArray(keys[0]): vals[0],
254254
ToStateKeyArray(keys[1]): vals[1],
255255
ToStateKeyArray(keys[2]): vals[2],
@@ -288,7 +288,7 @@ func TestWriteChanges(t *testing.T) {
288288
tracer, _ := trace.New(&trace.Config{Enabled: false})
289289
keys := [][]byte{[]byte("key1"), []byte("key2"), []byte("key3")}
290290
vals := [][]byte{[]byte("val1"), []byte("val2"), []byte("val3")}
291-
ts.SetScope(ctx, keys, map[Key][]byte{})
291+
ts.SetScope(ctx, keys, map[*Key][]byte{})
292292
// Add
293293
for i, key := range keys {
294294
err := ts.Insert(ctx, key, vals[i])
@@ -306,7 +306,7 @@ func TestWriteChanges(t *testing.T) {
306306
}
307307
// Remove
308308
ts = New(10)
309-
ts.SetScope(ctx, keys, map[Key][]byte{
309+
ts.SetScope(ctx, keys, map[*Key][]byte{
310310
ToStateKeyArray(keys[0]): vals[0],
311311
ToStateKeyArray(keys[1]): vals[1],
312312
ToStateKeyArray(keys[2]): vals[2],
@@ -334,21 +334,21 @@ func BenchmarkFetchAndSetScope(b *testing.B) {
334334
}
335335
}
336336

337+
func BenchmarkInsert(b *testing.B) {
338+
for _, size := range []int{4, 8, 16, 32, 64, 128} {
339+
b.Run(fmt.Sprintf("insert_%d_keys", size), func(b *testing.B) {
340+
benchmarkInsert(b, size)
341+
})
342+
}
343+
}
344+
337345
func benchmarkFetchAndSetScope(b *testing.B, size int) {
338346
require := require.New(b)
339-
ts := New(10)
347+
ts := New(size)
340348
db := NewTestDB()
341349
ctx := context.TODO()
342350

343-
keys := [][]byte{}
344-
vals := [][]byte{}
345-
346-
// each k/v is unique to simulate worst case
347-
for i := 0; i <= size; i++ {
348-
keys = append(keys, randomBytes(MapKeyLength))
349-
vals = append(vals, randomBytes(8))
350-
}
351-
351+
keys, vals := initializeSet(size)
352352
for i, key := range keys {
353353
err := db.Insert(ctx, key, vals[i])
354354
require.NoError(err, "Error during insert.")
@@ -363,6 +363,43 @@ func benchmarkFetchAndSetScope(b *testing.B, size int) {
363363
b.StopTimer()
364364
}
365365

366+
func benchmarkInsert(b *testing.B, size int) {
367+
require := require.New(b)
368+
ts := New(size)
369+
ctx := context.TODO()
370+
371+
keys, vals := initializeSet(size)
372+
373+
storage := map[*Key][]byte{}
374+
for i, key := range keys {
375+
storage[ToStateKeyArray(key)] = vals[i]
376+
}
377+
378+
ts.SetScope(ctx, keys, storage)
379+
380+
b.ResetTimer()
381+
for i := 0; i < b.N; i++ {
382+
for i, key := range keys {
383+
err := ts.Insert(ctx, key, vals[i])
384+
require.NoError(err, "Error during insert.")
385+
}
386+
}
387+
b.ReportAllocs()
388+
b.StopTimer()
389+
}
390+
391+
func initializeSet(size int) ([][]byte, [][]byte) {
392+
keys := [][]byte{}
393+
vals := [][]byte{}
394+
395+
for i := 0; i <= size; i++ {
396+
keys = append(keys, randomBytes(MapKeyLength))
397+
vals = append(vals, randomBytes(8))
398+
}
399+
400+
return keys, vals
401+
}
402+
366403
func randomBytes(size int) []byte {
367404
bytes := make([]byte, size)
368405
rand.Read(bytes)

0 commit comments

Comments
 (0)