Skip to content

Commit 2dc1c7d

Browse files
committed
Add sort benchmarks
1 parent 3a29e6b commit 2dc1c7d

File tree

1 file changed

+45
-0
lines changed

1 file changed

+45
-0
lines changed

bench_test.go

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -453,3 +453,48 @@ func Benchmark_largeNestedArrayAccess(b *testing.B) {
453453
require.NoError(b, err)
454454
require.True(b, out.(bool))
455455
}
456+
457+
func Benchmark_sort(b *testing.B) {
458+
env := map[string]interface{}{
459+
"arr": []any{55, 58, 42, 61, 75, 52, 64, 62, 16, 79, 40, 14, 50, 76, 23, 2, 5, 80, 89, 51, 21, 96, 91, 13, 71, 82, 65, 63, 11, 17, 94, 81, 74, 4, 97, 1, 39, 3, 28, 8, 84, 90, 47, 85, 7, 56, 49, 93, 33, 12, 19, 60, 86, 100, 44, 45, 36, 72, 95, 77, 34, 92, 24, 73, 18, 38, 43, 26, 41, 69, 67, 57, 9, 27, 66, 87, 46, 35, 59, 70, 10, 20, 53, 15, 32, 98, 68, 31, 54, 25, 83, 88, 22, 48, 29, 37, 6, 78, 99, 30},
460+
}
461+
462+
program, err := expr.Compile(`sort(arr)`, expr.Env(env))
463+
require.NoError(b, err)
464+
465+
var out interface{}
466+
b.ResetTimer()
467+
for n := 0; n < b.N; n++ {
468+
out, _ = vm.Run(program, env)
469+
}
470+
b.StopTimer()
471+
472+
require.Equal(b, 1, out.([]any)[0])
473+
require.Equal(b, 100, out.([]any)[99])
474+
}
475+
476+
func Benchmark_sortBy(b *testing.B) {
477+
type Foo struct {
478+
Value int
479+
}
480+
arr := []any{55, 58, 42, 61, 75, 52, 64, 62, 16, 79, 40, 14, 50, 76, 23, 2, 5, 80, 89, 51, 21, 96, 91, 13, 71, 82, 65, 63, 11, 17, 94, 81, 74, 4, 97, 1, 39, 3, 28, 8, 84, 90, 47, 85, 7, 56, 49, 93, 33, 12, 19, 60, 86, 100, 44, 45, 36, 72, 95, 77, 34, 92, 24, 73, 18, 38, 43, 26, 41, 69, 67, 57, 9, 27, 66, 87, 46, 35, 59, 70, 10, 20, 53, 15, 32, 98, 68, 31, 54, 25, 83, 88, 22, 48, 29, 37, 6, 78, 99, 30}
481+
env := map[string]interface{}{
482+
"arr": make([]Foo, len(arr)),
483+
}
484+
for i, v := range arr {
485+
env["arr"].([]Foo)[i] = Foo{Value: v.(int)}
486+
}
487+
488+
program, err := expr.Compile(`sortBy(arr, "Value")`, expr.Env(env))
489+
require.NoError(b, err)
490+
491+
var out interface{}
492+
b.ResetTimer()
493+
for n := 0; n < b.N; n++ {
494+
out, _ = vm.Run(program, env)
495+
}
496+
b.StopTimer()
497+
498+
require.Equal(b, 1, out.([]any)[0].(Foo).Value)
499+
require.Equal(b, 100, out.([]any)[99].(Foo).Value)
500+
}

0 commit comments

Comments
 (0)