write_optimize_goldens/
write_optimize_goldens.rs1use std::fs;
6use std::path::PathBuf;
7
8use dtcs::{analysis, optimize, parse, plan, validate, DocumentFormat};
9
10fn main() {
11 let root = PathBuf::from(env!("CARGO_MANIFEST_DIR"));
12 let fixtures = [
13 "optimize_constant_fold.yaml",
14 "optimize_algebraic.yaml",
15 "optimize_action_fusion.yaml",
16 "optimize_function_inline.yaml",
17 "optimize_rule_dedup.yaml",
18 "optimize_rule_dedup_params.yaml",
19 "optimize_dead_expr.yaml",
20 "optimize_dead_after_fold.yaml",
21 ];
22
23 let out_dir = root.join("tests/fixtures/plans_optimized");
24 fs::create_dir_all(&out_dir).expect("create output dir");
25
26 for file in fixtures {
27 let path = root.join("tests/fixtures").join(file);
28 let content = fs::read(&path).expect("read fixture");
29 let contract = parse(&content, DocumentFormat::Yaml)
30 .into_contract()
31 .expect("contract");
32 let report = validate(&contract);
33 assert!(report.is_valid(), "{file}: {:?}", report.diagnostics);
34 let analysis = analysis::check_contract(&contract, None);
35 let lowered = plan::lower(&contract, None, Some(&analysis));
36 let original = lowered.plan.expect("plan");
37 let optimized = optimize(&original).plan.expect("optimized");
38 let golden_name = file.replace(".yaml", ".plan.json");
39 let golden_path = out_dir.join(golden_name);
40 let json = serde_json::to_string_pretty(&optimized).expect("serialize");
41 fs::write(&golden_path, json).expect("write golden");
42 println!("wrote {}", golden_path.display());
43 }
44}