11//! Assertions for array
22
33use ndarray:: * ;
4+ use std:: fmt:: Debug ;
45
56use super :: norm:: * ;
67use super :: types:: * ;
78
89/// check two values are close in terms of the relative torrence
9- pub fn rclose < A : Scalar > ( test : A , truth : A , rtol : A :: Real ) -> Result < A :: Real , A :: Real > {
10+ pub fn rclose < A : Scalar > ( test : A , truth : A , rtol : A :: Real ) {
1011 let dev = ( test - truth) . abs ( ) / truth. abs ( ) ;
11- if dev < rtol {
12- Ok ( dev )
13- } else {
14- Err ( dev)
12+ if dev > rtol {
13+ eprintln ! ( "Expected = {}" , truth ) ;
14+ eprintln ! ( "Actual = {}" , test ) ;
15+ panic ! ( "Too large deviation in relative torrence: {}" , dev) ;
1516 }
1617}
1718
1819/// check two values are close in terms of the absolute torrence
19- pub fn aclose < A : Scalar > ( test : A , truth : A , atol : A :: Real ) -> Result < A :: Real , A :: Real > {
20+ pub fn aclose < A : Scalar > ( test : A , truth : A , atol : A :: Real ) {
2021 let dev = ( test - truth) . abs ( ) ;
21- if dev < atol {
22- Ok ( dev )
23- } else {
24- Err ( dev)
22+ if dev > atol {
23+ eprintln ! ( "Expected = {}" , truth ) ;
24+ eprintln ! ( "Actual = {}" , test ) ;
25+ panic ! ( "Too large deviation in absolute torrence: {}" , dev) ;
2526 }
2627}
2728
2829/// check two arrays are close in maximum norm
29- pub fn close_max < A , S1 , S2 , D > (
30- test : & ArrayBase < S1 , D > ,
31- truth : & ArrayBase < S2 , D > ,
32- atol : A :: Real ,
33- ) -> Result < A :: Real , A :: Real >
30+ pub fn close_max < A , S1 , S2 , D > ( test : & ArrayBase < S1 , D > , truth : & ArrayBase < S2 , D > , atol : A :: Real )
3431where
3532 A : Scalar + Lapack ,
3633 S1 : Data < Elem = A > ,
3734 S2 : Data < Elem = A > ,
3835 D : Dimension ,
36+ D :: Pattern : PartialEq + Debug ,
3937{
4038 let tol = ( test - truth) . norm_max ( ) ;
41- if tol < atol {
42- Ok ( tol )
43- } else {
44- Err ( tol)
39+ if tol > atol {
40+ eprintln ! ( "Expected: \n {}" , truth ) ;
41+ eprintln ! ( "Actual: \n {}" , test ) ;
42+ panic ! ( "Too large deviation in maximum norm: {}" , tol) ;
4543 }
4644}
4745
4846/// check two arrays are close in L1 norm
49- pub fn close_l1 < A , S1 , S2 , D > (
50- test : & ArrayBase < S1 , D > ,
51- truth : & ArrayBase < S2 , D > ,
52- rtol : A :: Real ,
53- ) -> Result < A :: Real , A :: Real >
47+ pub fn close_l1 < A , S1 , S2 , D > ( test : & ArrayBase < S1 , D > , truth : & ArrayBase < S2 , D > , rtol : A :: Real )
5448where
5549 A : Scalar + Lapack ,
5650 S1 : Data < Elem = A > ,
5751 S2 : Data < Elem = A > ,
5852 D : Dimension ,
53+ D :: Pattern : PartialEq + Debug ,
5954{
6055 let tol = ( test - truth) . norm_l1 ( ) / truth. norm_l1 ( ) ;
61- if tol < rtol {
62- Ok ( tol )
63- } else {
64- Err ( tol)
56+ if tol > rtol {
57+ eprintln ! ( "Expected: \n {}" , truth ) ;
58+ eprintln ! ( "Actual: \n {}" , test ) ;
59+ panic ! ( "Too large deviation in L1-norm: {}" , tol) ;
6560 }
6661}
6762
6863/// check two arrays are close in L2 norm
69- pub fn close_l2 < A , S1 , S2 , D > (
70- test : & ArrayBase < S1 , D > ,
71- truth : & ArrayBase < S2 , D > ,
72- rtol : A :: Real ,
73- ) -> Result < A :: Real , A :: Real >
64+ pub fn close_l2 < A , S1 , S2 , D > ( test : & ArrayBase < S1 , D > , truth : & ArrayBase < S2 , D > , rtol : A :: Real )
7465where
7566 A : Scalar + Lapack ,
7667 S1 : Data < Elem = A > ,
7768 S2 : Data < Elem = A > ,
7869 D : Dimension ,
70+ D :: Pattern : PartialEq + Debug ,
7971{
8072 let tol = ( test - truth) . norm_l2 ( ) / truth. norm_l2 ( ) ;
81- if tol < rtol {
82- Ok ( tol )
83- } else {
84- Err ( tol)
73+ if tol > rtol {
74+ eprintln ! ( "Expected: \n {}" , truth ) ;
75+ eprintln ! ( "Actual: \n {}" , test ) ;
76+ panic ! ( "Too large deviation in L2-norm: {}" , tol) ;
8577 }
8678}
8779
@@ -90,7 +82,7 @@ macro_rules! generate_assert {
9082 #[ macro_export]
9183 macro_rules! $assert {
9284 ( $test: expr, $truth: expr, $tol: expr) => {
93- $crate:: $close( $test, $truth, $tol) . unwrap ( ) ;
85+ $crate:: $close( $test, $truth, $tol) ;
9486 } ;
9587 }
9688 } ;
0 commit comments