use weir::must_init;
use weir::scc_query;
#[test]
fn must_init_cpu_ref_is_word_wise_and() {
let def = vec![0b1111_0000u32, 0xFFFF_FFFFu32];
let uses = vec![0b1010_1010u32, 0x0000_FFFFu32];
let out = weir::oracle::bitset::must_init(&def, &uses);
assert_eq!(out, vec![0b1010_0000u32, 0x0000_FFFFu32]);
}
#[test]
fn must_init_program_three_buffers() {
let prog = must_init::must_init(64, "def", "uses", "out");
let mut names: Vec<&str> = prog.buffers().iter().map(|b| b.name()).collect();
names.sort();
assert!(names.contains(&"def"));
assert!(names.contains(&"uses"));
assert!(names.contains(&"out"));
assert_eq!(prog.buffers().len(), 3);
assert!(!prog.entry().is_empty());
}
#[test]
fn scc_query_cpu_ref_intersects_query_with_same_scc_set() {
let same_scc = vec![0b1100u32];
let query = vec![0b1010u32];
assert_eq!(
weir::oracle::bitset::scc_query(&same_scc, &query),
vec![0b1000u32]
);
}
#[test]
fn scc_query_cpu_ref_returns_empty_for_disjoint_inputs() {
let same_scc = vec![0b1010u32, 0u32];
let query = vec![0b0101u32, 0xFFFF_FFFFu32];
assert_eq!(
weir::oracle::bitset::scc_query(&same_scc, &query),
vec![0u32, 0u32]
);
}
#[test]
fn scc_query_program_three_buffers() {
let prog = scc_query::scc_query(64, "same_scc", "query", "out");
let mut names: Vec<&str> = prog.buffers().iter().map(|b| b.name()).collect();
names.sort();
assert!(names.contains(&"same_scc"));
assert!(names.contains(&"query"));
assert!(names.contains(&"out"));
assert_eq!(prog.buffers().len(), 3);
assert!(!prog.entry().is_empty());
}