use crate::prop::conn as conn_laws;
macro_rules! prove_uint_sat {
($mod_name:ident, $CONN:path, $A:ty, $B:ty) => {
mod $mod_name {
use super::*;
#[kani::proof]
fn galois_r() {
let a: $A = kani::any();
let b: $B = kani::any();
assert!(conn_laws::galois_r(&$CONN, a, b));
}
#[kani::proof]
fn monotone_r() {
let b1: $B = kani::any();
let b2: $B = kani::any();
assert!(conn_laws::monotone_r(&$CONN, b1, b2));
}
#[kani::proof]
fn closure_r() {
let a: $A = kani::any();
assert!(conn_laws::closure_r(&$CONN, a));
}
#[kani::proof]
fn kernel_r() {
let b: $B = kani::any();
assert!(conn_laws::kernel_r(&$CONN, b));
}
#[kani::proof]
fn idempotent_r() {
let b: $B = kani::any();
assert!(conn_laws::idempotent_r(&$CONN, b));
}
}
};
}
use crate::core::u008 as cu008;
use crate::core::u016 as cu016;
use crate::core::u032 as cu032;
use crate::core::u064 as cu064;
use crate::core::u128 as cu128;
prove_uint_sat!(u008i008, cu008::U008I008, u8, i8);
prove_uint_sat!(u016i008, cu016::U016I008, u16, i8);
prove_uint_sat!(u016i016, cu016::U016I016, u16, i16);
prove_uint_sat!(u032i008, cu032::U032I008, u32, i8);
prove_uint_sat!(u032i016, cu032::U032I016, u32, i16);
prove_uint_sat!(u064i008, cu064::U064I008, u64, i8);
prove_uint_sat!(u064i016, cu064::U064I016, u64, i16);
prove_uint_sat!(u064i032, cu064::U064I032, u64, i32);
prove_uint_sat!(u064i064, cu064::U064I064, u64, i64);
prove_uint_sat!(u128i008, cu128::U128I008, u128, i8);
prove_uint_sat!(u128i016, cu128::U128I016, u128, i16);
prove_uint_sat!(u128i032, cu128::U128I032, u128, i32);
prove_uint_sat!(u128i064, cu128::U128I064, u128, i64);
prove_uint_sat!(u128i128, cu128::U128I128, u128, i128);