vyre-conform 0.1.0

Conformance suite for vyre backends — proves byte-identical output to CPU reference
Documentation
use vyre_conform::published::{fingerprint_spec, published_hash, PUBLISHED_SPEC_HASHES};
use vyre_conform::registry::all_specs;

#[test]
fn published_specs_have_not_drifted() {
    let specs = all_specs();
    for published in PUBLISHED_SPEC_HASHES {
        let spec = specs
            .iter()
            .find(|spec| spec.id == published.id && spec.version == published.version)
            .unwrap_or_else(|| {
                panic!(
                    "{} v{} was removed from the registry. Fix: published specs are immutable; restore it.",
                    published.id, published.version
                )
            });
        let fingerprint = fingerprint_spec(spec).unwrap_or_else(|e| {
            panic!(
                "{} v{} fingerprint failed: {}. Fix: ensure CPU reference is panic-free.",
                spec.id, spec.version, e
            )
        });
        assert_eq!(
            fingerprint, published.fingerprint,
            "{} v{} semantic fingerprint changed. Fix: restore cpu_fn/laws or add a new version.",
            spec.id, spec.version
        );
    }
}

#[test]
fn registry_specs_are_published() {
    for spec in all_specs() {
        assert!(
            published_hash(spec.id, spec.version).is_some(),
            "{} v{} is not in PUBLISHED_SPEC_HASHES. Fix: commit the fingerprint before publishing.",
            spec.id,
            spec.version
        );
    }
}