vyre-conform 0.1.0

Conformance suite for vyre backends — proves byte-identical output to CPU reference
Documentation
use crate::generate::generators;
use crate::OpSpec;
use serde::{Deserialize, Serialize};
use std::collections::HashSet;
use std::fs;
use std::io;
use std::path::Path;
use super::util::*;

/// Load all golden samples from a directory tree.
///
/// Expects JSON files at `root/<sanitized_op_id>/v<version>/<hash>.json`.
use super::{Golden};
#[inline]
pub fn load_goldens(root: &Path) -> io::Result<Vec<Golden>> {
    let mut out = Vec::new();
    if !root.exists() {
        return Ok(out);
    }
    for entry in walkdir::WalkDir::new(root) {
        let entry = entry.map_err(|e| io::Error::new(io::ErrorKind::Other, e))?;
        let path = entry.path();
        if path.extension().and_then(|e| e.to_str()) != Some("json") {
            continue;
        }
        let text = fs::read_to_string(path)?;
        let golden: Golden = serde_json::from_str(&text).map_err(|e| {
            io::Error::new(
                io::ErrorKind::InvalidData,
                format!("invalid golden JSON at {}: {}", path.display(), e),
            )
        })?;
        out.push(golden);
    }
    out.sort_by(|a, b| {
        a.op_id
            .cmp(&b.op_id)
            .then(a.spec_version.cmp(&b.spec_version))
    });
    Ok(out)
}