1 #![cfg(feature = "proptest-support")] 2 3 macro_rules! gen_tests( 4 ($module: ident, $scalar: expr) => { 5 mod $module { 6 #[allow(unused_imports)] 7 use crate::core::helper::{RandScalar, RandComplex}; 8 use crate::proptest::*; 9 use proptest::{prop_assert, proptest}; 10 11 proptest! { 12 #[test] 13 fn symm_tridiagonal(m in dmatrix_($scalar)) { 14 let m = &m * m.adjoint(); 15 let tri = m.clone().symmetric_tridiagonalize(); 16 let recomp = tri.recompose(); 17 18 prop_assert!(relative_eq!(m.lower_triangle(), recomp.lower_triangle(), epsilon = 1.0e-7)); 19 } 20 21 #[test] 22 fn symm_tridiagonal_singular(m in dmatrix_($scalar)) { 23 let mut m = &m * m.adjoint(); 24 let n = m.nrows(); 25 m.row_mut(n / 2).fill(na::zero()); 26 m.column_mut(n / 2).fill(na::zero()); 27 let tri = m.clone().symmetric_tridiagonalize(); 28 let recomp = tri.recompose(); 29 30 prop_assert!(relative_eq!(m.lower_triangle(), recomp.lower_triangle(), epsilon = 1.0e-7)); 31 } 32 33 #[test] 34 fn symm_tridiagonal_static_square(m in matrix4_($scalar)) { 35 let m = m.hermitian_part(); 36 let tri = m.symmetric_tridiagonalize(); 37 let recomp = tri.recompose(); 38 39 prop_assert!(relative_eq!(m.lower_triangle(), recomp.lower_triangle(), epsilon = 1.0e-7)); 40 } 41 42 #[test] 43 fn symm_tridiagonal_static_square_2x2(m in matrix2_($scalar)) { 44 let m = m.hermitian_part(); 45 let tri = m.symmetric_tridiagonalize(); 46 let recomp = tri.recompose(); 47 48 prop_assert!(relative_eq!(m.lower_triangle(), recomp.lower_triangle(), epsilon = 1.0e-7)); 49 } 50 } 51 } 52 } 53 ); 54 55 gen_tests!(complex, complex_f64()); 56 gen_tests!(f64, PROPTEST_F64); 57