Skip to content

Commit 51f32ee

Browse files
committed
Panic from close_* functions (not as unwrap)
1 parent 72577ee commit 51f32ee

File tree

1 file changed

+30
-38
lines changed

1 file changed

+30
-38
lines changed

src/assert.rs

Lines changed: 30 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1,87 +1,79 @@
11
//! Assertions for array
22
33
use ndarray::*;
4+
use std::fmt::Debug;
45

56
use super::norm::*;
67
use 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)
3431
where
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)
5448
where
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)
7465
where
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

Comments
 (0)