blob: 1a94be01302cbb75acf44d763489b0757d7fef47 [file] [log] [blame]
// Adapted from https://github.com/Alexhuszagh/rust-lexical.
use crate::lexical::num::{AsPrimitive, Float, Integer, Number};
fn check_as_primitive<T: AsPrimitive>(t: T) {
let _: u32 = t.as_u32();
let _: u64 = t.as_u64();
let _: u128 = t.as_u128();
let _: usize = t.as_usize();
let _: f32 = t.as_f32();
let _: f64 = t.as_f64();
}
#[test]
fn as_primitive_test() {
check_as_primitive(1u32);
check_as_primitive(1u64);
check_as_primitive(1u128);
check_as_primitive(1usize);
check_as_primitive(1f32);
check_as_primitive(1f64);
}
fn check_number<T: Number>(x: T, y: T) {
// Copy, partialeq, partialord
let _ = x;
assert!(x < y);
assert!(x != y);
// Operations
let _ = y + x;
// Conversions already tested.
}
#[test]
fn number_test() {
check_number(1u32, 5);
check_number(1u64, 5);
check_number(1u128, 5);
check_number(1usize, 5);
check_number(1f32, 5.0);
check_number(1f64, 5.0);
}
fn check_integer<T: Integer>(x: T) {
// Bitwise operations
let _ = x & T::ZERO;
}
#[test]
fn integer_test() {
check_integer(65u32);
check_integer(65u64);
check_integer(65u128);
check_integer(65usize);
}
fn check_float<T: Float>(x: T) {
// Check functions
let _ = x.pow10(5);
let _ = x.to_bits();
assert!(T::from_bits(x.to_bits()) == x);
// Check properties
let _ = x.to_bits() & T::SIGN_MASK;
let _ = x.to_bits() & T::EXPONENT_MASK;
let _ = x.to_bits() & T::HIDDEN_BIT_MASK;
let _ = x.to_bits() & T::MANTISSA_MASK;
}
#[test]
fn float_test() {
check_float(123f32);
check_float(123f64);
}