#[cfg(all(feature = "serde", any(feature = "integer", feature = "float")))]
pub mod serde;
#[cfg(all(feature = "borsh", any(feature = "integer", feature = "float")))]
pub mod borsh;
#[cfg(any(feature = "integer", feature = "float"))]
pub mod data;
#[cfg(any(feature = "integer", feature = "float"))]
#[allow(unused_imports)]
pub use data::{Data, PrecReq, PrecVal};
#[allow(dead_code)]
pub fn check_range<T>(name: &'static str, val: T, min: T, max: T) -> Result<(), String>
where
T: Copy + core::fmt::Display + Ord,
{
if val < min {
Err(format!("{name} {val} less than minimum {min}"))
} else if val > max {
Err(format!("{name} {val} greater than maximum {max}"))
} else {
Ok(())
}
}
#[cfg(test)]
#[cfg(any(feature = "integer", feature = "float"))]
pub mod test {
#[cfg(feature = "serde")]
pub use super::serde::test::*;
#[cfg(feature = "borsh")]
pub use super::borsh::test::*;
#[cfg(all(feature = "borsh", feature = "complex"))]
pub fn assert_eq_float_handle_nan(a: &crate::Float, b: &crate::Float) {
if a.is_nan() || b.is_nan() {
assert!(a.is_nan());
assert!(b.is_nan());
} else {
assert_eq!(a, b);
}
}
}