decimal_test.rs 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. #[cfg(test)]
  2. mod tests {
  3. use std::cmp::{max, min};
  4. use std::str::FromStr;
  5. use std::time::{Instant, Duration};
  6. use rust_decimal::Decimal;
  7. use rust_decimal::prelude::{FromPrimitive, ToPrimitive};
  8. use rust_decimal_macros::dec;
  9. #[test]
  10. // 计算十秒内能执行多少次decimal计算
  11. fn test_decimal_subtraction_performance() {
  12. // decimal使用的参考文档:https://docs.rs/rust_decimal/latest/rust_decimal/
  13. // 在AMD Ryzen 7 5800X 8-Core Processor下,Decimal平均每秒可以计算1200w次(28位小数)~1600w次(1位小数)
  14. let mut count = 0u64;
  15. let point_3 = dec!(0.3323289834012382184823981293);
  16. let point_2 = dec!(0.2518364912329136932183926421);
  17. let num = point_3 - point_2;
  18. let seconds = 10;
  19. let start = Instant::now();
  20. while start.elapsed() < Duration::from_secs(seconds) {
  21. let _ = point_3 - point_2;
  22. count += 1;
  23. }
  24. println!("Performed {} decimal subtractions in one second(avg), result is {:?}.", count / seconds, num.to_f64().unwrap());
  25. }
  26. #[test]
  27. fn test_decimal_equals() {
  28. let a = dec!(0.123234213);
  29. let b = dec!(0.123234213);
  30. println!("{} == {} is {}", a, b, a == b);
  31. println!("{}.eq({}) is {}", a, b, a.eq(&b));
  32. }
  33. #[test]
  34. fn test_decimal_min_and_max() {
  35. let a = dec!(0.123234213);
  36. let b = dec!(0.823004213);
  37. println!("max({}, {})={}", a, b, max(a, b));
  38. println!("min({}, {})={}", a, b, min(a, b));
  39. }
  40. #[test]
  41. fn test_decimal_from() {
  42. let a = dec!(1e-6);
  43. let b = Decimal::from_f64(f64::from_str("1e-6").unwrap()).unwrap();
  44. println!("a={}", a);
  45. println!("b={:?}", b);
  46. }
  47. }