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