Skip to content

Commit 1f7cc56

Browse files
committed
Test for opnorm
1 parent d28b856 commit 1f7cc56

File tree

1 file changed

+32
-48
lines changed

1 file changed

+32
-48
lines changed

tests/opnorm.rs

Lines changed: 32 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -1,55 +1,39 @@
11
include!("header.rs");
22

3+
macro_rules! impl_test {
4+
($funcname:ident, $a:expr, $op1:expr, $opi:expr, $opf:expr) => {
35
#[test]
4-
fn matrix_opnorm_square() {
5-
let a = Array::range(1., 10., 1.).into_shape((3, 3)).unwrap();
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);
6+
fn $funcname() {
7+
let a = $a;
8+
a.opnorm_1().assert_close($op1, 1e-7);
9+
a.opnorm_i().assert_close($opi, 1e-7);
10+
a.opnorm_f().assert_close($opf, 1e-7);
911
}
12+
}} // impl_test
1013

11-
#[test]
12-
fn matrix_opnorm_square_t() {
13-
let a = Array::range(1., 10., 1.).into_shape((3, 3)).unwrap().reversed_axes();
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);
17-
}
18-
19-
#[test]
20-
fn matrix_opnorm_3x4() {
21-
let a = Array::range(1., 13., 1.).into_shape((3, 4)).unwrap();
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);
25-
}
26-
27-
#[test]
28-
fn matrix_opnorm_3x4_t() {
29-
let a = Array::range(1., 13., 1.)
30-
.into_shape((3, 4))
31-
.unwrap()
32-
.reversed_axes();
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);
36-
}
37-
38-
#[test]
39-
fn matrix_opnorm_4x3() {
40-
let a = Array::range(1., 13., 1.).into_shape((4, 3)).unwrap();
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);
14+
macro_rules! impl_test_opnorm {
15+
($modname:ident, $array:ty, $range:path) => {
16+
mod $modname {
17+
use ndarray::prelude::*;
18+
use ndarray_linalg::prelude::*;
19+
use ndarray_numtest::prelude::*;
20+
use num_traits::Float;
21+
fn gen(i: usize, j: usize, rev: bool) -> $array {
22+
let n = (i * j + 1) as f64;
23+
if rev {
24+
$range(1., n, 1.).into_shape((j, i)).unwrap().reversed_axes()
25+
} else {
26+
$range(1., n, 1.).into_shape((i, j)).unwrap()
27+
}
28+
}
29+
impl_test!(opnorm_square, gen(3, 3, false), 18.0, 24.0, 285.0.sqrt());
30+
impl_test!(opnorm_square_t, gen(3, 3, true), 24.0, 18.0, 285.0.sqrt());
31+
impl_test!(opnorm_3x4, gen(3, 4, false), 24.0, 42.0, 650.0.sqrt());
32+
impl_test!(opnorm_4x3_t, gen(4, 3, true), 42.0, 24.0, 650.0.sqrt());
33+
impl_test!(opnorm_3x4_t, gen(3, 4, true), 33.0, 30.0, 650.0.sqrt());
34+
impl_test!(opnorm_4x3, gen(4, 3, false), 30.0, 33.0, 650.0.sqrt());
4435
}
36+
}} // impl_test_opnorm
4537

46-
#[test]
47-
fn matrix_opnorm_4x3_t() {
48-
let a = Array::range(1., 13., 1.)
49-
.into_shape((4, 3))
50-
.unwrap()
51-
.reversed_axes();
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);
55-
}
38+
impl_test_opnorm!(owned, Array<f64, Ix2>, Array::range);
39+
impl_test_opnorm!(shared, RcArray<f64, Ix2>, RcArray::range);

0 commit comments

Comments
 (0)