@@ -100,46 +100,48 @@ fn det_zero_nonsquare() {
100100
101101#[ test]  
102102fn  det ( )  { 
103-     macro_rules!  det  { 
104-          ( $elem : ty ,  $shape : expr ,  $rtol : expr )  =>  { 
105-              let  a :   Array2 <$elem>  = random ( $shape ) ; 
106-             println! ( "a =  \n {:?}" ,  a ) ; 
107-              let  det = det_naive ( & a ) ; 
108-              let  sign  = det . div_real ( det . abs ( ) ) ; 
109-              let  ln_det  = det. abs ( ) . ln ( ) ; 
110-             assert_rclose! ( a . factorize ( ) . unwrap ( ) . det ( ) . unwrap ( ) ,  det ,  $rtol ) ; 
111-              { 
112-                  let  result = a . factorize ( ) . unwrap ( ) . sln_det ( ) . unwrap ( ) ; 
113-                 assert_rclose! ( result . 0 ,  sign ,  $rtol ) ; 
114-                  assert_rclose!( result. 1 ,  ln_det ,  $ rtol) ; 
115-             } 
116-             assert_rclose! ( a . factorize ( ) . unwrap ( ) . det_into ( ) . unwrap ( ) ,  det ,  $rtol ) ; 
117-              { 
118-                  let  result = a . factorize ( ) . unwrap ( ) . sln_det_into ( ) . unwrap ( ) ; 
119-                 assert_rclose! ( result . 0 ,  sign ,  $rtol ) ; 
120-                  assert_rclose!( result. 1 ,  ln_det ,  $ rtol) ; 
121-             } 
122-             assert_rclose! ( a . det ( ) . unwrap ( ) ,  det ,  $rtol ) ; 
123-              { 
124-                  let  result = a . sln_det ( ) . unwrap ( ) ; 
125-                 assert_rclose! ( result . 0 ,  sign ,  $rtol ) ; 
126-                  assert_rclose!( result. 1 ,  ln_det ,  $ rtol) ; 
127-             } 
128-             assert_rclose! ( a . clone ( ) . det_into ( ) . unwrap ( ) ,  det ,  $rtol ) ; 
129-              { 
130-                  let  result = a . sln_det_into ( ) . unwrap ( ) ; 
131-                 assert_rclose! ( result . 0 ,  sign ,  $rtol ) ; 
132-                  assert_rclose!( result. 1 ,  ln_det ,  $ rtol) ; 
133-             } 
134-         } ; 
103+     fn   det_impl < A ,   Tol > ( a :   Array2 < A > ,   rtol :   Tol ) 
104+     where 
105+         A :   Scalar < Real  = Tol > , 
106+         Tol :   RealScalar < Real  =  Tol > , 
107+     { 
108+         let  det  = det_naive ( & a ) ; 
109+         let  sign  = det. div_real ( det . abs ( ) ) ; 
110+         let  ln_det = det . abs ( ) . ln ( ) ; 
111+         assert_rclose ! ( a . factorize ( ) . unwrap ( ) . det ( ) . unwrap ( ) ,  det ,  rtol ) ; 
112+         { 
113+             let  result = a . factorize ( ) . unwrap ( ) . sln_det ( ) . unwrap ( ) ; 
114+             assert_rclose ! ( result. 0 ,  sign ,   rtol) ; 
115+             assert_rclose ! ( result . 1 ,  ln_det ,  rtol ) ; 
116+         } 
117+         assert_rclose ! ( a . factorize ( ) . unwrap ( ) . det_into ( ) . unwrap ( ) ,  det ,  rtol ) ; 
118+         { 
119+             let  result = a . factorize ( ) . unwrap ( ) . sln_det_into ( ) . unwrap ( ) ; 
120+             assert_rclose ! ( result. 0 ,  sign ,   rtol) ; 
121+             assert_rclose ! ( result . 1 ,  ln_det ,  rtol ) ; 
122+         } 
123+         assert_rclose ! ( a . det ( ) . unwrap ( ) ,  det ,  rtol ) ; 
124+         { 
125+             let  result = a . sln_det ( ) . unwrap ( ) ; 
126+             assert_rclose ! ( result. 0 ,  sign ,   rtol) ; 
127+             assert_rclose ! ( result . 1 ,  ln_det ,  rtol ) ; 
128+         } 
129+         assert_rclose ! ( a . clone ( ) . det_into ( ) . unwrap ( ) ,  det ,  rtol ) ; 
130+         { 
131+             let  result = a . sln_det_into ( ) . unwrap ( ) ; 
132+             assert_rclose ! ( result. 0 ,  sign ,   rtol) ; 
133+             assert_rclose ! ( result . 1 ,  ln_det ,  rtol ) ; 
134+         } 
135135    } 
136136    for  rows in  1 ..5  { 
137-         for  & shape in  & [ ( rows,  rows) . into_shape ( ) ,  ( rows,  rows) . f ( ) ]  { 
138-             det ! ( f64 ,  shape,  1e-9 ) ; 
139-             det ! ( f32 ,  shape,  1e-4 ) ; 
140-             det ! ( c64,  shape,  1e-9 ) ; 
141-             det ! ( c32,  shape,  1e-4 ) ; 
142-         } 
137+         det_impl ( random_regular :: < f64 > ( rows) ,  1e-9 ) ; 
138+         det_impl ( random_regular :: < f32 > ( rows) ,  1e-4 ) ; 
139+         det_impl ( random_regular :: < c64 > ( rows) ,  1e-9 ) ; 
140+         det_impl ( random_regular :: < c32 > ( rows) ,  1e-4 ) ; 
141+         det_impl ( random_regular :: < f64 > ( rows) . t ( ) . to_owned ( ) ,  1e-9 ) ; 
142+         det_impl ( random_regular :: < f32 > ( rows) . t ( ) . to_owned ( ) ,  1e-4 ) ; 
143+         det_impl ( random_regular :: < c64 > ( rows) . t ( ) . to_owned ( ) ,  1e-9 ) ; 
144+         det_impl ( random_regular :: < c32 > ( rows) . t ( ) . to_owned ( ) ,  1e-4 ) ; 
143145    } 
144146} 
145147
0 commit comments