use super::*;
#[test]
fn cuda_reaching_chain_propagates_forward() {
let backend = live_dispatcher();
let dispatch = run_dispatch(&backend);
let edge_offsets = vec![0u32, 1, 2, 3, 3];
let edge_targets = vec![1u32, 2, 3];
let edge_kind_mask = vec![edge_kind::CONTROL; 3];
let seed_bits = vec![0b0001u32];
let cpu = reaching_closure_cpu(4, &edge_offsets, &edge_targets, &edge_kind_mask, &seed_bits);
let gpu = reaching_closure_borrowed_via(
&dispatch,
4,
&edge_offsets,
&edge_targets,
&edge_kind_mask,
&seed_bits,
16,
)
.expect("dispatch");
assert_eq!(gpu, cpu);
assert_eq!(gpu, vec![0b1111u32]);
}
#[test]
fn cuda_reaching_diamond() {
let backend = live_dispatcher();
let dispatch = run_dispatch(&backend);
let edge_offsets = vec![0u32, 2, 3, 4, 4];
let edge_targets = vec![1u32, 2, 3, 3];
let edge_kind_mask = vec![edge_kind::CONTROL; 4];
let seed_bits = vec![0b0001u32];
let cpu = reaching_closure_cpu(4, &edge_offsets, &edge_targets, &edge_kind_mask, &seed_bits);
let gpu = reaching_closure_borrowed_via(
&dispatch,
4,
&edge_offsets,
&edge_targets,
&edge_kind_mask,
&seed_bits,
16,
)
.expect("dispatch");
assert_eq!(gpu, cpu);
assert_eq!(gpu, vec![0b1111u32]);
}
#[test]
fn cuda_reaching_non_control_blocked() {
let backend = live_dispatcher();
let dispatch = run_dispatch(&backend);
let edge_offsets = vec![0u32, 1, 1];
let edge_targets = vec![1u32];
let edge_kind_mask = vec![edge_kind::ASSIGNMENT];
let seed_bits = vec![0b01u32];
let cpu = reaching_closure_cpu(2, &edge_offsets, &edge_targets, &edge_kind_mask, &seed_bits);
let gpu = reaching_closure_borrowed_via(
&dispatch,
2,
&edge_offsets,
&edge_targets,
&edge_kind_mask,
&seed_bits,
16,
)
.expect("dispatch");
assert_eq!(gpu, cpu);
assert_eq!(gpu, vec![0b01u32]);
}
#[test]
fn cuda_reaching_self_loop_terminates() {
let backend = live_dispatcher();
let dispatch = run_dispatch(&backend);
let edge_offsets = vec![0u32, 1, 1];
let edge_targets = vec![0u32];
let edge_kind_mask = vec![edge_kind::CONTROL];
let seed_bits = vec![0b01u32];
let cpu = reaching_closure_cpu(2, &edge_offsets, &edge_targets, &edge_kind_mask, &seed_bits);
let gpu = reaching_closure_borrowed_via(
&dispatch,
2,
&edge_offsets,
&edge_targets,
&edge_kind_mask,
&seed_bits,
50,
)
.expect("dispatch");
assert_eq!(gpu, cpu);
}
#[test]
fn cuda_reaching_disconnected() {
let backend = live_dispatcher();
let dispatch = run_dispatch(&backend);
let edge_offsets = vec![0u32, 1, 1, 2, 2];
let edge_targets = vec![1u32, 3];
let edge_kind_mask = vec![edge_kind::CONTROL; 2];
let seed_bits = vec![0b0001u32]; let cpu = reaching_closure_cpu(4, &edge_offsets, &edge_targets, &edge_kind_mask, &seed_bits);
let gpu = reaching_closure_borrowed_via(
&dispatch,
4,
&edge_offsets,
&edge_targets,
&edge_kind_mask,
&seed_bits,
16,
)
.expect("dispatch");
assert_eq!(gpu, cpu);
assert_eq!(gpu, vec![0b0011u32]);
}