weirflow 0.1.0

GPU-first dataflow analysis primitives for Vyre and Santh compiler pipelines.
Documentation
use super::*;

// 1. Panic paths
// ==================================================================

panic_test!(
    zero_procs_panics,
    "IFDS CPU oracle received malformed problem",
    solve_cpu(0, 1, 1, &[], &[], &[], &[], &[])
);
panic_test!(
    zero_blocks_panics,
    "IFDS CPU oracle received malformed problem",
    solve_cpu(1, 0, 1, &[], &[], &[], &[], &[])
);
panic_test!(
    zero_facts_panics,
    "IFDS CPU oracle received malformed problem",
    solve_cpu(1, 1, 0, &[], &[], &[], &[], &[])
);

panic_test!(
    intra_edge_proc_out_of_domain_panics,
    "IFDS CPU oracle received malformed problem",
    solve_cpu(1, 2, 1, &[(1, 0, 1)], &[], &[], &[], &[])
);
panic_test!(
    intra_edge_src_block_out_of_domain_panics,
    "IFDS CPU oracle received malformed problem",
    solve_cpu(1, 2, 1, &[(0, 2, 1)], &[], &[], &[], &[])
);
panic_test!(
    intra_edge_dst_block_out_of_domain_panics,
    "IFDS CPU oracle received malformed problem",
    solve_cpu(1, 2, 1, &[(0, 0, 2)], &[], &[], &[], &[])
);

panic_test!(
    inter_edge_src_proc_out_of_domain_panics,
    "IFDS CPU oracle received malformed problem",
    solve_cpu(1, 2, 1, &[], &[(1, 0, 0, 1)], &[], &[], &[])
);
panic_test!(
    inter_edge_dst_proc_out_of_domain_panics,
    "IFDS CPU oracle received malformed problem",
    solve_cpu(1, 2, 1, &[], &[(0, 0, 1, 1)], &[], &[], &[])
);
panic_test!(
    inter_edge_src_block_out_of_domain_panics,
    "IFDS CPU oracle received malformed problem",
    solve_cpu(1, 2, 1, &[], &[(0, 2, 0, 1)], &[], &[], &[])
);
panic_test!(
    inter_edge_dst_block_out_of_domain_panics,
    "IFDS CPU oracle received malformed problem",
    solve_cpu(1, 2, 1, &[], &[(0, 0, 0, 2)], &[], &[], &[])
);

panic_test!(
    gen_proc_out_of_domain_panics,
    "IFDS CPU oracle received malformed problem",
    solve_cpu(1, 2, 1, &[], &[], &[(1, 0, 0)], &[], &[])
);
panic_test!(
    gen_block_out_of_domain_panics,
    "IFDS CPU oracle received malformed problem",
    solve_cpu(1, 2, 1, &[], &[], &[(0, 2, 0)], &[], &[])
);
panic_test!(
    gen_fact_out_of_domain_panics,
    "IFDS CPU oracle received malformed problem",
    solve_cpu(1, 2, 1, &[], &[], &[(0, 0, 1)], &[], &[])
);

panic_test!(
    kill_proc_out_of_domain_panics,
    "IFDS CPU oracle received malformed problem",
    solve_cpu(1, 2, 1, &[], &[], &[], &[(1, 0, 0)], &[])
);
panic_test!(
    kill_block_out_of_domain_panics,
    "IFDS CPU oracle received malformed problem",
    solve_cpu(1, 2, 1, &[], &[], &[], &[(0, 2, 0)], &[])
);
panic_test!(
    kill_fact_out_of_domain_panics,
    "IFDS CPU oracle received malformed problem",
    solve_cpu(1, 2, 1, &[], &[], &[], &[(0, 0, 1)], &[])
);

panic_test!(
    seed_proc_out_of_domain_panics,
    "IFDS CPU oracle received malformed problem",
    solve_cpu(1, 2, 1, &[], &[], &[], &[], &[(1, 0, 0)])
);
panic_test!(
    seed_block_out_of_domain_panics,
    "IFDS CPU oracle received malformed problem",
    solve_cpu(1, 2, 1, &[], &[], &[], &[], &[(0, 2, 0)])
);
panic_test!(
    seed_fact_out_of_domain_panics,
    "IFDS CPU oracle received malformed problem",
    solve_cpu(1, 2, 1, &[], &[], &[], &[], &[(0, 0, 1)])
);

panic_test!(
    shape_overflow_procs_panics,
    "dimensions exceed 32-bit exploded-node encoding",
    solve_cpu(4097, 1, 1, &[], &[], &[], &[], &[])
);
panic_test!(
    shape_overflow_blocks_panics,
    "dimensions exceed 32-bit exploded-node encoding",
    solve_cpu(1, 1025, 1, &[], &[], &[], &[], &[])
);
panic_test!(
    shape_overflow_facts_panics,
    "dimensions exceed 32-bit exploded-node encoding",
    solve_cpu(1, 1, 1025, &[], &[], &[], &[], &[])
);

panic_test!(
    adversarial_zero_dimensions_panics,
    "IFDS CPU oracle received malformed problem",
    {
        let p = IfdsProblemBuilder::adversarial_zero_dimensions();
        solve_cpu(
            p.num_procs,
            p.blocks_per_proc,
            p.facts_per_proc,
            &p.intra_edges,
            &p.inter_edges,
            &p.flow_gen,
            &p.flow_kill,
            &p.seed_facts,
        )
    }
);

panic_test!(
    adversarial_overflow_shape_panics,
    "dimensions exceed 32-bit exploded-node encoding",
    {
        let p = IfdsProblemBuilder::adversarial_overflow_shape();
        solve_cpu(
            p.num_procs,
            p.blocks_per_proc,
            p.facts_per_proc,
            &p.intra_edges,
            &p.inter_edges,
            &p.flow_gen,
            &p.flow_kill,
            &p.seed_facts,
        )
    }
);

panic_test!(
    empty_dimensions_with_intra_rules_panics,
    "IFDS CPU oracle received malformed problem",
    solve_cpu(0, 1, 1, &[(0, 0, 1)], &[], &[], &[], &[])
);

panic_test!(
    u32_max_procs_rejected_panics,
    "dimensions exceed 32-bit exploded-node encoding",
    solve_cpu(u32::MAX, 1, 1, &[], &[], &[], &[], &[])
);
panic_test!(
    u32_max_blocks_rejected_panics,
    "dimensions exceed 32-bit exploded-node encoding",
    solve_cpu(1, u32::MAX, 1, &[], &[], &[], &[], &[])
);
panic_test!(
    u32_max_facts_rejected_panics,
    "dimensions exceed 32-bit exploded-node encoding",
    solve_cpu(1, 1, u32::MAX, &[], &[], &[], &[], &[])
);