vyre-conform 0.1.0

Conformance suite for vyre backends — proves byte-identical output to CPU reference
Documentation
use std::collections::HashSet;
use std::path::Path;
use crate::generate::archetypes::Archetype;
use crate::generate::archetypes::TestInput;
use crate::enforce::category::Category;
use crate::generate::emit::emit::{write_test, EmittedTest};
use crate::generate::emit::naming::{sanitize, test_name};
use crate::generate::emit::provenance::{header, SourceTuple};
use crate::generate::emit::seed::SeedStream;
use crate::generate::emit::{GenError, GeneratedFile, GenerationPlan, GenerationReport, TemplateKind};
use crate::adversarial::mutations::catalog::applied::applied_for_classes;
use crate::spec::{OracleKind, SpecRow};
use crate::generate::templates::{render, TemplateContext};
use crate::spec::types::OpSpec;
use super::codegen::{expected_bytes, law_name, route_key, rust_test, spec_row_index};
use super::util::{input_bytes_for_arity, last_segment, oracle_name, property_key, template_src};

fn context(
    op: &OpSpec,
    archetype: &dyn Archetype,
    input: &TestInput,
    route: &Route,
) -> TemplateContext {
    TemplateContext::new()
        .with_scalar("op_name", op.id)
        .with_scalar("op", op.id)
        .with_scalar("file", last_segment(op.id))
        .with_scalar("expected", expected_bytes(op, route))
        .with_scalar("inputs", format!("{:?}", input.values))
        .with_scalar("spec_path", "op_registry::all_specs")
        .with_scalar("line", provenance_line(route))
        .with_scalar("category", format!("{:?}", op.category))
        .with_scalar("input_desc", sanitize(input.label))
        .with_scalar("law_name", law_name(&route.property))
        .with_scalar("law_description", route.property_label.clone())
        .with_scalar("input_class", input.label)
        .with_scalar("law_formula", route.property_label.clone())
        .with_scalar("specific_inputs", format!("{:?}", input.values))
        .with_scalar("law", law_name(&route.property))
        .with_scalar("archetype_id", archetype.id())
        .with_scalar("archetype_name", archetype.name())
        .with_scalar("archetype_description", archetype.description())
        .with_scalar("property", route.property_label.clone())
        .with_scalar("oracle_chosen_from_hierarchy", route.oracle_name.clone())
        .with_scalar(
            "mutation_description",
            route
                .mutation
                .as_ref()
                .map(|mutation| mutation.description.clone())
                .unwrap_or_else(|| "not requested".to_string()),
        )
        .with_scalar(
            "mutation_details",
            route
                .mutation
                .as_ref()
                .map(|mutation| mutation.details.clone())
                .unwrap_or_else(|| "not requested".to_string()),
        )
        .with_scalar(
            "V_NNN",
            route
                .validation
                .as_ref()
                .map(|validation| validation.rule_id)
                .unwrap_or("V000"),
        )
        .with_scalar("description", route.property_label.clone())
        .with_scalar(
            "NNN",
            route
                .validation
                .as_ref()
                .map(|validation| validation.rule_id.trim_start_matches('V'))
                .unwrap_or("000"),
        )
}