vyre-primitives 0.6.2

Compositional primitives for vyre - marker types (always on) + Tier 2.5 LEGO substrate (feature-gated per domain).
Documentation
#![allow(unused_imports, unused_macros)]

use vyre_foundation::ir::Program;
use vyre_reference::value::Value;

pub(crate) use vyre_primitives::wire::pack_u32_slice as u32_bytes;

pub(crate) fn reference_eval_idoms(
    program: &Program,
    node_count: u32,
    edge_offsets: &[u32],
    edge_targets: &[u32],
    pred_offsets: &[u32],
    pred_targets: &[u32],
) -> Vec<u32> {
    let to_bytes = |w: &[u32]| w.iter().flat_map(|v| v.to_le_bytes()).collect::<Vec<u8>>();

    let values: Vec<Value> = vec![
        Value::from(to_bytes(edge_offsets)),
        Value::from(to_bytes(edge_targets)),
        Value::from(to_bytes(pred_offsets)),
        Value::from(to_bytes(pred_targets)),
        Value::from(to_bytes(&vec![0u32; node_count as usize])),
        Value::from(to_bytes(&vec![0u32; node_count as usize])),
    ];

    let outputs = vyre_reference::reference_eval(program, &values)
        .expect("dominator-tree reference program must evaluate");
    let bytes = outputs[0].to_bytes();
    bytes
        .chunks_exact(4)
        .map(|c| u32::from_le_bytes(c.try_into().expect("u32 output chunk has four bytes")))
        .collect()
}

macro_rules! adversarial_unary_vec_cases {
    ($($name:ident: $input:expr => $expected:expr, $message:expr;)+) => {
        $(
            #[test]
            fn $name() {
                let input = $input;
                let expected = $expected;
                let actual = cpu_ref(&input);
                assert_eq!(actual, expected, "{}", $message);
            }
        )+
    };
}

macro_rules! adversarial_binary_vec_cases {
    ($($name:ident: $lhs:expr, $rhs:expr => $expected:expr, $message:expr;)+) => {
        $(
            #[test]
            fn $name() {
                let lhs = $lhs;
                let rhs = $rhs;
                let expected = $expected;
                let actual = cpu_ref(&lhs, &rhs);
                assert_eq!(actual, expected, "{}", $message);
            }
        )+
    };
}

macro_rules! adversarial_binary_vec_usize_cases {
    ($($name:ident: $lhs:expr, $rhs:expr, $len:expr => $expected:expr, $message:expr;)+) => {
        $(
            #[test]
            fn $name() {
                let lhs = $lhs;
                let rhs = $rhs;
                let len = $len;
                let expected = $expected;
                let actual = cpu_ref(&lhs, &rhs, len);
                assert_eq!(actual, expected, "{}", $message);
            }
        )+
    };
}

macro_rules! adversarial_vec_u32_cases {
    ($($name:ident: $input:expr, $param:expr => $expected:expr, $message:expr;)+) => {
        $(
            #[test]
            fn $name() {
                let input = $input;
                let param = $param;
                let expected = $expected;
                let actual = cpu_ref(&input, param);
                assert_eq!(actual, expected, "{}", $message);
            }
        )+
    };
}