use std::cmp;
use super::{Amount, SignedAmount};
#[kani::unwind(4)]
#[kani::proof]
fn u_amount_homomorphic() {
let n1 = kani::any::<u64>();
let n2 = kani::any::<u64>();
kani::assume(Amount::from_sat(n1).is_ok());
kani::assume(Amount::from_sat(n2).is_ok());
let sat = |sat| Amount::from_sat(sat).unwrap();
kani::assume(sat(n1).checked_add(sat(n2)).is_some());
assert_eq!(sat(n1) + sat(n2), sat(n1 + n2).into());
let max = cmp::max(n1, n2);
let min = cmp::min(n1, n2);
assert_eq!(sat(max) - sat(min), sat(max - min).into());
}
#[kani::unwind(4)]
#[kani::proof]
fn s_amount_homomorphic() {
let n1 = kani::any::<i64>();
let n2 = kani::any::<i64>();
kani::assume(SignedAmount::from_sat(n1).is_ok());
kani::assume(SignedAmount::from_sat(n2).is_ok());
let ssat = |ssat| SignedAmount::from_sat(ssat).unwrap();
kani::assume(ssat(n1).checked_add(ssat(n2)).is_some()); kani::assume(ssat(n1).checked_sub(ssat(n2)).is_some());
assert_eq!(ssat(n1) + ssat(n2), ssat(n1 + n2).into());
assert_eq!(ssat(n1) - ssat(n2), ssat(n1 - n2).into());
}