Skip to main content

fix32/
lib.rs

1pub mod fix32;
2
3/*   TODO:
4    - overflow checks
5    - Benchmark operations looking for performance problems
6
7*/
8
9#[cfg(test)]
10mod tests {
11    #[test]
12    fn creation() {
13        let n1 = super::fix32::Fix32::new();
14        assert_eq!(n1.n, 0);
15        let n1 = super::fix32::Fix32::from_i32(21_i32);
16        assert_eq!(n1.n, 21000_i32);
17        let n1 = super::fix32::Fix32::from_i64(-4_i64);
18        assert_eq!(n1.n, -4000_i32);
19        let n1 = super::fix32::Fix32::from_f32(3.1416);
20        assert_eq!(n1.n, 3141_i32);
21        let n1 = super::fix32::Fix32::from_f64(-1.23456789_f64);
22        assert_eq!(n1.n, -1234_i32);
23        let n1 = super::fix32::Fix32::with_n(456789_i32);
24        assert_eq!(n1.n, 456789_i32);
25    }
26
27    #[test]
28    fn get_values_from() {
29        let mut n1 = super::fix32::Fix32::from_f32(1.23456_f32);
30        assert_eq!((n1.get_f32() - 1.234_f32).abs() < 0.001_f32, true);
31        assert_eq!((n1.get_f64() - 1.234_f64).abs() < 0.001_f64, true);
32        assert_eq!(n1.get_str(), String::from("1.234"));
33        assert_eq!(n1.get_i32(), 1_i32);
34        assert_eq!(n1.get_rem(), 234_i32);
35        n1.trunc();
36        assert_eq!(n1.n, 1000_i32);
37    }
38
39    #[test]
40    fn trait_add() {
41        let n1 = super::fix32::Fix32::from_f32(1.23456_f32);
42        let n2 = super::fix32::Fix32::from_f32(6.5_f32);
43        let res = n1 + n2;
44        assert_eq!(res.n, 7734_i32);
45    }
46
47    #[test]
48    fn trait_sub() {
49        let n1 = super::fix32::Fix32::from_f32(1.23456_f32);
50        let n2 = super::fix32::Fix32::from_f32(6.5_f32);
51        let res = n1 - n2;
52        assert_eq!(res.n, -5266_i32);
53    }
54
55    #[test]
56    fn trait_mul() {
57        let n1 = super::fix32::Fix32::from_f32(1.5_f32);
58        let n2 = super::fix32::Fix32::from_f32(-6.5_f32);
59        let res = n1 * n2;
60        assert_eq!(res.n, -9750_i32);
61    }
62
63    #[test]
64    fn trait_div() {
65        let n1 = super::fix32::Fix32::from_f32(1.5_f32);
66        let n2 = super::fix32::Fix32::from_f32(-6.5_f32);
67        let res = n1 / n2;
68        assert_eq!(res.n, -230_i32);
69    }
70
71    #[test]
72    fn trait_rem() {
73        let n1 = super::fix32::Fix32::from_f32(100_f32);
74        let n2 = super::fix32::Fix32::from_f32(10_f32);
75        let res = n1 % n2;
76        assert_eq!(res.n, 0_i32);
77    }
78
79    #[test]
80    fn trait_comparing() {
81        let n1 = super::fix32::Fix32::from_f32(100_f32);
82        let n2 = super::fix32::Fix32::from_f32(10_f32);
83        assert_eq!(n1 > n2, true);
84        assert_eq!(n1 >= n2, true);
85        assert_eq!(n1 < n2, false);
86        assert_eq!(n1 <= n2, false);
87        assert_eq!(n1 == n2, false);
88        assert_eq!(n1 != n2, true);
89    }
90
91    #[test]
92    fn get_abs() {
93        let n = super::fix32::Fix32::from_f32(-5.124_f32);
94        assert_eq!(n.abs().n, 5124_i32);
95    }
96
97    #[test]
98    fn get_pow2() {
99        let n = super::fix32::Fix32::from_f32(-5.124_f32);
100        assert_eq!(n.pow2().n, 26255_i32);
101    }
102
103    #[test]
104    fn get_pow3() {
105        let n = super::fix32::Fix32::from_f32(-5.124_f32);
106        assert_eq!(n.pow3().n, -134530_i32);
107    }
108
109    #[test]
110    fn get_pow() {
111        let n = super::fix32::Fix32::from_f32(-2.2_f32);
112        assert_eq!(n.pow(5).n, -51535_i32);
113    }
114}