MCPcopy Create free account
hub / github.com/cortex-js/compute-engine / runCase

Function runCase

benchmarks/runners/run_ce_rubi.mjs:171–224  ·  view source on GitHub ↗
(ce, kase)

Source from the content-addressed store, hash-verified

169// Run one case on one engine and return its result object (no id/tool — those
170// are added by emit). Precision is reset per call so cases stay independent.
171function runCase(ce, kase) {
172 const input = kase.inputs.ce;
173 const fn = buildOp(ce, kase); // also (re)sets precision for this case
174 if (!fn) return { status: 'error', error: `unknown op ${input.op}` };
175 try {
176 if (input.op === 'N') {
177 const timing = timeit(fn);
178 const r = fn();
179 return { status: 'ok', text: r.toString(), valueText: r.toString(), values: [], ...timing };
180 } else if (input.op === 'simplify') {
181 const timing = timeit(fn);
182 const original = ce.expr(input.mathjson);
183 const result = fn();
184 const pts = kase.verify.points.map(parseFloat);
185 const values = pts.map((p) => num(result.subs({ [kase.verify.var]: ce.number(p) })));
186 return { status: 'ok', text: result.toString(), inputText: original.toString(), values, ...timing };
187 } else if (input.op === 'diff') {
188 const timing = timeit(fn);
189 const result = fn();
190 const pts = kase.verify.points.map(parseFloat);
191 const values = pts.map((p) => num(result.subs({ [input.var]: ce.number(p) })));
192 return { status: 'ok', text: result.toString(), values, ...timing };
193 } else if (input.op === 'integrate') {
194 const timing = timeit(fn);
195 const result = fn();
196 if (isUnevaluated(result))
197 return { status: 'unevaluated', text: result.toString(), values: [], ...timing };
198 const a = parseFloat(kase.verify.a);
199 const b = parseFloat(kase.verify.b);
200 const fb = num(result.subs({ [input.var]: ce.number(b) }));
201 const fa = num(result.subs({ [input.var]: ce.number(a) }));
202 return { status: 'ok', text: result.toString(), values: [fb - fa], ...timing };
203 } else if (input.op === 'evaluate') {
204 const timing = timeit(fn);
205 const result = fn();
206 if (isUnevaluated(result))
207 return { status: 'unevaluated', text: result.toString(), values: [], ...timing };
208 return { status: 'ok', text: result.toString(), values: [num(result)], ...timing };
209 } else if (input.op === 'solve') {
210 const timing = timeit(fn);
211 const roots = fn();
212 const values = realRootValues(roots);
213 return {
214 status: values.length ? 'ok' : 'unevaluated',
215 text: (roots ?? []).map((r) => r.toString()).join(', '),
216 values,
217 ...timing,
218 };
219 }
220 return { status: 'error', error: `unknown op ${input.op}` };
221 } catch (e) {
222 return { status: 'error', error: String(e && e.message ? e.message : e) };
223 }
224}
225
226// Warm-up pass: run every case once on every engine BEFORE any timing, so the
227// V8 JIT has tiered up the shared code paths uniformly and no engine measured

Callers 1

run_ce_rubi.mjsFile · 0.85

Calls 11

buildOpFunction · 0.85
fnFunction · 0.85
timeitFunction · 0.70
numFunction · 0.70
isUnevaluatedFunction · 0.70
realRootValuesFunction · 0.70
toStringMethod · 0.65
exprMethod · 0.65
mapMethod · 0.65
subsMethod · 0.65
numberMethod · 0.65

Tested by

no test coverage detected