use uhlc::NTP64;
const fn ntp64_to_u64(t: NTP64) -> u64 {
t.0
}
const fn u64_to_ntp64(n: u64) -> NTP64 {
NTP64(n)
}
crate::iso! {
pub NDURU064 : NTP64 => u64 {
forward: ntp64_to_u64,
back: u64_to_ntp64,
}
}
#[cfg(test)]
mod tests {
use super::*;
use crate::prop::conn as conn_laws;
use proptest::prelude::*;
proptest! {
#[test]
fn iso_roundtrip_l(n in any::<u64>()) {
let t = NTP64(n);
prop_assert!(conn_laws::iso_roundtrip_l(&NDURU064.view_l(), t));
}
#[test]
fn roundtrip_ceil(n in any::<u64>()) {
prop_assert!(conn_laws::roundtrip_ceil(&NDURU064.view_l(), n));
}
#[test]
fn galois_l(n in any::<u64>(), m in any::<u64>()) {
let t = NTP64(n);
prop_assert!(conn_laws::galois_l(&NDURU064.view_l(), t, m));
}
#[test]
fn galois_r(n in any::<u64>(), m in any::<u64>()) {
let t = NTP64(n);
prop_assert!(conn_laws::galois_r(&NDURU064.view_r(), t, m));
}
#[test]
fn floor_le_ceil(n in any::<u64>()) {
let t = NTP64(n);
prop_assert!(conn_laws::floor_le_ceil(&NDURU064, t));
}
}
#[test]
fn boundary_values() {
assert_eq!(NDURU064.view_l().ceil(NTP64(0)), 0);
assert_eq!(NDURU064.view_l().upper(0), NTP64(0));
assert_eq!(NDURU064.view_l().ceil(NTP64(u64::MAX)), u64::MAX);
assert_eq!(NDURU064.view_l().upper(u64::MAX), NTP64(u64::MAX));
}
}