vyre-self-substrate 0.6.3

Vyre self-substrate: vyre using its own primitives on its own scheduler problems. The recursion-thesis layer between vyre-primitives and vyre-driver.
Documentation
use super::*;
use vyre_foundation::ir::{Node, Program};
use vyre_primitives::graph::program_graph::ProgramGraphShape;

fn region_generator(node: &Node) -> &str {
    let Node::Region { generator, .. } = node else {
        panic!("Fix: graph traversal child helper must emit a Region.");
    };
    generator.as_str()
}

fn program_generator(program: &Program) -> &str {
    let Some(Node::Region { generator, .. }) = program.entry.first() else {
        panic!("Fix: graph traversal Program must start with a Region.");
    };
    generator.as_str()
}

fn dense_adj(edges: &[(u32, u32)], node_count: u32) -> Vec<u32> {
    let words = vyre_primitives::bitset::bitset_words(node_count) as usize;
    let mut rows = vec![0; node_count as usize * words];
    for &(src, dst) in edges {
        rows[dst as usize * words + src as usize / 32] |= 1 << (src % 32);
    }
    rows
}

#[test]
fn dispatch_programs_emit_expected_graph_primitives() {
    let shape = ProgramGraphShape::new(4, 4);
    assert_eq!(
        program_generator(&dispatch_adaptive_dense_step("fin", "fout", "adj", 4)),
        "vyre-primitives::graph::adaptive_traverse_dense"
    );
    assert_eq!(
        program_generator(&dispatch_csr_forward_parallel(
            shape, "frontier", "changed", 1
        )),
        "vyre-primitives::graph::csr_forward_or_changed"
    );
    assert_eq!(
        program_generator(&dispatch_csr_forward_batch(
            shape, "frontier", "changed", 1, 2
        )),
        "vyre-primitives::graph::csr_forward_or_changed"
    );
    assert_eq!(
        program_generator(&dispatch_csr_forward_batch_global(
            shape, "frontier", "changed", 1, 2
        )),
        "vyre-primitives::graph::csr_forward_or_changed"
    );
    assert_eq!(
        program_generator(&dispatch_csr_forward_batch_global_slot(
            shape, "frontier", "changed", 1, 2, 0, 1
        )),
        "vyre-primitives::graph::csr_forward_or_changed"
    );
    assert_eq!(
        program_generator(&dispatch_frontier_degree_sum(shape)),
        "vyre-primitives::graph::csr_frontier_degree_sum"
    );
    assert_eq!(
        program_generator(&dispatch_persistent_bfs_step(
            shape, "frontier", "changed", 1
        )),
        "vyre-primitives::graph::persistent_bfs_step"
    );
}

#[test]
fn child_regions_preserve_parent_context() {
    let shape = ProgramGraphShape::new(4, 4);
    let parent = "vyre-self-substrate::graph::traversal_dispatch_pipeline";
    assert_eq!(
        region_generator(&child_csr_forward_stage(
            parent, shape, "frontier", "changed", 1
        )),
        "vyre-primitives::graph::csr_forward_or_changed"
    );
    assert_eq!(
        region_generator(&prefixed_child_csr_forward_stage(
            parent, shape, "frontier", "changed", 1, "csr"
        )),
        "vyre-primitives::graph::csr_forward_or_changed"
    );
    assert_eq!(
        region_generator(&child_persistent_step(
            parent, shape, "frontier", "changed", "scratch", 1
        )),
        "vyre-primitives::graph::persistent_bfs_step"
    );
    assert_eq!(
        region_generator(&prefixed_child_persistent_step(
            parent, shape, "frontier", "changed", "scratch", 1, "step"
        )),
        "vyre-primitives::graph::persistent_bfs_step"
    );
    assert_eq!(
        region_generator(&active_child_persistent_step(
            parent,
            shape,
            "frontier",
            "changed",
            "scratch",
            "active",
            1,
            "active_step"
        )),
        "vyre-primitives::graph::persistent_bfs_step"
    );
}

#[test]
fn body_builders_emit_composable_ir() {
    let shape = ProgramGraphShape::new(4, 4);
    assert_ne!(csr_forward_body(shape, "frontier", "changed", 1).len(), 0);
    assert_ne!(
        prefixed_csr_forward_body(shape, "frontier", "changed", 1, "csr").len(),
        0
    );
    assert_ne!(
        persistent_step_body(shape, "frontier", "changed", "scratch", 1).len(),
        0
    );
    assert_ne!(
        prefixed_persistent_step_body(shape, "frontier", "changed", "scratch", 1, "step").len(),
        0
    );
}

#[test]
fn checked_batch_builders_reject_invalid_dimensions() {
    let shape = ProgramGraphShape::new(4, 4);
    assert!(matches!(
        dispatch_csr_forward_batch_checked(shape, "frontier", "changed", 1, 0),
        Err(_)
    ));
    assert!(dispatch_csr_forward_batch_global_slot_checked(
        shape, "frontier", "changed", 1, 1, 2, 2
    )
    .is_err());
}

#[test]
fn cpu_reference_wrappers_match_traversal_contracts() {
    assert!(!select_dense_traversal(&[0x7f], 32));
    assert!(select_dense_traversal(&[0xff], 32));

    let dense = dense_adj(&[(0, 1), (2, 3)], 8);
    assert_eq!(reference_dense_step(&[1], &dense, 8), vec![0b10]);

    let frontier = [0b101];
    let edge_offsets = [0, 3, 7, 9, 9, 12];
    assert_eq!(
        reference_frontier_degree_sum(&frontier, &edge_offsets, 5),
        5
    );
    assert_eq!(
        try_reference_frontier_degree_sum(&frontier, &edge_offsets, 5).unwrap(),
        5
    );

    let mut current = Vec::new();
    let mut next = Vec::new();
    reference_csr_closure_into(
        3,
        &[0, 1, 2, 2],
        &[1, 2],
        &[1, 1],
        &[0b001],
        1,
        4,
        &mut current,
        &mut next,
    );
    assert_eq!(current, vec![0b111]);
}