injective_math/fp_decimal/
scale.rs1use crate::fp_decimal::FPDecimal;
2
3pub trait Scaled {
4 fn scaled(self, digits: i32) -> Self;
5}
6
7impl Scaled for FPDecimal {
8 fn scaled(self, digits: i32) -> Self {
9 self.to_owned() * FPDecimal::from(10i128).pow(FPDecimal::from(digits as i128)).unwrap()
10 }
11}
12
13pub fn dec_scale_factor() -> FPDecimal {
14 FPDecimal::ONE.scaled(18)
15}
16
17#[cfg(test)]
18mod tests {
19 use crate::fp_decimal::scale::{dec_scale_factor, Scaled};
20 use crate::FPDecimal;
21
22 #[test]
23 fn test_scale_descale() {
24 let val = FPDecimal::must_from_str("1000000000000000000");
25 let descaled = val.scaled(-18);
26 assert_eq!(descaled, FPDecimal::must_from_str("1"), "FPDecimal wasn't correctly scaled down");
27 let scaled = descaled.scaled(18);
28 assert_eq!(scaled, val, "FPDecimal wasn't correctly scaled up");
29 }
30
31 #[test]
32 fn test_scale_factor() {
33 assert_eq!(dec_scale_factor(), FPDecimal::must_from_str("1000000000000000000"));
34 }
35}