mod context;
mod law;
mod program;
mod values;
use crate::generate::archetypes::{Archetype, TestInput};
use crate::generate::templates::{render, rust_test_template};
use crate::spec::types::OpSpec;
pub(super) use self::context::law_name;
use self::context::{rust_template_name, test_context};
pub(super) use self::values::{expected_bytes, route_key, spec_row_index};
use super::Route;
pub(super) fn rust_test(
name: &str,
op: &OpSpec,
archetype: &dyn Archetype,
input: &TestInput,
route: &Route,
seed: u64,
) -> String {
let template_name = rust_template_name(route);
let template = rust_test_template(template_name).unwrap_or_else(|err| {
panic!("Fix: missing generated Rust template `{template_name}`: {err}")
});
render(
template,
&test_context(name, op, archetype, input, route, seed),
)
.unwrap_or_else(|err| panic!("Fix: generated Rust template `{template_name}` failed: {err}"))
}