#[macro_export]
macro_rules! usd {
( $amount:expr ) => {{
let val = rust_decimal_macros::dec!($amount);
$crate::Money::new(val, $crate::Currency::USD).unwrap()
}};
}
#[macro_export]
macro_rules! cad {
( $amount:expr ) => {{
let val = rust_decimal_macros::dec!($amount);
$crate::Money::new(val, $crate::Currency::CAD).unwrap()
}};
}
#[cfg(test)]
#[allow(non_snake_case)]
mod tests {
use crate::{Currency, Money};
use anyhow::Result;
use expecting::*;
use rust_decimal_macros::dec;
#[test]
fn usd__0_decimals() -> Result<()> {
expect_eq!(usd!(0), Money::new(dec!(0), Currency::USD).unwrap());
expect_eq!(usd!(1), Money::new(dec!(1), Currency::USD).unwrap());
expect_eq!(usd!(-1), Money::new(dec!(-1), Currency::USD).unwrap());
Ok(())
}
#[test]
fn usd__2_decimals() -> Result<()> {
expect_eq!(usd!(0.00), Money::new(dec!(0), Currency::USD).unwrap());
expect_eq!(usd!(1.00), Money::new(dec!(1), Currency::USD).unwrap());
expect_eq!(usd!(1.01), Money::new(dec!(1.01), Currency::USD).unwrap());
expect_eq!(usd!(-1.01), Money::new(dec!(-1.01), Currency::USD).unwrap());
Ok(())
}
#[test]
#[should_panic]
fn usd__3_decimals__panics() {
usd!(0.123);
}
#[test]
fn cad__0_decimals() -> Result<()> {
expect_eq!(cad!(0), Money::new(dec!(0), Currency::CAD).unwrap());
expect_eq!(cad!(1), Money::new(dec!(1), Currency::CAD).unwrap());
expect_eq!(cad!(-1), Money::new(dec!(-1), Currency::CAD).unwrap());
Ok(())
}
#[test]
fn cad__2_decimals() -> Result<()> {
expect_eq!(cad!(0.00), Money::new(dec!(0), Currency::CAD).unwrap());
expect_eq!(cad!(1.00), Money::new(dec!(1), Currency::CAD).unwrap());
expect_eq!(cad!(1.01), Money::new(dec!(1.01), Currency::CAD).unwrap());
expect_eq!(cad!(-1.01), Money::new(dec!(-1.01), Currency::CAD).unwrap());
Ok(())
}
#[test]
#[should_panic]
fn cad__3_decimals__panics() {
cad!(0.123);
}
}