use proptest::prelude::*;
proptest! {
#![proptest_config(ProptestConfig::with_cases(10_000))]
#[test]
fn must_init_is_word_wise_and(
a in proptest::collection::vec(any::<u32>(), 0..16),
b in proptest::collection::vec(any::<u32>(), 0..16),
) {
let out = weir::oracle::bitset::must_init(&a, &b);
let n = a.len().min(b.len());
prop_assert_eq!(out.len(), n);
for i in 0..n {
prop_assert_eq!(out[i], a[i] & b[i]);
}
}
#[test]
fn scc_query_with_zero_query_yields_zero(
same_scc in proptest::collection::vec(any::<u32>(), 1..16),
) {
let zero = vec![0u32; same_scc.len()];
let out = weir::oracle::bitset::scc_query(&same_scc, &zero);
prop_assert!(out.iter().all(|w| *w == 0));
}
#[test]
fn live_at_with_all_ones_query_returns_original(
live in proptest::collection::vec(any::<u32>(), 1..16),
) {
let ones = vec![u32::MAX; live.len()];
let out = weir::oracle::bitset::live_at(&live, &ones);
prop_assert_eq!(out, live);
}
#[test]
fn post_dominates_is_commutative(
a in proptest::collection::vec(any::<u32>(), 1..8),
b in proptest::collection::vec(any::<u32>(), 1..8),
) {
let ab = weir::oracle::bitset::post_dominates(&a, &b);
let ba = weir::oracle::bitset::post_dominates(&b, &a);
prop_assert_eq!(ab, ba);
}
#[test]
fn must_init_idempotent_on_self(
a in proptest::collection::vec(any::<u32>(), 0..16),
) {
let out = weir::oracle::bitset::must_init(&a, &a);
prop_assert_eq!(out, a);
}
}