From d1b6c53b02fc94710890896cf65430ec05908dfe Mon Sep 17 00:00:00 2001 From: Felix Hekhorn Date: Fri, 11 Oct 2024 16:10:28 +0300 Subject: [PATCH] rust: Add rel to cmplx eq --- .../unpolarized/spacelike/as2.rs | 38 +++++++++---------- crates/ekore/src/util.rs | 5 +++ 2 files changed, 24 insertions(+), 19 deletions(-) diff --git a/crates/ekore/src/operator_matrix_elements/unpolarized/spacelike/as2.rs b/crates/ekore/src/operator_matrix_elements/unpolarized/spacelike/as2.rs index 45aed48a1..21b5e7056 100644 --- a/crates/ekore/src/operator_matrix_elements/unpolarized/spacelike/as2.rs +++ b/crates/ekore/src/operator_matrix_elements/unpolarized/spacelike/as2.rs @@ -299,7 +299,7 @@ mod test { fn test_quark_number_conservation() { let logs = [0., 100.]; for L in logs { - let N = cmplx![1., 0.]; + let N = cmplx!(1., 0.); let mut c = Cache::new(N); let aNSqq2 = A_qq_ns(&mut c, NF, L); assert_approx_eq_cmplx!(f64, aNSqq2, Complex::zero(), epsilon = 2e-11); @@ -310,7 +310,7 @@ mod test { fn test_momentum_conservation() { let logs = [0., 100.]; for L in logs { - let N = cmplx![2., 0.]; + let N = cmplx!(2., 0.); let mut c = Cache::new(N); let aS2 = A_singlet(&mut c, NF, L, false); @@ -346,14 +346,14 @@ mod test { #[test] fn pegasus_sign() { - let ref_val = cmplx![-21133.9, 0.]; - let N = cmplx![2., 0.]; + let ref_val = cmplx!(-21133.9, 0.); + let N = cmplx!(2., 0.); let mut c = Cache::new(N); let L = 100.; let aS2 = A_singlet(&mut c, NF, L, false); // add macro for this? - assert_approx_eq_cmplx!(f64, aS2[0][0], ref_val, epsilon = 4e-5 * (21133.9)); + assert_approx_eq_cmplx!(f64, aS2[0][0], ref_val, rel = 4e-5); } #[test] @@ -391,7 +391,7 @@ mod test { for n in 2..11 { for (i, L) in [0., 10.].iter().enumerate() { - let N = cmplx![n as f64, 0.]; + let N = cmplx!(n as f64, 0.); let mut c = Cache::new(N); let aS2 = A_singlet(&mut c, NF, *L, false); @@ -400,33 +400,33 @@ mod test { assert_approx_eq_cmplx!( f64, aS2[0][0], - cmplx![ref_val_gg[i][idx], 0.], - epsilon = 2e-6 * (-ref_val_gg[i][idx]) + cmplx!(ref_val_gg[i][idx], 0.), + rel = 2e-6 ); assert_approx_eq_cmplx!( f64, aS2[0][1], - cmplx![ref_val_gq[i][idx], 0.], - epsilon = 4e-6 * (ref_val_gq[i][idx]) + cmplx!(ref_val_gq[i][idx], 0.), + rel = 4e-6 ); assert_approx_eq_cmplx!( f64, aS2[2][0], - cmplx![ref_val_Hg[i][idx], 0.], - epsilon = 3e-6 * (ref_val_Hg[i][idx]) + cmplx!(ref_val_Hg[i][idx], 0.), + rel = 3e-6 ); assert_approx_eq_cmplx!( f64, aS2[2][1], - cmplx![ref_val_Hq[i][idx], 0.], - epsilon = 3e-6 * (-ref_val_Hq[i][idx]) + cmplx!(ref_val_Hq[i][idx], 0.), + rel = 3e-6 ); } assert_approx_eq_cmplx!( f64, aS2[1][1], - cmplx![ref_val_qq[i][n - 2], 0.], - epsilon = 4e-6 * (-ref_val_qq[i][n - 2]) + cmplx!(ref_val_qq[i][n - 2], 0.), + rel = 4e-6 ); } } @@ -436,7 +436,7 @@ mod test { fn Hg2_pegasus() { let L = 0.; for n in 3..20 { - let N = cmplx![n as f64, 0.]; + let N = cmplx!(n as f64, 0.); let mut c = Cache::new(N); @@ -458,7 +458,7 @@ mod test { + 93.68 * 1.0 / N.powu(2) - 146.8 * E2; - assert_approx_eq_cmplx!(f64, aS2[2][0], a_hg_param, epsilon = 7e-4 * a_hg_param.re); + assert_approx_eq_cmplx!(f64, aS2[2][0], a_hg_param, rel = 7e-4); } } @@ -466,7 +466,7 @@ mod test { fn msbar_matching() { let logs = [0., 100.]; for L in logs { - let N = cmplx![2., 0.]; + let N = cmplx!(2., 0.); let mut c = Cache::new(N); let aS2 = A_singlet(&mut c, NF, L, false); assert_approx_eq_cmplx!( diff --git a/crates/ekore/src/util.rs b/crates/ekore/src/util.rs index 2f70faea1..b5c812165 100644 --- a/crates/ekore/src/util.rs +++ b/crates/ekore/src/util.rs @@ -12,6 +12,11 @@ macro_rules! cmplx { #[cfg(test)] #[macro_export] macro_rules! assert_approx_eq_cmplx { + ($size:ty, $ref:expr, $target:expr, rel=$rel:expr) => { + assert!($target.norm() > 0.0, "target has norm=0!"); + float_cmp::assert_approx_eq!($size, $ref.re, $target.re, epsilon = $rel * $target.norm()); + float_cmp::assert_approx_eq!($size, $ref.im, $target.im, epsilon = $rel * $target.norm()); + }; ($size:ty, $ref:expr, $target:expr $(, $set:ident = $val:expr)*) => { float_cmp::assert_approx_eq!($size, $ref.re, $target.re $(, $set = $val)*); float_cmp::assert_approx_eq!($size, $ref.im, $target.im $(, $set = $val)*);