diff --git a/test/labels_test.go b/test/labels_test.go index 27bd453835..a802009b71 100644 --- a/test/labels_test.go +++ b/test/labels_test.go @@ -1,6 +1,7 @@ package test import ( + "bytes" "testing" "github.com/fabxc/tsdb" @@ -52,3 +53,77 @@ func BenchmarkLabelSetAccess(b *testing.B) { _ = v } + +func BenchmarkStringBytesEquals(b *testing.B) { + cases := []struct { + name string + a, b string + }{ + { + name: "equal", + a: "sdfn492cn9xwm0ws8r,4932x98f,uj594cxf594802h875hgzz0h3586x8xz,359", + b: "sdfn492cn9xwm0ws8r,4932x98f,uj594cxf594802h875hgzz0h3586x8xz,359", + }, + { + name: "1-flip-end", + a: "sdfn492cn9xwm0ws8r,4932x98f,uj594cxf594802h875hgzz0h3586x8xz,359", + b: "sdfn492cn9xwm0ws8r,4932x98f,uj594cxf594802h875hgzz0h3586x8xz,353", + }, + { + name: "1-flip-middle", + a: "sdfn492cn9xwm0ws8r,4932x98f,uj594cxf594802h875hgzz0h3586x8xz,359", + b: "sdfn492cn9xwm0ws8r,4932x98f,uj504cxf594802h875hgzz0h3586x8xz,359", + }, + { + name: "1-flip-start", + a: "sdfn492cn9xwm0ws8r,4932x98f,uj594cxf594802h875hgzz0h3586x8xz,359", + b: "adfn492cn9xwm0ws8r,4932x98f,uj594cxf594802h875hgzz0h3586x8xz,359", + }, + { + name: "different-length", + a: "sdfn492cn9xwm0ws8r,4932x98f,uj594cxf594802h875hgzz0h3586x8xz,359", + b: "sdfn492cn9xwm0ws8r,4932x98f,uj594cxf594802h875hgzz0h3586x8xz,35", + }, + } + + for _, c := range cases { + b.Run(c.name+"-strings", func(b *testing.B) { + as, bs := c.a, c.b + b.SetBytes(int64(len(as))) + + var r bool + + for i := 0; i < b.N; i++ { + r = as == bs + } + _ = r + }) + + b.Run(c.name+"-bytes", func(b *testing.B) { + ab, bb := []byte(c.a), []byte(c.b) + b.SetBytes(int64(len(ab))) + + var r bool + + for i := 0; i < b.N; i++ { + r = bytes.Equal(ab, bb) + } + _ = r + }) + + b.Run(c.name+"-bytes-length-check", func(b *testing.B) { + ab, bb := []byte(c.a), []byte(c.b) + b.SetBytes(int64(len(ab))) + + var r bool + + for i := 0; i < b.N; i++ { + if len(ab) != len(bb) { + continue + } + r = bytes.Equal(ab, bb) + } + _ = r + }) + } +}