Skip to content

Commit 4efcda9

Browse files
committed
Add test for new norms
1 parent 2bf15c1 commit 4efcda9

File tree

2 files changed

+41
-31
lines changed

2 files changed

+41
-31
lines changed

tests/opnorm.rs

Lines changed: 18 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,40 +1,27 @@
11
include!("header.rs");
22

3-
fn assert_almost_eq(a: f64, b: f64) {
4-
let rel_dev = (a - b).abs() / (a.abs() + b.abs());
5-
if rel_dev > 1.0e-7 {
6-
panic!("a={:?}, b={:?} are not almost equal", a, b);
7-
}
8-
}
9-
10-
#[test]
11-
fn vector_norm() {
12-
let a = Array::range(1., 10., 1.);
13-
assert_almost_eq(a.norm(), 285.0.sqrt());
14-
}
15-
163
#[test]
174
fn matrix_opnorm_square() {
185
let a = Array::range(1., 10., 1.).into_shape((3, 3)).unwrap();
19-
assert_almost_eq(a.opnorm_1(), 18.0);
20-
assert_almost_eq(a.opnorm_i(), 24.0);
21-
assert_almost_eq(a.opnorm_f(), 285.0.sqrt());
6+
a.opnorm_1().assert_close(18.0, 1e-7);
7+
a.opnorm_i().assert_close(24.0, 1e-7);
8+
a.opnorm_f().assert_close(285.0.sqrt(), 1e-7);
229
}
2310

2411
#[test]
2512
fn matrix_opnorm_square_t() {
2613
let a = Array::range(1., 10., 1.).into_shape((3, 3)).unwrap().reversed_axes();
27-
assert_almost_eq(a.opnorm_1(), 24.0);
28-
assert_almost_eq(a.opnorm_i(), 18.0);
29-
assert_almost_eq(a.opnorm_f(), 285.0.sqrt());
14+
a.opnorm_1().assert_close(24.0, 1e-7);
15+
a.opnorm_i().assert_close(18.0, 1e-7);
16+
a.opnorm_f().assert_close(285.0.sqrt(), 1e-7);
3017
}
3118

3219
#[test]
3320
fn matrix_opnorm_3x4() {
3421
let a = Array::range(1., 13., 1.).into_shape((3, 4)).unwrap();
35-
assert_almost_eq(a.opnorm_1(), 24.0);
36-
assert_almost_eq(a.opnorm_i(), 42.0);
37-
assert_almost_eq(a.opnorm_f(), 650.0.sqrt());
22+
a.opnorm_1().assert_close(24.0, 1e-7);
23+
a.opnorm_i().assert_close(42.0, 1e-7);
24+
a.opnorm_f().assert_close(650.0.sqrt(), 1e-7);
3825
}
3926

4027
#[test]
@@ -43,17 +30,17 @@ fn matrix_opnorm_3x4_t() {
4330
.into_shape((3, 4))
4431
.unwrap()
4532
.reversed_axes();
46-
assert_almost_eq(a.opnorm_1(), 42.0);
47-
assert_almost_eq(a.opnorm_i(), 24.0);
48-
assert_almost_eq(a.opnorm_f(), 650.0.sqrt());
33+
a.opnorm_1().assert_close(42.0, 1e-7);
34+
a.opnorm_i().assert_close(24.0, 1e-7);
35+
a.opnorm_f().assert_close(650.0.sqrt(), 1e-7);
4936
}
5037

5138
#[test]
5239
fn matrix_opnorm_4x3() {
5340
let a = Array::range(1., 13., 1.).into_shape((4, 3)).unwrap();
54-
assert_almost_eq(a.opnorm_1(), 30.0);
55-
assert_almost_eq(a.opnorm_i(), 33.0);
56-
assert_almost_eq(a.opnorm_f(), 650.0.sqrt());
41+
a.opnorm_1().assert_close(30.0, 1e-7);
42+
a.opnorm_i().assert_close(33.0, 1e-7);
43+
a.opnorm_f().assert_close(650.0.sqrt(), 1e-7);
5744
}
5845

5946
#[test]
@@ -62,7 +49,7 @@ fn matrix_opnorm_4x3_t() {
6249
.into_shape((4, 3))
6350
.unwrap()
6451
.reversed_axes();
65-
assert_almost_eq(a.opnorm_1(), 33.0);
66-
assert_almost_eq(a.opnorm_i(), 30.0);
67-
assert_almost_eq(a.opnorm_f(), 650.0.sqrt());
52+
a.opnorm_1().assert_close(33.0, 1e-7);
53+
a.opnorm_i().assert_close(30.0, 1e-7);
54+
a.opnorm_f().assert_close(650.0.sqrt(), 1e-7);
6855
}

tests/vector.rs

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
include!("header.rs");
2+
3+
#[test]
4+
fn vector_norm() {
5+
let a = Array::range(1., 10., 1.);
6+
a.norm().assert_close(285.0.sqrt(), 1e-7);
7+
}
8+
9+
#[test]
10+
fn vector_norm_l1() {
11+
let a = arr1(&[1.0, -1.0]);
12+
a.norm_l1().assert_close(2.0, 1e-7);
13+
let b = arr2(&[[0.0, -1.0], [1.0, 0.0]]);
14+
b.norm_l1().assert_close(2.0, 1e-7);
15+
}
16+
17+
#[test]
18+
fn vector_norm_max() {
19+
let a = arr1(&[1.0, 1.0, -3.0]);
20+
a.norm_max().assert_close(3.0, 1e-7);
21+
let b = arr2(&[[1.0, 3.0], [1.0, -4.0]]);
22+
b.norm_max().assert_close(4.0, 1e-7);
23+
}

0 commit comments

Comments
 (0)