#[cfg(kani)]
mod case_fold_proofs {
use crate::case_folding::CASE_FOLDING_PAIRS;
#[kani::proof]
fn case_fold_table_sorted() {
let i: usize = kani::any();
kani::assume(i < CASE_FOLDING_PAIRS.len() - 1);
kani::assert(
CASE_FOLDING_PAIRS[i].0 < CASE_FOLDING_PAIRS[i + 1].0,
"CASE_FOLDING_PAIRS must be sorted by first element",
);
}
}
#[cfg(kani)]
mod numbits_proofs {
use crate::numbits::{MAX_BYTES_IN_ENCODING, numbits_from_f64, to_q_number_stack};
#[kani::proof]
#[kani::unwind(11)]
fn q_number_stack_encoding_bounds() {
let input: u64 = kani::any();
let result = to_q_number_stack(input);
kani::assert(
result.len() <= MAX_BYTES_IN_ENCODING,
"Q-number length must not exceed MAX_BYTES_IN_ENCODING",
);
}
#[kani::proof]
fn numbits_ordering_preserves_f64() {
let a: f64 = kani::any();
let b: f64 = kani::any();
kani::assume(a.is_finite());
kani::assume(b.is_finite());
kani::assume(a < b);
let na = numbits_from_f64(a);
let nb = numbits_from_f64(b);
kani::assert(na < nb, "numbits must preserve f64 ordering");
}
}