1
2#[macro_export]
4macro_rules! assert_approx_eq {
5 ($left:expr, $right:expr) => {{
6 let left_val = $left;
7 let epsilon = Scalar::<f64,_>::EPSILON;
8 assert_approx_eq!(left_val, $right, epsilon);
9 }};
10 ($left:expr, $right:expr, $epsilon:expr) => {{
11 let left_val = $left;
12 let right_val = $right;
13 let d = left_val.dist(right_val);
14 if d > $epsilon {
15 panic!(
16 "assertion failed: `abs({:?} - {:?}) < {}`\n\
17 left: {:?}, right: {:?}, distance: {}",
18 stringify!($left),
19 stringify!($right),
20 $epsilon,
21 left_val,
22 right_val,
23 d
24 );
25 }
26 }};
27}
28
29
30#[macro_export]
32macro_rules! cvec {
33 () => {
34 Tensor::<dimension::Dimensionless, 1, 0, 1>::zero()
36 };
37 ($($x:expr),+ $(,)?) => {{
38 const N: usize = <[()]>::len(&[$(cvec!(@replace $x)),*]);
40 Tensor::<c64,dimension::Dimensionless, 1, N, 1>::new::<units::Unitless>([
41 $($x.complex()),*
42 ])
43 }};
44 (@replace $_x:expr) => { () };
45}
46
47#[macro_export]
48macro_rules! dless {
49 ($x:expr) => {
50 Tensor::<_, dimension::Dimensionless, 1, 1, 1>::new::<units::Unitless>([$x])
51 };
52}