use crate::conn::{ConnL, ConnR};
use crate::core::f064::F064F032;
use crate::float::N5;
use crate::prop::conn as conn_laws;
fn arb_finite_ef64() -> N5<f64> {
let v: f64 = kani::any();
kani::assume(v.is_finite() && !v.is_nan());
N5::new(v)
}
fn arb_finite_ef32() -> N5<f32> {
let v: f32 = kani::any();
kani::assume(v.is_finite() && !v.is_nan());
N5::new(v)
}
fn arb_in_f32_range_ef64() -> N5<f64> {
let v: f64 = kani::any();
kani::assume(v.is_finite() && !v.is_nan());
kani::assume(v.abs() <= f32::MAX as f64);
N5::new(v)
}
#[kani::proof]
#[kani::unwind(4)]
fn finite_in_finite_out_ceil_in_range() {
let x = arb_in_f32_range_ef64();
let y = F064F032.upper(F064F032.ceil(x));
assert!(y.into_inner().is_finite());
}
#[kani::proof]
#[kani::unwind(4)]
fn finite_in_finite_out_floor_in_range() {
let x = arb_in_f32_range_ef64();
let y = F064F032.lower(F064F032.floor(x));
assert!(y.into_inner().is_finite());
}
#[kani::proof]
#[kani::unwind(4)]
fn closure_l_finite() {
let x = arb_finite_ef64();
assert!(conn_laws::closure_l(&F064F032.view_l(), x));
}
#[kani::proof]
#[kani::unwind(4)]
fn closure_r_finite() {
let x = arb_finite_ef64();
assert!(conn_laws::closure_r(&F064F032.view_r(), x));
}
#[kani::proof]
#[kani::unwind(4)]
fn idempotent_l_finite() {
let x = arb_finite_ef64();
assert!(conn_laws::idempotent_l(&F064F032.view_l(), x));
}
#[kani::proof]
#[kani::unwind(4)]
fn floor_le_ceil_finite() {
let x = arb_finite_ef64();
assert!(conn_laws::floor_le_ceil(&F064F032, x));
}
#[kani::proof]
#[kani::unwind(4)]
fn order_reflecting_finite() {
let b1 = arb_finite_ef32();
let b2 = arb_finite_ef32();
assert!(conn_laws::order_reflecting(&F064F032, b1, b2));
}
#[kani::proof]
#[kani::unwind(4)]
fn roundtrip_ceil_finite() {
let b = arb_finite_ef32();
assert!(conn_laws::roundtrip_ceil(&F064F032.view_l(), b));
}