///|
fn main {
let source = "sum([amount, 0.1, 0.2]) * 2"
let expression = @lib.compile(source, names=["amount"]) catch {
_ => abort("benchmark failed")
}
let input = @types.json_context("{\"amount\":12}") catch {
_ => abort("benchmark failed")
}
let t = @bench.monotonic_clock_start()
for iteration = 0; iteration < 10000; iteration = iteration + 1 {
ignore(
@eval.evaluate(expression, input) catch {
_ => abort("benchmark failed")
},
)
}
println(
"compiled_10000_ms=" + (@bench.monotonic_clock_end(t) / 1000.0).to_string(),
)
let t = @bench.monotonic_clock_start()
for iteration = 0; iteration < 10000; iteration = iteration + 1 {
ignore(
@eval.feel_eval(source, ctx=input) catch {
_ => abort("benchmark failed")
},
)
}
println(
"parsed_10000_ms=" + (@bench.monotonic_clock_end(t) / 1000.0).to_string(),
)
let xml = StringBuilder()
xml.write_string(
"n",
)
for i = 0; i < 1000; i = i + 1 {
xml.write_string(
"" +
i.to_string() +
"" +
i.to_string() +
"",
)
}
xml.write_string("")
let model = @lib.parse_model(xml.to_string()) catch {
_ => abort("benchmark failed")
}
let t = @bench.monotonic_clock_start()
for iteration = 0; iteration < 10000; iteration = iteration + 1 {
let result = @lib.evaluate_decision(model, "d", "{\"n\":999}") catch {
_ => abort("benchmark failed")
}
assert_eq(result, "999") catch {
_ => abort("benchmark failed")
}
}
println(
"table_1000_rules_10000_ms=" +
(@bench.monotonic_clock_end(t) / 1000.0).to_string(),
)
}