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 emit_tuple(
    out_dir: &Path,
    seeds: &mut SeedStream,
    op: &'static OpSpec,
    archetype: &'static dyn Archetype,
    input: &TestInput,
    route: &Route,
) -> Result<GeneratedFile, GenError> {
    let route_key = route_key(route);
    let seed = seeds.derive(op.id, archetype.id(), &route_key);
    let name = test_name(op.id, archetype.id(), &route_key, seed);
    let rendered = render(
        template_src(route.template),
        &context(op, archetype, input, route),
    )?;
    let tuple = SourceTuple {
        op: op.id,
        archetype: archetype.id(),
        oracle: &route.oracle_name,
    };
    let provenance = header(&tuple, seeds.master(), op.version);
    let rust = rust_test(&name, op, archetype, input, route, seed);
    let path = out_dir.join(sanitize(op.id)).join(format!("{name}.rs"));

    let written = write_test(
        &path,
        &EmittedTest {
            test_name: &name,
            provenance: &provenance,
            rendered_template: &rendered,
            rust: &rust,
            op_under_test: op.id,
        },
    )?;

    Ok(GeneratedFile {
        path: written,
        test_name: name,
        op: op.id,
        archetype: archetype.id(),
        oracle: route.oracle_name.clone(),
        template: route.template,
        seed,
    })
}