fixed_point/
fixed_point.rs1use honggfuzz::fuzz;
31use sp_arithmetic::{traits::Saturating, FixedI64, FixedPointNumber};
32
33fn main() {
34 loop {
35 fuzz!(|data: (i32, i32)| {
36 let x: i128 = data.0.into();
37 let y: i128 = data.1.into();
38
39 if y != 0 {
41 let f1 =
42 FixedI64::saturating_from_integer(x) / FixedI64::saturating_from_integer(y);
43 let f2 = FixedI64::saturating_from_rational(x, y);
44 assert_eq!(f1.into_inner(), f2.into_inner());
45 }
46
47 let a = FixedI64::saturating_from_rational(2, 5);
49 let b = a.saturating_mul(FixedI64::saturating_from_integer(x));
50 let n = b.into_inner() as i128;
51 let m = 2i128 * x * FixedI64::accuracy() as i128 / 5i128;
52 assert_eq!(n, m);
53
54 if x != 0 {
56 assert_eq!(a, b / FixedI64::saturating_from_integer(x));
57 }
58
59 let r = a.reciprocal().unwrap().reciprocal().unwrap();
61 assert_eq!(a, r);
62
63 let a = FixedI64::saturating_from_integer(x);
65 let b = FixedI64::saturating_from_integer(y);
66 let c = FixedI64::saturating_from_integer(x.saturating_add(y));
67 assert_eq!(a.saturating_add(b), c);
68
69 let a = FixedI64::saturating_from_integer(x);
71 let b = FixedI64::saturating_from_integer(y);
72 let c = FixedI64::saturating_from_integer(x.saturating_sub(y));
73 assert_eq!(a.saturating_sub(b), c);
74
75 let a = FixedI64::saturating_from_rational(2, 5);
77 let b = a.saturating_mul_acc_int(x);
78 let xx = FixedI64::saturating_from_integer(x);
79 let d = a.saturating_mul(xx).saturating_add(xx).into_inner() as i128 /
80 FixedI64::accuracy() as i128;
81 assert_eq!(b, d);
82 });
83 }
84}