github.com/weaviate/weaviate@v1.24.6/adapters/repos/db/lsmkv/strategies_map_benchmark_test.go (about) 1 // _ _ 2 // __ _____ __ ___ ___ __ _| |_ ___ 3 // \ \ /\ / / _ \/ _` \ \ / / |/ _` | __/ _ \ 4 // \ V V / __/ (_| |\ V /| | (_| | || __/ 5 // \_/\_/ \___|\__,_| \_/ |_|\__,_|\__\___| 6 // 7 // Copyright © 2016 - 2024 Weaviate B.V. All rights reserved. 8 // 9 // CONTACT: hello@weaviate.io 10 // 11 12 package lsmkv 13 14 import ( 15 "crypto/rand" 16 "testing" 17 18 "github.com/stretchr/testify/assert" 19 "github.com/stretchr/testify/require" 20 ) 21 22 func BenchmarkMapDecoderDoPartial_SingleKey(b *testing.B) { 23 before := []MapPair{{ 24 Key: []byte("my-key-1"), 25 Value: []byte("my-value-1"), 26 }} 27 28 encoded, err := newMapEncoder().DoMulti(before) 29 require.Nil(b, err) 30 31 md := newMapDecoder() 32 33 b.ReportAllocs() 34 35 for i := 0; i < b.N; i++ { 36 md.DoPartial(encoded) 37 } 38 } 39 40 func BenchmarkMapPairFromBytes(b *testing.B) { 41 before := MapPair{ 42 Key: []byte("my-key-1"), 43 Value: make([]byte, 24*1024), 44 } 45 46 rand.Read(before.Value) 47 48 encoded, err := before.Bytes() 49 require.Nil(b, err) 50 51 b.ReportAllocs() 52 53 target := MapPair{} 54 55 for i := 0; i < b.N; i++ { 56 target.FromBytes(encoded, false) 57 } 58 } 59 60 func BenchmarkMapPairFromBytesReusable_Fits(b *testing.B) { 61 before := MapPair{ 62 Key: []byte("my-key-1"), 63 Value: make([]byte, 24*1024), 64 } 65 66 rand.Read(before.Value) 67 68 encoded, err := before.Bytes() 69 require.Nil(b, err) 70 71 target := MapPair{ 72 Key: make([]byte, 8), 73 Value: make([]byte, 24*1024), 74 } 75 76 b.ReportAllocs() 77 78 for i := 0; i < b.N; i++ { 79 err := target.FromBytesReusable(encoded, false) 80 require.Nil(b, err) 81 } 82 83 assert.Equal(b, before.Key, target.Key) 84 assert.Equal(b, before.Value, target.Value) 85 } 86 87 func BenchmarkMapPairFromBytesReusable_BuffersTooLarge(b *testing.B) { 88 before := MapPair{ 89 Key: []byte("my-key-1"), 90 Value: make([]byte, 24*1024), 91 } 92 93 rand.Read(before.Value) 94 95 encoded, err := before.Bytes() 96 require.Nil(b, err) 97 98 target := MapPair{ 99 Key: make([]byte, 100), 100 Value: make([]byte, 100*1024), 101 } 102 103 b.ReportAllocs() 104 105 for i := 0; i < b.N; i++ { 106 err := target.FromBytesReusable(encoded, false) 107 require.Nil(b, err) 108 } 109 110 assert.Equal(b, before.Key, target.Key) 111 assert.Equal(b, before.Value, target.Value) 112 } 113 114 func BenchmarkMapPairFromBytesReusable_BuffersTooSmall(b *testing.B) { 115 before := MapPair{ 116 Key: []byte("my-key-1"), 117 Value: make([]byte, 24*1024), 118 } 119 120 rand.Read(before.Value) 121 122 encoded, err := before.Bytes() 123 require.Nil(b, err) 124 125 target := MapPair{ 126 Key: make([]byte, 1), 127 Value: make([]byte, 1*1024), 128 } 129 130 b.ReportAllocs() 131 132 for i := 0; i < b.N; i++ { 133 err := target.FromBytesReusable(encoded, false) 134 require.Nil(b, err) 135 } 136 137 assert.Equal(b, before.Key, target.Key) 138 assert.Equal(b, before.Value, target.Value) 139 }