代码拉取完成,页面将自动刷新
package expr
import (
"testing"
"github.com/google/cel-go/cel"
"github.com/stretchr/testify/assert"
"github.com/zhijingtech/expr/testdata"
)
const (
exprstr = "(current.P1.X-prev.P2.X) <= 1.0 || (current.P1.Y-prev.P2.Y) <= 1.0"
)
//go:generate protoc -I=. --go_out=. testdata/model.proto
func BenchmarkCelGoMap(b *testing.B) {
expr, err := NewExpr(exprstr,
cel.Variable("current", cel.MapType(cel.StringType, cel.AnyType)),
cel.Variable("prev", cel.MapType(cel.StringType, cel.AnyType)),
)
assert.NoError(b, err)
var prevMap = map[string]any{
"P1": map[string]any{"X": 1, "Y": 2},
"P2": map[string]any{"X": 3, "Y": 4},
}
var currentMap = map[string]any{
"P1": map[string]any{"X": 5, "Y": 3},
"P2": map[string]any{"X": 7, "Y": 5},
}
iparams := map[string]any{
"current": currentMap,
"prev": prevMap,
}
b.ResetTimer()
for i := 0; i < b.N; i++ {
result, err := expr.Eval(iparams)
assert.NoError(b, err)
assert.True(b, result.(bool))
}
}
func BenchmarkCelGoProtoBuf(b *testing.B) {
expr, err := NewExpr(exprstr,
cel.Types(&testdata.Rectangle{}),
cel.Variable("prev", cel.ObjectType("testdata.Rectangle")),
cel.Variable("current", cel.ObjectType("testdata.Rectangle")),
)
assert.NoError(b, err)
var prev = &testdata.Rectangle{
P1: &testdata.Point{X: 1, Y: 2},
P2: &testdata.Point{X: 3, Y: 4},
}
var current = &testdata.Rectangle{
P1: &testdata.Point{X: 5, Y: 3},
P2: &testdata.Point{X: 7, Y: 5},
}
iparams := map[string]any{
"prev": prev,
"current": current,
}
b.ResetTimer()
for i := 0; i < b.N; i++ {
result, err := expr.Eval(iparams)
assert.NoError(b, err)
assert.True(b, result.(bool))
}
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。