Skip to main content

write_optimize_goldens/
write_optimize_goldens.rs

1//! Maintainer tooling (not a user-facing sample contract).
2//! One-off helper to regenerate optimized plan golden files.
3//! Run: cargo run --example write_optimize_goldens
4
5use 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}