use rustine::exec::{execute, serialize_tree, RuntimeFormat};
use rustine::parser::lexer::lex;
use rustine::parser::syntax::parse_gel_document;
use std::time::Instant;
const COMPLEX_SYNTAX: &str = include_str!("../fixtures/parity/complex/syntax1.gel");
const COMPLEX_INPUT: &str = include_str!("../fixtures/parity/complex/input1.txt");
const SIMPLE_SYNTAX: &str = include_str!("../fixtures/parity/simple/syntax1.gel");
const SIMPLE_INPUT: &str = include_str!("../fixtures/parity/simple/input1.txt");
#[test]
fn perf_budget_complex_json() {
let iterations = 10;
let budget_secs = 120;
let start = Instant::now();
for _ in 0..iterations {
let tokens = lex(COMPLEX_SYNTAX).expect("lex");
let mut doc = parse_gel_document(&tokens).expect("parse");
let exec = execute(&mut doc, "input", COMPLEX_INPUT).expect("execute");
let _json = serialize_tree(&exec, RuntimeFormat::Json);
}
let elapsed = start.elapsed();
assert!(
elapsed.as_secs() < budget_secs,
"PERFORMANCE BUDGET EXCEEDED: complex JSON × {iterations} took {elapsed:.2?} \
(budget: {budget_secs}s). Possible algorithmic regression.",
);
}
#[test]
fn perf_budget_simple_high_iter() {
let iterations = 500;
let budget_secs = 30;
let start = Instant::now();
for _ in 0..iterations {
let tokens = lex(SIMPLE_SYNTAX).expect("lex");
let mut doc = parse_gel_document(&tokens).expect("parse");
let exec = execute(&mut doc, "input", SIMPLE_INPUT).expect("execute");
let _json = serialize_tree(&exec, RuntimeFormat::Json);
}
let elapsed = start.elapsed();
assert!(
elapsed.as_secs() < budget_secs,
"PERFORMANCE BUDGET EXCEEDED: simple JSON × {iterations} took {elapsed:.2?} \
(budget: {budget_secs}s). Possible per-call overhead regression.",
);
}
#[test]
fn perf_budget_complex_xml() {
let iterations = 10;
let budget_secs = 120;
let start = Instant::now();
for _ in 0..iterations {
let tokens = lex(COMPLEX_SYNTAX).expect("lex");
let mut doc = parse_gel_document(&tokens).expect("parse");
let exec = execute(&mut doc, "input", COMPLEX_INPUT).expect("execute");
let _xml = serialize_tree(&exec, RuntimeFormat::Xml);
}
let elapsed = start.elapsed();
assert!(
elapsed.as_secs() < budget_secs,
"PERFORMANCE BUDGET EXCEEDED: complex XML × {iterations} took {elapsed:.2?} \
(budget: {budget_secs}s). Possible algorithmic regression.",
);
}