use alice_physics::math::{Fix128, Vec3Fix};
fn main() {
let v = Vec3Fix::from_int(3, 4, 12);
assert_eq!(v.checked_dot(v), Some(v.dot(v)));
assert_eq!(v.checked_length_squared(), Some(Fix128::from_int(169)));
assert_eq!(v.checked_length(), Some(v.length()));
assert_eq!(v.checked_length(), Some(Fix128::from_int(13)));
assert_eq!(v.checked_normalize(), v.try_normalize());
assert_eq!(v.checked_length_scaled(), Some(v.length()));
assert_eq!(v.try_normalize_scaled(), v.try_normalize());
println!("[vector_range_checks] |(3,4,12)| = 13, checked == unchecked");
let far = Vec3Fix::from_int(1 << 32, 0, 0);
assert_eq!(far.checked_dot(far), None);
assert_eq!(far.checked_length_squared(), None);
assert_eq!(far.checked_length(), None);
assert_eq!(far.checked_normalize(), None);
assert_eq!(far.length(), Fix128::ZERO);
assert_eq!(far.checked_length_scaled(), Some(Fix128::from_int(1 << 32)));
assert_eq!(far.try_normalize_scaled(), Some(Vec3Fix::from_int(1, 0, 0)));
println!(
"[vector_range_checks] |(2^32,0,0)|: length {:?}, checked {:?}, scaled {:?}",
far.length().hi,
far.checked_length().map(|l| l.hi),
far.checked_length_scaled().map(|l| l.hi)
);
let max = Fix128::from_int(i64::MAX);
assert_eq!(max.checked_add(Fix128::ZERO), Some(max));
assert_eq!(max.checked_add(Fix128::ONE), None);
println!("[vector_range_checks] 2^63 - 1 + 1 refused");
}