add fpnum literal macro
authoralfadur
Sat, 13 Oct 2018 20:01:09 +0300
changeset 13891 9ae1184886db
parent 13886 b6c35ac1c5ba
child 13892 57bac0456b86
add fpnum literal macro
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);