1 // Adapted from https://github.com/Alexhuszagh/rust-lexical.
2
3 use crate::lexical::num::{AsPrimitive, Float, Integer, Number};
4
check_as_primitive<T: AsPrimitive>(t: T)5 fn check_as_primitive<T: AsPrimitive>(t: T) {
6 let _: u32 = t.as_u32();
7 let _: u64 = t.as_u64();
8 let _: u128 = t.as_u128();
9 let _: usize = t.as_usize();
10 let _: f32 = t.as_f32();
11 let _: f64 = t.as_f64();
12 }
13
14 #[test]
as_primitive_test()15 fn as_primitive_test() {
16 check_as_primitive(1u32);
17 check_as_primitive(1u64);
18 check_as_primitive(1u128);
19 check_as_primitive(1usize);
20 check_as_primitive(1f32);
21 check_as_primitive(1f64);
22 }
23
check_number<T: Number>(x: T, y: T)24 fn check_number<T: Number>(x: T, y: T) {
25 // Copy, partialeq, partialord
26 let _ = x;
27 assert!(x < y);
28 assert!(x != y);
29
30 // Operations
31 let _ = y + x;
32
33 // Conversions already tested.
34 }
35
36 #[test]
number_test()37 fn number_test() {
38 check_number(1u32, 5);
39 check_number(1u64, 5);
40 check_number(1u128, 5);
41 check_number(1usize, 5);
42 check_number(1f32, 5.0);
43 check_number(1f64, 5.0);
44 }
45
check_integer<T: Integer>(x: T)46 fn check_integer<T: Integer>(x: T) {
47 // Bitwise operations
48 let _ = x & T::ZERO;
49 }
50
51 #[test]
integer_test()52 fn integer_test() {
53 check_integer(65u32);
54 check_integer(65u64);
55 check_integer(65u128);
56 check_integer(65usize);
57 }
58
check_float<T: Float>(x: T)59 fn check_float<T: Float>(x: T) {
60 // Check functions
61 let _ = x.pow10(5);
62 let _ = x.to_bits();
63 assert!(T::from_bits(x.to_bits()) == x);
64
65 // Check properties
66 let _ = x.to_bits() & T::SIGN_MASK;
67 let _ = x.to_bits() & T::EXPONENT_MASK;
68 let _ = x.to_bits() & T::HIDDEN_BIT_MASK;
69 let _ = x.to_bits() & T::MANTISSA_MASK;
70 }
71
72 #[test]
float_test()73 fn float_test() {
74 check_float(123f32);
75 check_float(123f64);
76 }
77