--- /dev/null
+package sdlgo_test
+
+import (
+ "fmt"
+ "strconv"
+ "strings"
+ "testing"
+
+ "gitlabe1.ext.net.nokia.com/ric_dev/sdlgo"
+)
+
+type singleBenchmark struct {
+ key string
+ keySize int
+ valueSize int
+}
+
+type multiBenchmark struct {
+ keyBase string
+ keyCount int
+ keySize int
+ valueSize int
+}
+
+func (bm singleBenchmark) String(oper string) string {
+ return fmt.Sprintf("op = %s key=%d value=%d", oper, bm.keySize, bm.valueSize)
+}
+
+func (bm multiBenchmark) String(oper string) string {
+ return fmt.Sprintf("op = %s keycnt=%d key=%d value=%d", oper, bm.keyCount, bm.keySize, bm.valueSize)
+}
+func BenchmarkSet(b *testing.B) {
+ benchmarks := []singleBenchmark{
+ {"a", 10, 64},
+ {"b", 10, 1024},
+ {"c", 10, 64 * 1024},
+ {"d", 10, 1024 * 1024},
+ {"e", 10, 10 * 1024 * 1024},
+
+ {"f", 100, 64},
+ {"g", 100, 1024},
+ {"h", 100, 64 * 1024},
+ {"i", 100, 1024 * 1024},
+ {"j", 100, 10 * 1024 * 1024},
+ }
+
+ for _, bm := range benchmarks {
+ b.Run(bm.String("set"), func(b *testing.B) {
+ key := strings.Repeat(bm.key, bm.keySize)
+ value := strings.Repeat("1", bm.valueSize)
+ sdl := sdlgo.Create("namespace")
+
+ b.ResetTimer()
+ b.RunParallel(func(pb *testing.PB) {
+ for pb.Next() {
+ err := sdl.Set(key, value)
+ if err != nil {
+ b.Fatal(err)
+ }
+ }
+ })
+ })
+ }
+}
+
+func BenchmarkGet(b *testing.B) {
+ benchmarks := []singleBenchmark{
+ {"a", 10, 64},
+ {"b", 10, 1024},
+ {"c", 10, 64 * 1024},
+ {"d", 10, 1024 * 1024},
+ {"e", 10, 10 * 1024 * 1024},
+
+ {"f", 100, 64},
+ {"g", 100, 1024},
+ {"h", 100, 64 * 1024},
+ {"i", 100, 1024 * 1024},
+ {"j", 100, 10 * 1024 * 1024},
+ }
+
+ for _, bm := range benchmarks {
+ b.Run(bm.String("Get"), func(b *testing.B) {
+ key := strings.Repeat(bm.key, bm.keySize)
+ value := strings.Repeat("1", bm.valueSize)
+ sdl := sdlgo.Create("namespace")
+ if err := sdl.Set(key, value); err != nil {
+ b.Fatal(err)
+ }
+ b.ResetTimer()
+ b.RunParallel(func(pb *testing.PB) {
+ for pb.Next() {
+ _, err := sdl.Get([]string{key})
+ if err != nil {
+ b.Fatal(err)
+ }
+ }
+ })
+ })
+ }
+}
+
+func BenchmarkMultiSet(b *testing.B) {
+ benchmarks := []multiBenchmark{
+ {"a", 2, 10, 64},
+ {"b", 10, 10, 64},
+ {"c", 100, 10, 64},
+ {"d", 1000, 10, 64},
+ {"e", 5000, 10, 64},
+
+ {"f", 2, 100, 64},
+ {"g", 10, 100, 64},
+ {"h", 100, 100, 64},
+ {"i", 1000, 100, 64},
+ {"j", 5000, 100, 64},
+ }
+
+ for _, bm := range benchmarks {
+ b.Run(bm.String("mset"), func(b *testing.B) {
+ sdl := sdlgo.Create("namespace")
+ value := strings.Repeat("1", bm.valueSize)
+ keyVals := make([]string, 0)
+ for i := 0; i < bm.keyCount; i++ {
+ key := strings.Repeat(bm.keyBase+strconv.Itoa(i), bm.keySize)
+ keyVals = append(keyVals, key, value)
+ }
+ b.ResetTimer()
+ b.RunParallel(func(pb *testing.PB) {
+ for pb.Next() {
+ err := sdl.Set(keyVals)
+ if err != nil {
+ b.Fatal(err)
+ }
+ }
+ })
+ })
+ }
+}
+
+func BenchmarkMultiGet(b *testing.B) {
+ benchmarks := []multiBenchmark{
+ {"a", 2, 10, 64},
+ {"b", 10, 10, 64},
+ {"c", 100, 10, 64},
+ {"d", 1000, 10, 64},
+ {"e", 5000, 10, 64},
+
+ {"f", 2, 100, 64},
+ {"g", 10, 100, 64},
+ {"h", 100, 100, 64},
+ {"i", 1000, 100, 64},
+ {"j", 5000, 100, 64},
+ }
+
+ for _, bm := range benchmarks {
+ b.Run(bm.String("gset"), func(b *testing.B) {
+ sdl := sdlgo.Create("namespace")
+ keyVals := make([]string, 0)
+ for i := 0; i < bm.keyCount; i++ {
+ key := strings.Repeat(bm.keyBase+strconv.Itoa(i), bm.keySize)
+ keyVals = append(keyVals, key)
+ }
+ b.ResetTimer()
+ b.RunParallel(func(pb *testing.PB) {
+ for pb.Next() {
+ _, err := sdl.Get(keyVals)
+ if err != nil {
+ b.Fatal(err)
+ }
+ }
+ })
+ })
+ }
+}