Skip to content

Commit

Permalink
Benchmarks
Browse files Browse the repository at this point in the history
  • Loading branch information
yosiat committed Sep 28, 2022
1 parent 5e0f5e9 commit 0dcf35f
Show file tree
Hide file tree
Showing 5 changed files with 130 additions and 21 deletions.
9 changes: 0 additions & 9 deletions benchs/1_baseline

This file was deleted.

13 changes: 7 additions & 6 deletions flatten_jx_test.go → flatten_jx_test.go.txt
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package quamina

import (
"bytes"
"io/ioutil"
"testing"
)
Expand All @@ -20,10 +21,10 @@ func Test_JX_FJBasic(t *testing.T) {
t.Errorf("list len %d wanted %d", len(list), len(wantedVals))
}
for i, field := range list {
if !bequal([]byte(wantedPaths[i]), field.Path) {
if !bytes.Equal([]byte(wantedPaths[i]), field.Path) {
t.Errorf("pos %d wanted %s got %s", i, wantedPaths[i], field.Path)
}
if !bequal([]byte(wantedVals[i]), field.Val) {
if !bytes.Equal([]byte(wantedVals[i]), field.Val) {
t.Errorf("pos %d wanted %s got %s", i, wantedVals[i], field.Val)
}
}
Expand All @@ -34,10 +35,10 @@ func Test_JX_FJBasic(t *testing.T) {
wantedPaths = []string{"a", "f", "f", "f", "f", "f"}
wantedVals = []string{"1", "33e2", "\"x\"", "true", "false", "null"}
for i, field := range list {
if !bequal([]byte(wantedPaths[i]), field.Path) {
if !bytes.Equal([]byte(wantedPaths[i]), field.Path) {
t.Errorf("pos %d wanted %s got %s", i, wantedPaths[i], field.Path)
}
if !bequal([]byte(wantedVals[i]), field.Val) {
if !bytes.Equal([]byte(wantedVals[i]), field.Val) {
t.Errorf("pos %d wanted %s got %s", i, wantedVals[i], field.Val)
}
}
Expand Down Expand Up @@ -105,7 +106,7 @@ func Test_JX_Minimal(t *testing.T) {
if err != nil {
t.Error("Huh? " + err.Error())
}
if len(fields) != 1 || !bequal(fields[0].Path, []byte("a")) || len(fields[0].Val) != 1 || fields[0].Val[0] != '1' {
if len(fields) != 1 || !bytes.Equal(fields[0].Path, []byte("a")) || len(fields[0].Val) != 1 || fields[0].Val[0] != '1' {
t.Error("Name/Val wrong")
}
}
Expand All @@ -121,7 +122,7 @@ func test_JX_TrackerSelection(fj Flattener, tracker NameTracker, label string, f
t.Error(label + ": " + err.Error())
}
for i, field := range list {
if !bequal([]byte(wantedPaths[i]), field.Path) {
if !bytes.Equal([]byte(wantedPaths[i]), field.Path) {
t.Errorf("pos %d wanted Path %s got %s", i, wantedPaths[i], field.Path)
}
if wantedVals[i] != string(field.Val) {
Expand Down
117 changes: 112 additions & 5 deletions flattener_bench_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package quamina

import (
"os"
"strings"
"testing"
)

Expand All @@ -20,8 +21,35 @@ func (t tracker) IsNameUsed(label []byte) bool {
}

const PatternContext = `{ "context": { "user_id": [9034], "friends_count": [158] } }`
const PatternMiddleNestedField = `{ "payload": { "user": { "id_str": ["903487807"] } } }`
const PatternLastField = `{ "payload": { "lang_value": ["ja"] } }`

func Benchmark_JxFlattener_ContextFields(b *testing.B) {
RunBenchmarkWithJxFlattener(b, "context\nuser_id", "context\nfriends_count")
}

func Benchmark_JsonFlattener_ContextFields(b *testing.B) {
RunBehcmarkWithJSONFlattener(b, "context", "user_id", "friends_count")
}

func Benchmark_JxFlattener_MiddleNestedField(b *testing.B) {
RunBenchmarkWithJxFlattener(b, "payload\nuser\nid_str")
}

func Benchmark_JsonFlattener_MiddleNestedField(b *testing.B) {
RunBehcmarkWithJSONFlattener(b, "payload", "user", "id_str")
}

func Benchmark_JxFlattener_LastField(b *testing.B) {
RunBenchmarkWithJxFlattener(b, "payload\nlang_value")
}

func Benchmark_JsonFlattener_LastField(b *testing.B) {
RunBehcmarkWithJSONFlattener(b, "payload", "lang_value")
}

func RunBenchmarkWithJxFlattener(b *testing.B, fields ...string) {
b.Helper()
var localFields []Field

event, err := os.ReadFile("./status.json")
Expand All @@ -31,12 +59,19 @@ func Benchmark_JxFlattener_ContextFields(b *testing.B) {

paths := newPathsIndex()

paths.add("context\nuser_id")
paths.add("context\nfriends_count")
for _, field := range fields {
paths.add(field)
}

flattener := newJxFlattener(paths)
t := tracker{}

results, err := flattener.Flatten(event, t)
if err != nil {
b.Fatal(err)
}
PrintFields(b, results)

b.ResetTimer()
b.ReportAllocs()

Expand All @@ -52,7 +87,8 @@ func Benchmark_JxFlattener_ContextFields(b *testing.B) {
topFields = localFields
}

func Benchmark_JsonFlattener_ContextFields(b *testing.B) {
func RunBehcmarkWithJSONFlattener(b *testing.B, fields ...string) {
b.Helper()
var localFields []Field

event, err := os.ReadFile("./status.json")
Expand All @@ -63,8 +99,14 @@ func Benchmark_JsonFlattener_ContextFields(b *testing.B) {
flattener := newJSONFlattener()

t := tracker{names: make(map[string]bool)}
t.names["user_id"] = true
t.names["friends_count"] = true
for _, field := range fields {
t.names[field] = true
}
results, err := flattener.Flatten(event, t)
if err != nil {
b.Fatal(err)
}
PrintFields(b, results)

b.ResetTimer()
b.ReportAllocs()
Expand All @@ -79,6 +121,7 @@ func Benchmark_JsonFlattener_ContextFields(b *testing.B) {
}

topFields = localFields

}

func Benchmark_JsonFlattner_Evaluate_ContextFields(b *testing.B) {
Expand Down Expand Up @@ -108,7 +151,60 @@ func Benchmark_JxFlattner_Evaluate_ContextFields(b *testing.B) {
RunBenchmarkEvaluate(b, q, PatternContext)
}

func Benchmark_JsonFlattner_Evaluate_MiddleNestedField(b *testing.B) {
q, err := New()

if err != nil {
b.Fatal(err)
}

RunBenchmarkEvaluate(b, q, PatternMiddleNestedField)
}

func Benchmark_JxFlattner_Evaluate_MiddleNestedField(b *testing.B) {
paths := newPathsIndex()

paths.add("payload\nuser\nid_str")

flattener := newJxFlattener(paths)

q, err := New(WithFlattener(flattener))

if err != nil {
b.Fatal(err)
}

RunBenchmarkEvaluate(b, q, PatternMiddleNestedField)
}

func Benchmark_JsonFlattner_Evaluate_LastField(b *testing.B) {
q, err := New()

if err != nil {
b.Fatal(err)
}

RunBenchmarkEvaluate(b, q, PatternLastField)
}

func Benchmark_JxFlattner_Evaluate_LastField(b *testing.B) {
paths := newPathsIndex()

paths.add("payload\nlang_value")

flattener := newJxFlattener(paths)

q, err := New(WithFlattener(flattener))

if err != nil {
b.Fatal(err)
}

RunBenchmarkEvaluate(b, q, PatternLastField)
}

func RunBenchmarkEvaluate(b *testing.B, q *Quamina, pattern string) {
b.Helper()
var localMatches []X

err := q.AddPattern(1, pattern)
Expand Down Expand Up @@ -148,3 +244,14 @@ func RunBenchmarkEvaluate(b *testing.B, q *Quamina, pattern string) {

topMatches = localMatches
}

func PrintFields(b *testing.B, fields []Field) {
b.Helper()

b.Logf("> Fields\n")

for _, field := range fields {
b.Logf("Path [%s] Val [%s] ArrayTrail [%+v]\n", strings.ReplaceAll(string(field.Path), "\n", "->"), field.Val, field.ArrayTrail)
}
b.Logf("\n")
}
10 changes: 10 additions & 0 deletions quamina_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -270,3 +270,13 @@ func TestCityLots_JX(t *testing.T) {
}
}
}

func buildPathsIndex(m *coreMatcher) pathsIndex {
p := newPathsIndex()

for path := range m.start().pathsUsed {
p.add(path)
}

return p
}
2 changes: 1 addition & 1 deletion status.json
Original file line number Diff line number Diff line change
Expand Up @@ -262,6 +262,6 @@
"favorited": false,
"retweeted": false,
"possibly_sensitive": false,
"lang": "ja"
"lang_value": "ja"
}
}

0 comments on commit 0dcf35f

Please sign in to comment.