use gust_lang::{GoCodegen, RustCodegen, parse_program_with_errors};
const FILES: &[&str] = &[
"request_response.gu",
"circuit_breaker.gu",
"saga.gu",
"retry.gu",
"rate_limiter.gu",
"health_check.gu",
];
#[test]
fn stdlib_sources_parse_and_codegen_for_rust_and_go() {
for file in FILES {
let source = std::fs::read_to_string(format!(
"{}{}{}",
env!("CARGO_MANIFEST_DIR"),
std::path::MAIN_SEPARATOR,
file
))
.expect("stdlib file should exist");
let program = parse_program_with_errors(&source, file).expect("stdlib source should parse");
let rust_out = RustCodegen::new().generate(&program);
assert!(
rust_out.contains("Generated by Gust compiler"),
"rust codegen failed for {file}"
);
let go_out = GoCodegen::new().generate(&program, "stdlibtest");
assert!(
go_out.contains("Code generated by Gust compiler"),
"go codegen failed for {file}"
);
if *file == "saga.gu" {
assert!(source.contains("Compensating("));
assert!(source.contains("execute_compensate"));
assert!(source.contains("compensate_next"));
}
if *file == "retry.gu" {
assert!(source.contains("compute_backoff"));
assert!(source.contains("sleep_ms"));
assert!(source.contains("state Waiting("));
}
}
}