# HG changeset patch # User alfadur # Date 1539450069 -10800 # Node ID 9ae1184886dbd3b1e3e15cd00239661737c35fd8 # Parent b6c35ac1c5ba37d11e14e7d35f0e4e07ae73c4e0 add fpnum literal macro diff -r b6c35ac1c5ba -r 9ae1184886db rust/fpnum/src/lib.rs --- a/rust/fpnum/src/lib.rs Sat Oct 13 18:32:41 2018 +0200 +++ b/rust/fpnum/src/lib.rs Sat Oct 13 20:01:09 2018 +0300 @@ -270,6 +270,12 @@ } } +macro_rules! fp { + (-$n: tt / $d: tt) => { FPNum::new(-$n, $d) }; + ($n: tt / $d: tt) => { FPNum::new($n, $d) }; + ($n: tt) => { FPNum::from($n) }; +} + /* TODO: Distance DistanceI @@ -281,7 +287,7 @@ #[cfg(test)] #[test] fn basics() { - let n = FPNum::new(15, 2); + let n = fp!(15/2); assert!(n.is_positive()); assert!(!n.is_negative()); @@ -290,7 +296,7 @@ assert_eq!(-(-n), n); assert_eq!((-n).abs(), n); - assert_eq!(-n, FPNum::new(-15, 2)); + assert_eq!(-n, fp!(-15/2)); assert_eq!(n.round(), 7); assert_eq!((-n).round(), -7); @@ -298,8 +304,8 @@ #[test] fn zero() { - let z = FPNum::from(0); - let n = FPNum::new(15, 2); + let z = fp!(0); + let n = fp!(15/2); assert!(z.is_zero()); assert!(z.is_positive()); @@ -310,9 +316,9 @@ #[test] fn ord() { - let z = FPNum::from(0);; - let n1_5 = FPNum::new(3, 2); - let n2_25 = FPNum::new(9, 4); + let z = fp!(0); + let n1_5 = fp!(3/2); + let n2_25 = fp!(9/4); assert!(!(z > z)); assert!(!(z < z)); @@ -323,12 +329,12 @@ #[test] fn arith() { - let n1_5 = FPNum::new(3, 2); - let n2_25 = FPNum::new(9, 4); - let n_0_15 = FPNum::new(-15, 100); + let n1_5 = fp!(3/2); + let n2_25 = fp!(9/4); + let n_0_15 = fp!(-15/100); - assert_eq!(n1_5 + n1_5, FPNum::from(3)); - assert_eq!(-n1_5 - n1_5, FPNum::from(-3)); + assert_eq!(n1_5 + n1_5, fp!(3)); + assert_eq!(-n1_5 - n1_5, fp!(-3)); assert_eq!(n1_5 * n1_5, n2_25); assert_eq!(-n1_5 * -n1_5, n2_25);