MCPcopy Create free account
hub / github.com/cel-expr/cel-go / computeCost

Function computeCost

interpreter/runtimecost_test.go:112–175  ·  view source on GitHub ↗
(t *testing.T, expr string, vars []*decls.VariableDecl, ctx Activation, options []CostTrackerOption)

Source from the content-addressed store, hash-verified

110}
111
112func computeCost(t *testing.T, expr string, vars []*decls.VariableDecl, ctx Activation, options []CostTrackerOption) (cost uint64, est checker.CostEstimate, err error) {
113 t.Helper()
114
115 s := common.NewTextSource(expr)
116 p, err := parser.NewParser(parser.Macros(parser.AllMacros...))
117 if err != nil {
118 t.Fatalf("Failed to initialize parser: %v", err)
119 }
120 parsed, errs := p.Parse(s)
121 if len(errs.GetErrors()) != 0 {
122 t.Fatalf(`Failed to Parse expression "%s", error: %v`, expr, errs.GetErrors())
123 }
124
125 cont := containers.DefaultContainer
126 reg := newTestRegistry(t, types.ProtoTypeDefs(&proto3pb.TestAllTypes{}))
127 attrs := NewAttributeFactory(cont, reg, reg)
128 env := newTestEnv(t, cont, reg)
129 err = env.AddIdents(vars...)
130 if err != nil {
131 t.Fatalf("Failed to initialize env: %v", err)
132 }
133 costTracker, err := NewCostTracker(&testRuntimeCostEstimator{}, options...)
134 if err != nil {
135 t.Fatalf("NewCostTracker() failed: %v", err)
136 }
137 costTracker, err = costTracker.Clone()
138 if err != nil {
139 t.Fatalf("checker.Clone() failed: %v", err)
140 }
141 checked, errs := checker.Check(parsed, s, env)
142 if len(errs.GetErrors()) != 0 {
143 t.Fatalf(`Failed to check expression "%s", error: %v`, expr, errs.GetErrors())
144 }
145 est, err = checker.Cost(checked, testCostEstimator{}, checker.PresenceTestHasCost(costTracker.presenceTestHasCost))
146 if err != nil {
147 t.Fatalf("checker.Cost() failed: %v", err)
148 }
149 interp := newStandardInterpreter(t, cont, reg, reg, attrs)
150 prg, err := interp.NewInterpretable(checked,
151 CostObserver(CostTrackerFactory(func() (*CostTracker, error) {
152 return costTracker, nil
153 })))
154 if err != nil {
155 t.Fatalf(`Failed to check expression "%s", error: %v`, expr, errs.GetErrors())
156 }
157
158 defer func() {
159 if r := recover(); r != nil {
160 switch t := r.(type) {
161 case EvalCancelledError:
162 err = t
163 default:
164 err = fmt.Errorf("internal error: %v", r)
165 }
166 }
167 }()
168 frame := AsFrame(ctx)
169 prg.Exec(frame)

Callers 2

TestTrackCostAdvancedFunction · 0.85
TestRuntimeCostFunction · 0.85

Calls 15

ParseMethod · 0.95
CloneMethod · 0.95
NewTextSourceFunction · 0.92
NewParserFunction · 0.92
MacrosFunction · 0.92
ProtoTypeDefsFunction · 0.92
CheckFunction · 0.92
CostFunction · 0.92
PresenceTestHasCostFunction · 0.92
NewAttributeFactoryFunction · 0.85
NewCostTrackerFunction · 0.85
newStandardInterpreterFunction · 0.85

Tested by

no test coverage detected