1#[macro_export]
2macro_rules! eff_test_body {
3 ($component:ident, $eff_max:expr, $eff_min:expr, $eff_range:expr) => {
4 assert!(almost_eq($component.get_eff_max(), $eff_max, None));
5 assert!(almost_eq($component.get_eff_min(), $eff_min, None));
6 assert!(almost_eq($component.get_eff_range(), $eff_range, None));
7
8 $component.set_eff_max(0.9).unwrap();
9 assert!(almost_eq($component.get_eff_max(), 0.9, None));
10 assert!(almost_eq(
11 $component.get_eff_min(),
12 $eff_min * 0.9 / $eff_max,
13 None
14 ));
15 assert!(almost_eq(
16 $component.get_eff_range(),
17 $eff_range * 0.9 / $eff_max,
18 None
19 ));
20
21 $component.set_eff_range(0.2).unwrap();
22 assert!(almost_eq($component.get_eff_max(), 0.9, None));
23 assert!(almost_eq($component.get_eff_min(), 0.7, None));
24 assert!(almost_eq($component.get_eff_range(), 0.2, None));
25
26 $component.set_eff_range(0.98).unwrap();
27 assert!(almost_eq($component.get_eff_max(), 0.98, None));
28 assert!(almost_eq($component.get_eff_min(), 0.0, None));
29 assert!(almost_eq($component.get_eff_range(), 0.98, None));
30 };
31}
32
33#[macro_export]
34macro_rules! make_uom_cmp_fn {
35 ($name:ident) => {
36 paste! {
37 pub fn [<$name _uom>]<D, U>(
42 val1: &uom::si::Quantity<D, U, f64>,
43 val2: &uom::si::Quantity<D, U, f64>,
44 epsilon: Option<f64>,
45 ) -> bool
46 where
47 D: uom::si::Dimension + ?Sized,
48 U: uom::si::Units<f64> + ?Sized,
49 {
50 $name(val1.value, val2.value, epsilon)
51 }
52 }
53 };
54}
55
56#[macro_export]
57macro_rules! format_dbg {
59 ($dbg_expr:expr) => {
60 format!(
61 "[{}:{}] {}: {:?}",
62 file!(),
63 line!(),
64 stringify!($dbg_expr),
65 $dbg_expr
66 )
67 };
68 () => {
69 format!("[{}:{}]", file!(), line!())
70 };
71}
72
73#[macro_export]
74macro_rules! init_opt_default {
76 ($obj:ident, $fieldname:ident, $def_val:expr) => {
77 $obj.$fieldname = $obj.$fieldname.or(Some($def_val));
78 };
79}
80
81#[macro_export]
82macro_rules! timer {
84 ($code_block:expr) => {
85 #[cfg(feature = "timer")]
86 let now_and_then = Instant::now();
87 $code_block;
88 #[cfg(feature = "timer")]
89 println!(
90 "{}\nElapsed time: {} μs",
91 format_dbg!(),
92 now_and_then.elapsed().as_micros()
93 );
94 };
95}