Files
upstream-corteza/server/pkg/expr/parser_test.go
upstream-mirror 7e385fc126
Some checks failed
SonarQube / SonarQube (push) Failing after 5m28s
E2e test on main branch push / server and client test (map[name:admin port:8080]) (push) Failing after 3m33s
Server and lib tests / Library test (js) (push) Failing after 1m36s
Server and lib tests / Library test (vue) (push) Successful in 2m24s
Server and lib tests / Web client test (admin) (push) Successful in 2m52s
Server and lib tests / Web client test (compose) (push) Successful in 3m23s
Server and lib tests / Web client test (discovery) (push) Successful in 2m49s
Server and lib tests / Web client test (one) (push) Successful in 2m52s
Server and lib tests / Web client test (privacy) (push) Successful in 2m44s
Server and lib tests / Web client test (reporter) (push) Successful in 2m56s
Server and lib tests / Web client test (workflow) (push) Successful in 3m0s
Server and lib tests / Server tests (push) Failing after 4m55s
E2e test on main branch push / notify-failure (push) Failing after 9s
Server and lib tests / Send matrix testing notification (push) Successful in 2s
Mark stale issues and pull requests / stale (push) Successful in 40s
snapshot of https://github.com/cortezaproject/corteza.git (2024.9.x, 2026-09-18; blobs > 131072B omitted)
2026-09-18 01:22:23 +05:00

111 lines
2.5 KiB
Go

package expr
import (
"context"
"testing"
"github.com/stretchr/testify/require"
)
func Example_simpleExpression() {
eval(`40 + 2`, nil)
// output:
// 42
}
func TestParser(t *testing.T) {
var (
req = require.New(t)
ctx = context.Background()
p = Parser()
e, err = p.NewEvaluable("0 == 0")
result bool
)
req.NoError(err)
result, err = e.EvalBool(ctx, nil)
req.NoError(err)
req.True(result)
}
func TestGvalParser(t *testing.T) {
var (
req = require.New(t)
ctx = context.Background()
p = NewGvalParser()
vv, err = NewVars(map[string]interface{}{
"vars": &Vars{},
"key": "foo",
"value": Must(NewString("foo")),
})
result interface{}
)
req.NoError(err)
pp, err := p.Parse("toJSON(set(vars, key, value))")
req.NoError(err)
result, err = pp.Eval(ctx, vv)
req.NoError(err)
req.Equal("{\"foo\":{\"@value\":\"foo\",\"@type\":\"String\"}}", result)
}
// goos: darwin
// goarch: arm64
// pkg: github.com/cortezaproject/corteza/server/pkg/expr
// cpu: Apple M3 Pro
// BenchmarkParsing-12 295779 4052 ns/op 4952 B/op 133 allocs/op
func BenchmarkParsing(b *testing.B) {
expr := `(1 + length(trim(" asdf asdf asdf ")) * 71 + min(3, 7777777)) + (1 + length(trim(" asdf asdf asdf ")) * 71 + min(3, 7777777))`
p := NewGvalParser()
for n := 0; n < b.N; n++ {
e, err := p.Parse(expr)
if err != nil {
panic(err)
}
_ = e
}
}
// goos: darwin
// goarch: arm64
// pkg: github.com/cortezaproject/corteza/server/pkg/expr
// cpu: Apple M3 Pro
// BenchmarkEval_short-12 886696 1344 ns/op 544 B/op 14 allocs/op
// BenchmarkEval_med-12 299616 4020 ns/op 1280 B/op 36 allocs/op
// BenchmarkEval_long-12 146112 7878 ns/op 2488 B/op 71 allocs/op
func BenchmarkEval_short(b *testing.B) {
expr := `min(3, 7777777)`
benchmarkEval(b, expr)
}
func BenchmarkEval_med(b *testing.B) {
expr := `1 + length(trim(" asdf asdf asdf ")) * 71 + min(3, 7777777)`
benchmarkEval(b, expr)
}
func BenchmarkEval_long(b *testing.B) {
expr := `(1 + length(trim(" asdf asdf asdf ")) * 71 + min(3, 7777777)) + (1 + length(trim(" asdf asdf asdf ")) * 71 + min(3, 7777777))`
benchmarkEval(b, expr)
}
func benchmarkEval(b *testing.B, expr string) {
e, err := NewGvalParser().Parse(expr)
if err != nil {
panic(err)
}
ctx := context.Background()
for n := 0; n < b.N; n++ {
_, err = e.Eval(ctx, EmptyVars())
// _ = err
if err != nil {
panic(err)
}
}
}