From 0470a82fc8dc85b0d5a4e088ac8079d2b9fe4502 Mon Sep 17 00:00:00 2001 From: Toshiki Teramura Date: Sat, 17 Sep 2022 00:56:58 +0900 Subject: [PATCH] Use random_*_using API in ndarray_linalg/tests --- ndarray-linalg/tests/arnoldi.rs | 20 +++++--- ndarray-linalg/tests/cholesky.rs | 17 +++--- ndarray-linalg/tests/convert.rs | 3 +- ndarray-linalg/tests/det.rs | 40 +++++++++++---- ndarray-linalg/tests/deth.rs | 3 +- ndarray-linalg/tests/eigh.rs | 12 +++-- ndarray-linalg/tests/householder.rs | 9 ++-- ndarray-linalg/tests/inner.rs | 3 +- ndarray-linalg/tests/inv.rs | 6 ++- ndarray-linalg/tests/least_squares.rs | 27 ++++++---- ndarray-linalg/tests/least_squares_nrhs.rs | 60 +++++++++++++--------- ndarray-linalg/tests/mgs.rs | 9 ++-- ndarray-linalg/tests/normalize.rs | 6 ++- ndarray-linalg/tests/qr.rs | 24 ++++++--- ndarray-linalg/tests/solve.rs | 56 ++++++++++++-------- ndarray-linalg/tests/solveh.rs | 30 ++++++----- ndarray-linalg/tests/svd.rs | 6 ++- ndarray-linalg/tests/svddc.rs | 18 ++++--- ndarray-linalg/tests/trace.rs | 3 +- ndarray-linalg/tests/triangular.rs | 60 +++++++++++++--------- ndarray-linalg/tests/tridiagonal.rs | 21 +++++--- 21 files changed, 277 insertions(+), 156 deletions(-) diff --git a/ndarray-linalg/tests/arnoldi.rs b/ndarray-linalg/tests/arnoldi.rs index bbc15553..dd56e0a0 100644 --- a/ndarray-linalg/tests/arnoldi.rs +++ b/ndarray-linalg/tests/arnoldi.rs @@ -3,8 +3,9 @@ use ndarray_linalg::{krylov::*, *}; #[test] fn aq_qh_mgs() { - let a: Array2 = random((5, 5)); - let v: Array1 = random(5); + let mut rng = rand_pcg::Mcg128Xsl64::new(0xcafef00dd15ea5e5); + let a: Array2 = random_using((5, 5), &mut rng); + let v: Array1 = random_using(5, &mut rng); let (q, h) = arnoldi_mgs(a.clone(), v, 1e-9); println!("A = \n{:?}", &a); println!("Q = \n{:?}", &q); @@ -18,8 +19,9 @@ fn aq_qh_mgs() { #[test] fn aq_qh_householder() { - let a: Array2 = random((5, 5)); - let v: Array1 = random(5); + let mut rng = rand_pcg::Mcg128Xsl64::new(0xcafef00dd15ea5e5); + let a: Array2 = random_using((5, 5), &mut rng); + let v: Array1 = random_using(5, &mut rng); let (q, h) = arnoldi_mgs(a.clone(), v, 1e-9); println!("A = \n{:?}", &a); println!("Q = \n{:?}", &q); @@ -33,8 +35,9 @@ fn aq_qh_householder() { #[test] fn aq_qh_mgs_complex() { - let a: Array2 = random((5, 5)); - let v: Array1 = random(5); + let mut rng = rand_pcg::Mcg128Xsl64::new(0xcafef00dd15ea5e5); + let a: Array2 = random_using((5, 5), &mut rng); + let v: Array1 = random_using(5, &mut rng); let (q, h) = arnoldi_mgs(a.clone(), v, 1e-9); println!("A = \n{:?}", &a); println!("Q = \n{:?}", &q); @@ -48,8 +51,9 @@ fn aq_qh_mgs_complex() { #[test] fn aq_qh_householder_complex() { - let a: Array2 = random((5, 5)); - let v: Array1 = random(5); + let mut rng = rand_pcg::Mcg128Xsl64::new(0xcafef00dd15ea5e5); + let a: Array2 = random_using((5, 5), &mut rng); + let v: Array1 = random_using(5, &mut rng); let (q, h) = arnoldi_mgs(a.clone(), v, 1e-9); println!("A = \n{:?}", &a); println!("Q = \n{:?}", &q); diff --git a/ndarray-linalg/tests/cholesky.rs b/ndarray-linalg/tests/cholesky.rs index a498afc3..d3e9942b 100644 --- a/ndarray-linalg/tests/cholesky.rs +++ b/ndarray-linalg/tests/cholesky.rs @@ -6,7 +6,8 @@ macro_rules! cholesky { paste::item! { #[test] fn []() { - let a_orig: Array2<$elem> = random_hpd(3); + let mut rng = rand_pcg::Mcg128Xsl64::new(0xcafef00dd15ea5e5); + let a_orig: Array2<$elem> = random_hpd_using(3, &mut rng); println!("a = \n{:?}", a_orig); let upper = a_orig.cholesky(UPLO::Upper).unwrap(); @@ -79,7 +80,8 @@ macro_rules! cholesky_into_lower_upper { paste::item! { #[test] fn []() { - let a: Array2<$elem> = random_hpd(3); + let mut rng = rand_pcg::Mcg128Xsl64::new(0xcafef00dd15ea5e5); + let a: Array2<$elem> = random_hpd_using(3, &mut rng); println!("a = \n{:?}", a); let upper = a.cholesky(UPLO::Upper).unwrap(); let fac_upper = a.factorizec(UPLO::Upper).unwrap(); @@ -106,7 +108,8 @@ macro_rules! cholesky_into_inverse { paste::item! { #[test] fn []() { - let a: Array2<$elem> = random_hpd(3); + let mut rng = rand_pcg::Mcg128Xsl64::new(0xcafef00dd15ea5e5); + let a: Array2<$elem> = random_hpd_using(3, &mut rng); println!("a = \n{:?}", a); let inv = a.invc().unwrap(); assert_close_l2!(&a.dot(&inv), &Array2::eye(3), $rtol); @@ -134,7 +137,8 @@ macro_rules! cholesky_det { paste::item! { #[test] fn []() { - let a: Array2<$elem> = random_hpd(3); + let mut rng = rand_pcg::Mcg128Xsl64::new(0xcafef00dd15ea5e5); + let a: Array2<$elem> = random_hpd_using(3, &mut rng); println!("a = \n{:?}", a); let ln_det = a .eigvalsh(UPLO::Upper) @@ -168,8 +172,9 @@ macro_rules! cholesky_solve { paste::item! { #[test] fn []() { - let a: Array2<$elem> = random_hpd(3); - let x: Array1<$elem> = random(3); + let mut rng = rand_pcg::Mcg128Xsl64::new(0xcafef00dd15ea5e5); + let a: Array2<$elem> = random_hpd_using(3, &mut rng); + let x: Array1<$elem> = random_using(3, &mut rng); let b = a.dot(&x); println!("a = \n{:?}", a); println!("x = \n{:?}", x); diff --git a/ndarray-linalg/tests/convert.rs b/ndarray-linalg/tests/convert.rs index 3a6155d8..1e20d916 100644 --- a/ndarray-linalg/tests/convert.rs +++ b/ndarray-linalg/tests/convert.rs @@ -3,7 +3,8 @@ use ndarray_linalg::*; #[test] fn generalize() { - let a: Array3 = random((3, 2, 4).f()); + let mut rng = rand_pcg::Mcg128Xsl64::new(0xcafef00dd15ea5e5); + let a: Array3 = random_using((3, 2, 4).f(), &mut rng); let ans = a.clone(); let a: Array3 = convert::generalize(a); assert_eq!(a, ans); diff --git a/ndarray-linalg/tests/det.rs b/ndarray-linalg/tests/det.rs index c3986528..d14fc8d0 100644 --- a/ndarray-linalg/tests/det.rs +++ b/ndarray-linalg/tests/det.rs @@ -136,15 +136,36 @@ fn det() { assert_rclose!(result.1, ln_det, rtol); } } + let mut rng = rand_pcg::Mcg128Xsl64::new(0xcafef00dd15ea5e5); for rows in 1..5 { - det_impl(random_regular::(rows), 1e-9); - det_impl(random_regular::(rows), 1e-4); - det_impl(random_regular::(rows), 1e-9); - det_impl(random_regular::(rows), 1e-4); - det_impl(random_regular::(rows).t().to_owned(), 1e-9); - det_impl(random_regular::(rows).t().to_owned(), 1e-4); - det_impl(random_regular::(rows).t().to_owned(), 1e-9); - det_impl(random_regular::(rows).t().to_owned(), 1e-4); + det_impl(random_regular_using::(rows, &mut rng), 1e-9); + det_impl(random_regular_using::(rows, &mut rng), 1e-4); + det_impl(random_regular_using::(rows, &mut rng), 1e-9); + det_impl(random_regular_using::(rows, &mut rng), 1e-4); + det_impl( + random_regular_using::(rows, &mut rng) + .t() + .to_owned(), + 1e-9, + ); + det_impl( + random_regular_using::(rows, &mut rng) + .t() + .to_owned(), + 1e-4, + ); + det_impl( + random_regular_using::(rows, &mut rng) + .t() + .to_owned(), + 1e-9, + ); + det_impl( + random_regular_using::(rows, &mut rng) + .t() + .to_owned(), + 1e-4, + ); } } @@ -152,7 +173,8 @@ fn det() { fn det_nonsquare() { macro_rules! det_nonsquare { ($elem:ty, $shape:expr) => { - let a: Array2<$elem> = random($shape); + let mut rng = rand_pcg::Mcg128Xsl64::new(0xcafef00dd15ea5e5); + let a: Array2<$elem> = random_using($shape, &mut rng); assert!(a.factorize().unwrap().det().is_err()); assert!(a.factorize().unwrap().sln_det().is_err()); assert!(a.factorize().unwrap().det_into().is_err()); diff --git a/ndarray-linalg/tests/deth.rs b/ndarray-linalg/tests/deth.rs index abd54105..4785aadc 100644 --- a/ndarray-linalg/tests/deth.rs +++ b/ndarray-linalg/tests/deth.rs @@ -72,7 +72,8 @@ fn deth_zero_nonsquare() { fn deth() { macro_rules! deth { ($elem:ty, $rows:expr, $atol:expr) => { - let a: Array2<$elem> = random_hermite($rows); + let mut rng = rand_pcg::Mcg128Xsl64::new(0xcafef00dd15ea5e5); + let a: Array2<$elem> = random_hermite_using($rows, &mut rng); println!("a = \n{:?}", a); // Compute determinant from eigenvalues. diff --git a/ndarray-linalg/tests/eigh.rs b/ndarray-linalg/tests/eigh.rs index dd1445be..8d8ce385 100644 --- a/ndarray-linalg/tests/eigh.rs +++ b/ndarray-linalg/tests/eigh.rs @@ -79,7 +79,8 @@ fn fixed_t_lower() { #[test] fn ssqrt() { - let a: Array2 = random_hpd(3); + let mut rng = rand_pcg::Mcg128Xsl64::new(0xcafef00dd15ea5e5); + let a: Array2 = random_hpd_using(3, &mut rng); let ans = a.clone(); let s = a.ssqrt(UPLO::Upper).unwrap(); println!("a = {:?}", &ans); @@ -92,7 +93,8 @@ fn ssqrt() { #[test] fn ssqrt_t() { - let a: Array2 = random_hpd(3).reversed_axes(); + let mut rng = rand_pcg::Mcg128Xsl64::new(0xcafef00dd15ea5e5); + let a: Array2 = random_hpd_using(3, &mut rng).reversed_axes(); let ans = a.clone(); let s = a.ssqrt(UPLO::Upper).unwrap(); println!("a = {:?}", &ans); @@ -105,7 +107,8 @@ fn ssqrt_t() { #[test] fn ssqrt_lower() { - let a: Array2 = random_hpd(3); + let mut rng = rand_pcg::Mcg128Xsl64::new(0xcafef00dd15ea5e5); + let a: Array2 = random_hpd_using(3, &mut rng); let ans = a.clone(); let s = a.ssqrt(UPLO::Lower).unwrap(); println!("a = {:?}", &ans); @@ -118,7 +121,8 @@ fn ssqrt_lower() { #[test] fn ssqrt_t_lower() { - let a: Array2 = random_hpd(3).reversed_axes(); + let mut rng = rand_pcg::Mcg128Xsl64::new(0xcafef00dd15ea5e5); + let a: Array2 = random_hpd_using(3, &mut rng).reversed_axes(); let ans = a.clone(); let s = a.ssqrt(UPLO::Lower).unwrap(); println!("a = {:?}", &ans); diff --git a/ndarray-linalg/tests/householder.rs b/ndarray-linalg/tests/householder.rs index adc4d9b2..83b500f7 100644 --- a/ndarray-linalg/tests/householder.rs +++ b/ndarray-linalg/tests/householder.rs @@ -3,7 +3,8 @@ use ndarray_linalg::{krylov::*, *}; fn over(rtol: A::Real) { const N: usize = 4; - let a: Array2 = random((N, N * 2)); + let mut rng = rand_pcg::Mcg128Xsl64::new(0xcafef00dd15ea5e5); + let a: Array2 = random_using((N, N * 2), &mut rng); // Terminate let (q, r) = householder(a.axis_iter(Axis(1)), N, rtol, Strategy::Terminate); @@ -45,7 +46,8 @@ fn over_c64() { fn full(rtol: A::Real) { const N: usize = 5; - let a: Array2 = random((N, N)); + let mut rng = rand_pcg::Mcg128Xsl64::new(0xcafef00dd15ea5e5); + let a: Array2 = random_using((N, N), &mut rng); let (q, r) = householder(a.axis_iter(Axis(1)), N, rtol, Strategy::Terminate); let qc: Array2 = conjugate(&q); assert_close_l2!(&qc.dot(&q), &Array::eye(N), rtol; "Check Q^H Q = I"); @@ -71,7 +73,8 @@ fn full_c64() { fn half(rtol: A::Real) { const N: usize = 4; - let a: Array2 = random((N, N / 2)); + let mut rng = rand_pcg::Mcg128Xsl64::new(0xcafef00dd15ea5e5); + let a: Array2 = random_using((N, N / 2), &mut rng); let (q, r) = householder(a.axis_iter(Axis(1)), N, rtol, Strategy::Terminate); let qc: Array2 = conjugate(&q); assert_close_l2!(&qc.dot(&q), &Array::eye(N / 2), rtol; "Check Q^H Q = I"); diff --git a/ndarray-linalg/tests/inner.rs b/ndarray-linalg/tests/inner.rs index 7fc42c83..076b2791 100644 --- a/ndarray-linalg/tests/inner.rs +++ b/ndarray-linalg/tests/inner.rs @@ -19,7 +19,8 @@ fn size_longer() { #[test] fn abs() { - let a: Array1 = random(1); + let mut rng = rand_pcg::Mcg128Xsl64::new(0xcafef00dd15ea5e5); + let a: Array1 = random_using(1, &mut rng); let aa = a.inner(&a); assert_aclose!(aa.re(), a.norm().powi(2), 1e-5); assert_aclose!(aa.im(), 0.0, 1e-5); diff --git a/ndarray-linalg/tests/inv.rs b/ndarray-linalg/tests/inv.rs index 71e8973a..030773c1 100644 --- a/ndarray-linalg/tests/inv.rs +++ b/ndarray-linalg/tests/inv.rs @@ -5,7 +5,8 @@ fn test_inv_random(n: usize, set_f: bool, rtol: A::Real) where A: Scalar + Lapack, { - let a: Array2 = random([n; 2].set_f(set_f)); + let mut rng = rand_pcg::Mcg128Xsl64::new(0xcafef00dd15ea5e5); + let a: Array2 = random_using([n; 2].set_f(set_f), &mut rng); let identity = Array2::eye(n); assert_close_l2!(&a.inv().unwrap().dot(&a), &identity, rtol); assert_close_l2!( @@ -24,7 +25,8 @@ fn test_inv_into_random(n: usize, set_f: bool, rtol: A::Real) where A: Scalar + Lapack, { - let a: Array2 = random([n; 2].set_f(set_f)); + let mut rng = rand_pcg::Mcg128Xsl64::new(0xcafef00dd15ea5e5); + let a: Array2 = random_using([n; 2].set_f(set_f), &mut rng); let identity = Array2::eye(n); assert_close_l2!(&a.clone().inv_into().unwrap().dot(&a), &identity, rtol); assert_close_l2!( diff --git a/ndarray-linalg/tests/least_squares.rs b/ndarray-linalg/tests/least_squares.rs index 33e20ca7..17f62b64 100644 --- a/ndarray-linalg/tests/least_squares.rs +++ b/ndarray-linalg/tests/least_squares.rs @@ -5,7 +5,8 @@ use ndarray_linalg::*; /// A is square. `x = A^{-1} b`, `|b - Ax| = 0` fn test_exact(a: Array2) { - let b: Array1 = random(3); + let mut rng = rand_pcg::Mcg128Xsl64::new(0xcafef00dd15ea5e5); + let b: Array1 = random_using(3, &mut rng); let result = a.least_squares(&b).unwrap(); // unpack result let x = result.solution; @@ -27,13 +28,15 @@ macro_rules! impl_exact { paste::item! { #[test] fn []() { - let a: Array2<$scalar> = random((3, 3)); + let mut rng = rand_pcg::Mcg128Xsl64::new(0xcafef00dd15ea5e5); + let a: Array2<$scalar> = random_using((3, 3), &mut rng); test_exact(a) } #[test] fn []() { - let a: Array2<$scalar> = random((3, 3).f()); + let mut rng = rand_pcg::Mcg128Xsl64::new(0xcafef00dd15ea5e5); + let a: Array2<$scalar> = random_using((3, 3).f(), &mut rng); test_exact(a) } } @@ -51,7 +54,8 @@ fn test_overdetermined(a: Array2) where T::Real: AbsDiffEq, { - let b: Array1 = random(4); + let mut rng = rand_pcg::Mcg128Xsl64::new(0xcafef00dd15ea5e5); + let b: Array1 = random_using(4, &mut rng); let result = a.least_squares(&b).unwrap(); // unpack result let x = result.solution; @@ -73,13 +77,15 @@ macro_rules! impl_overdetermined { paste::item! { #[test] fn []() { - let a: Array2<$scalar> = random((4, 3)); + let mut rng = rand_pcg::Mcg128Xsl64::new(0xcafef00dd15ea5e5); + let a: Array2<$scalar> = random_using((4, 3), &mut rng); test_overdetermined(a) } #[test] fn []() { - let a: Array2<$scalar> = random((4, 3).f()); + let mut rng = rand_pcg::Mcg128Xsl64::new(0xcafef00dd15ea5e5); + let a: Array2<$scalar> = random_using((4, 3).f(), &mut rng); test_overdetermined(a) } } @@ -94,7 +100,8 @@ impl_overdetermined!(c64); /// #column > #row case. /// Linear problem is underdetermined, `|b - Ax| = 0` and `x` is not unique fn test_underdetermined(a: Array2) { - let b: Array1 = random(3); + let mut rng = rand_pcg::Mcg128Xsl64::new(0xcafef00dd15ea5e5); + let b: Array1 = random_using(3, &mut rng); let result = a.least_squares(&b).unwrap(); assert_eq!(result.rank, 3); assert!(result.residual_sum_of_squares.is_none()); @@ -110,13 +117,15 @@ macro_rules! impl_underdetermined { paste::item! { #[test] fn []() { - let a: Array2<$scalar> = random((3, 4)); + let mut rng = rand_pcg::Mcg128Xsl64::new(0xcafef00dd15ea5e5); + let a: Array2<$scalar> = random_using((3, 4), &mut rng); test_underdetermined(a) } #[test] fn []() { - let a: Array2<$scalar> = random((3, 4).f()); + let mut rng = rand_pcg::Mcg128Xsl64::new(0xcafef00dd15ea5e5); + let a: Array2<$scalar> = random_using((3, 4).f(), &mut rng); test_underdetermined(a) } } diff --git a/ndarray-linalg/tests/least_squares_nrhs.rs b/ndarray-linalg/tests/least_squares_nrhs.rs index dd7d283c..bcf6d013 100644 --- a/ndarray-linalg/tests/least_squares_nrhs.rs +++ b/ndarray-linalg/tests/least_squares_nrhs.rs @@ -32,29 +32,33 @@ macro_rules! impl_exact { paste::item! { #[test] fn []() { - let a: Array2<$scalar> = random((3, 3)); - let b: Array2<$scalar> = random((3, 2)); + let mut rng = rand_pcg::Mcg128Xsl64::new(0xcafef00dd15ea5e5); + let a: Array2<$scalar> = random_using((3, 3), &mut rng); + let b: Array2<$scalar> = random_using((3, 2), &mut rng); test_exact(a, b) } #[test] fn []() { - let a: Array2<$scalar> = random((3, 3)); - let b: Array2<$scalar> = random((3, 2).f()); + let mut rng = rand_pcg::Mcg128Xsl64::new(0xcafef00dd15ea5e5); + let a: Array2<$scalar> = random_using((3, 3), &mut rng); + let b: Array2<$scalar> = random_using((3, 2).f(), &mut rng); test_exact(a, b) } #[test] fn []() { - let a: Array2<$scalar> = random((3, 3).f()); - let b: Array2<$scalar> = random((3, 2)); + let mut rng = rand_pcg::Mcg128Xsl64::new(0xcafef00dd15ea5e5); + let a: Array2<$scalar> = random_using((3, 3).f(), &mut rng); + let b: Array2<$scalar> = random_using((3, 2), &mut rng); test_exact(a, b) } #[test] fn []() { - let a: Array2<$scalar> = random((3, 3).f()); - let b: Array2<$scalar> = random((3, 2).f()); + let mut rng = rand_pcg::Mcg128Xsl64::new(0xcafef00dd15ea5e5); + let a: Array2<$scalar> = random_using((3, 3).f(), &mut rng); + let b: Array2<$scalar> = random_using((3, 2).f(), &mut rng); test_exact(a, b) } } @@ -100,29 +104,33 @@ macro_rules! impl_overdetermined { paste::item! { #[test] fn []() { - let a: Array2<$scalar> = random((4, 3)); - let b: Array2<$scalar> = random((4, 2)); + let mut rng = rand_pcg::Mcg128Xsl64::new(0xcafef00dd15ea5e5); + let a: Array2<$scalar> = random_using((4, 3), &mut rng); + let b: Array2<$scalar> = random_using((4, 2), &mut rng); test_overdetermined(a, b) } #[test] fn []() { - let a: Array2<$scalar> = random((4, 3).f()); - let b: Array2<$scalar> = random((4, 2)); + let mut rng = rand_pcg::Mcg128Xsl64::new(0xcafef00dd15ea5e5); + let a: Array2<$scalar> = random_using((4, 3).f(), &mut rng); + let b: Array2<$scalar> = random_using((4, 2), &mut rng); test_overdetermined(a, b) } #[test] fn []() { - let a: Array2<$scalar> = random((4, 3)); - let b: Array2<$scalar> = random((4, 2).f()); + let mut rng = rand_pcg::Mcg128Xsl64::new(0xcafef00dd15ea5e5); + let a: Array2<$scalar> = random_using((4, 3), &mut rng); + let b: Array2<$scalar> = random_using((4, 2).f(), &mut rng); test_overdetermined(a, b) } #[test] fn []() { - let a: Array2<$scalar> = random((4, 3).f()); - let b: Array2<$scalar> = random((4, 2).f()); + let mut rng = rand_pcg::Mcg128Xsl64::new(0xcafef00dd15ea5e5); + let a: Array2<$scalar> = random_using((4, 3).f(), &mut rng); + let b: Array2<$scalar> = random_using((4, 2).f(), &mut rng); test_overdetermined(a, b) } } @@ -155,29 +163,33 @@ macro_rules! impl_underdetermined { paste::item! { #[test] fn []() { - let a: Array2<$scalar> = random((3, 4)); - let b: Array2<$scalar> = random((3, 2)); + let mut rng = rand_pcg::Mcg128Xsl64::new(0xcafef00dd15ea5e5); + let a: Array2<$scalar> = random_using((3, 4), &mut rng); + let b: Array2<$scalar> = random_using((3, 2), &mut rng); test_underdetermined(a, b) } #[test] fn []() { - let a: Array2<$scalar> = random((3, 4).f()); - let b: Array2<$scalar> = random((3, 2)); + let mut rng = rand_pcg::Mcg128Xsl64::new(0xcafef00dd15ea5e5); + let a: Array2<$scalar> = random_using((3, 4).f(), &mut rng); + let b: Array2<$scalar> = random_using((3, 2), &mut rng); test_underdetermined(a, b) } #[test] fn []() { - let a: Array2<$scalar> = random((3, 4)); - let b: Array2<$scalar> = random((3, 2).f()); + let mut rng = rand_pcg::Mcg128Xsl64::new(0xcafef00dd15ea5e5); + let a: Array2<$scalar> = random_using((3, 4), &mut rng); + let b: Array2<$scalar> = random_using((3, 2).f(), &mut rng); test_underdetermined(a, b) } #[test] fn []() { - let a: Array2<$scalar> = random((3, 4).f()); - let b: Array2<$scalar> = random((3, 2).f()); + let mut rng = rand_pcg::Mcg128Xsl64::new(0xcafef00dd15ea5e5); + let a: Array2<$scalar> = random_using((3, 4).f(), &mut rng); + let b: Array2<$scalar> = random_using((3, 2).f(), &mut rng); test_underdetermined(a, b) } } diff --git a/ndarray-linalg/tests/mgs.rs b/ndarray-linalg/tests/mgs.rs index 35c860de..9e9aa29e 100644 --- a/ndarray-linalg/tests/mgs.rs +++ b/ndarray-linalg/tests/mgs.rs @@ -5,7 +5,8 @@ fn qr_full() { const N: usize = 5; let rtol: A::Real = A::real(1e-9); - let a: Array2 = random((N, N)); + let mut rng = rand_pcg::Mcg128Xsl64::new(0xcafef00dd15ea5e5); + let a: Array2 = random_using((N, N), &mut rng); let (q, r) = mgs(a.axis_iter(Axis(1)), N, rtol, Strategy::Terminate); assert_close_l2!(&q.dot(&r), &a, rtol); @@ -27,7 +28,8 @@ fn qr() { const N: usize = 4; let rtol: A::Real = A::real(1e-9); - let a: Array2 = random((N, N / 2)); + let mut rng = rand_pcg::Mcg128Xsl64::new(0xcafef00dd15ea5e5); + let a: Array2 = random_using((N, N / 2), &mut rng); let (q, r) = mgs(a.axis_iter(Axis(1)), N, rtol, Strategy::Terminate); assert_close_l2!(&q.dot(&r), &a, rtol); @@ -49,7 +51,8 @@ fn qr_over() { const N: usize = 4; let rtol: A::Real = A::real(1e-9); - let a: Array2 = random((N, N * 2)); + let mut rng = rand_pcg::Mcg128Xsl64::new(0xcafef00dd15ea5e5); + let a: Array2 = random_using((N, N * 2), &mut rng); // Terminate let (q, r) = mgs(a.axis_iter(Axis(1)), N, rtol, Strategy::Terminate); diff --git a/ndarray-linalg/tests/normalize.rs b/ndarray-linalg/tests/normalize.rs index ca50912e..8d71a009 100644 --- a/ndarray-linalg/tests/normalize.rs +++ b/ndarray-linalg/tests/normalize.rs @@ -3,14 +3,16 @@ use ndarray_linalg::*; #[test] fn n_columns() { - let a: Array2 = random((3, 2)); + let mut rng = rand_pcg::Mcg128Xsl64::new(0xcafef00dd15ea5e5); + let a: Array2 = random_using((3, 2), &mut rng); let (n, v) = normalize(a.clone(), NormalizeAxis::Column); assert_close_l2!(&n.dot(&from_diag(&v)), &a, 1e-7); } #[test] fn n_rows() { - let a: Array2 = random((3, 2)); + let mut rng = rand_pcg::Mcg128Xsl64::new(0xcafef00dd15ea5e5); + let a: Array2 = random_using((3, 2), &mut rng); let (n, v) = normalize(a.clone(), NormalizeAxis::Row); assert_close_l2!(&from_diag(&v).dot(&n), &a, 1e-7); } diff --git a/ndarray-linalg/tests/qr.rs b/ndarray-linalg/tests/qr.rs index a69d89e2..702ed060 100644 --- a/ndarray-linalg/tests/qr.rs +++ b/ndarray-linalg/tests/qr.rs @@ -26,48 +26,56 @@ fn test_square(a: &Array2, n: usize, m: usize) { #[test] fn qr_sq() { - let a = random((3, 3)); + let mut rng = rand_pcg::Mcg128Xsl64::new(0xcafef00dd15ea5e5); + let a = random_using((3, 3), &mut rng); test_square(&a, 3, 3); } #[test] fn qr_sq_t() { - let a = random((3, 3).f()); + let mut rng = rand_pcg::Mcg128Xsl64::new(0xcafef00dd15ea5e5); + let a = random_using((3, 3).f(), &mut rng); test_square(&a, 3, 3); } #[test] fn qr_3x3() { - let a = random((3, 3)); + let mut rng = rand_pcg::Mcg128Xsl64::new(0xcafef00dd15ea5e5); + let a = random_using((3, 3), &mut rng); test(&a, 3, 3); } #[test] fn qr_3x3_t() { - let a = random((3, 3).f()); + let mut rng = rand_pcg::Mcg128Xsl64::new(0xcafef00dd15ea5e5); + let a = random_using((3, 3).f(), &mut rng); test(&a, 3, 3); } #[test] fn qr_3x4() { - let a = random((3, 4)); + let mut rng = rand_pcg::Mcg128Xsl64::new(0xcafef00dd15ea5e5); + let a = random_using((3, 4), &mut rng); test(&a, 3, 4); } #[test] fn qr_3x4_t() { - let a = random((3, 4).f()); + let mut rng = rand_pcg::Mcg128Xsl64::new(0xcafef00dd15ea5e5); + let a = random_using((3, 4).f(), &mut rng); test(&a, 3, 4); } #[test] fn qr_4x3() { - let a = random((4, 3)); + let mut rng = rand_pcg::Mcg128Xsl64::new(0xcafef00dd15ea5e5); + let a = random_using((4, 3), &mut rng); test(&a, 4, 3); } #[test] fn qr_4x3_t() { - let a = random((4, 3).f()); + let mut rng = rand_pcg::Mcg128Xsl64::new(0xcafef00dd15ea5e5); + let a = random_using((4, 3).f(), &mut rng); test(&a, 4, 3); } diff --git a/ndarray-linalg/tests/solve.rs b/ndarray-linalg/tests/solve.rs index b3d0cb53..57c29b67 100644 --- a/ndarray-linalg/tests/solve.rs +++ b/ndarray-linalg/tests/solve.rs @@ -1,6 +1,7 @@ use ndarray::prelude::*; use ndarray_linalg::{ - assert_aclose, assert_close_l2, c32, c64, random, random_hpd, solve::*, OperationNorm, Scalar, + assert_aclose, assert_close_l2, c32, c64, random_hpd_using, random_using, solve::*, + OperationNorm, Scalar, }; macro_rules! test_solve { @@ -97,12 +98,13 @@ macro_rules! test_solve_all { #[test] fn solve_random_float() { + let mut rng = rand_pcg::Mcg128Xsl64::new(0xcafef00dd15ea5e5); for n in 0..=8 { for &set_f in &[false, true] { test_solve_all!( [f32 => 1e-3, f64 => 1e-9], - a = random([n; 2].set_f(set_f)), - x = random(n), + a = random_using([n; 2].set_f(set_f), &mut rng), + x = random_using(n, &mut rng), b = a.dot(&x), [solve, solve_into, solve_inplace], ); @@ -112,12 +114,13 @@ fn solve_random_float() { #[test] fn solve_random_complex() { + let mut rng = rand_pcg::Mcg128Xsl64::new(0xcafef00dd15ea5e5); for n in 0..=8 { for &set_f in &[false, true] { test_solve_all!( [c32 => 1e-3, c64 => 1e-9], - a = random([n; 2].set_f(set_f)), - x = random(n), + a = random_using([n; 2].set_f(set_f), &mut rng), + x = random_using(n, &mut rng), b = a.dot(&x), [solve, solve_into, solve_inplace], ); @@ -128,19 +131,21 @@ fn solve_random_complex() { #[should_panic] #[test] fn solve_shape_mismatch() { - let a: Array2 = random((3, 3)); - let b: Array1 = random(2); + let mut rng = rand_pcg::Mcg128Xsl64::new(0xcafef00dd15ea5e5); + let a: Array2 = random_using((3, 3), &mut rng); + let b: Array1 = random_using(2, &mut rng); let _ = a.solve_into(b); } #[test] fn solve_t_random_float() { + let mut rng = rand_pcg::Mcg128Xsl64::new(0xcafef00dd15ea5e5); for n in 0..=8 { for &set_f in &[false, true] { test_solve_all!( [f32 => 1e-3, f64 => 1e-9], - a = random([n; 2].set_f(set_f)), - x = random(n), + a = random_using([n; 2].set_f(set_f), &mut rng), + x = random_using(n, &mut rng), b = a.t().dot(&x), [solve_t, solve_t_into, solve_t_inplace], ); @@ -151,19 +156,21 @@ fn solve_t_random_float() { #[should_panic] #[test] fn solve_t_shape_mismatch() { - let a: Array2 = random((3, 3).f()); - let b: Array1 = random(4); + let mut rng = rand_pcg::Mcg128Xsl64::new(0xcafef00dd15ea5e5); + let a: Array2 = random_using((3, 3).f(), &mut rng); + let b: Array1 = random_using(4, &mut rng); let _ = a.solve_into(b); } #[test] fn solve_t_random_complex() { + let mut rng = rand_pcg::Mcg128Xsl64::new(0xcafef00dd15ea5e5); for n in 0..=8 { for &set_f in &[false, true] { test_solve_all!( [c32 => 1e-3, c64 => 1e-9], - a = random([n; 2].set_f(set_f)), - x = random(n), + a = random_using([n; 2].set_f(set_f), &mut rng), + x = random_using(n, &mut rng), b = a.t().dot(&x), [solve_t, solve_t_into, solve_t_inplace], ); @@ -174,20 +181,22 @@ fn solve_t_random_complex() { #[should_panic] #[test] fn solve_factorized_shape_mismatch() { - let a: Array2 = random((3, 3)); - let b: Array1 = random(4); + let mut rng = rand_pcg::Mcg128Xsl64::new(0xcafef00dd15ea5e5); + let a: Array2 = random_using((3, 3), &mut rng); + let b: Array1 = random_using(4, &mut rng); let f = a.factorize_into().unwrap(); let _ = f.solve_into(b); } #[test] fn solve_h_random_float() { + let mut rng = rand_pcg::Mcg128Xsl64::new(0xcafef00dd15ea5e5); for n in 0..=8 { for &set_f in &[false, true] { test_solve_all!( [f32 => 1e-3, f64 => 1e-9], - a = random([n; 2].set_f(set_f)), - x = random(n), + a = random_using([n; 2].set_f(set_f), &mut rng), + x = random_using(n, &mut rng), b = a.t().mapv(|x| x.conj()).dot(&x), [solve_h, solve_h_into, solve_h_inplace], ); @@ -198,20 +207,22 @@ fn solve_h_random_float() { #[should_panic] #[test] fn solve_factorized_t_shape_mismatch() { - let a: Array2 = random((3, 3).f()); - let b: Array1 = random(4); + let mut rng = rand_pcg::Mcg128Xsl64::new(0xcafef00dd15ea5e5); + let a: Array2 = random_using((3, 3).f(), &mut rng); + let b: Array1 = random_using(4, &mut rng); let f = a.factorize_into().unwrap(); let _ = f.solve_into(b); } #[test] fn solve_h_random_complex() { + let mut rng = rand_pcg::Mcg128Xsl64::new(0xcafef00dd15ea5e5); for n in 0..=8 { for &set_f in &[false, true] { test_solve_all!( [c32 => 1e-3, c64 => 1e-9], - a = random([n; 2].set_f(set_f)), - x = random(n), + a = random_using([n; 2].set_f(set_f), &mut rng), + x = random_using(n, &mut rng), b = a.t().mapv(|x| x.conj()).dot(&x), [solve_h, solve_h_into, solve_h_inplace], ); @@ -223,7 +234,8 @@ fn solve_h_random_complex() { fn rcond() { macro_rules! rcond { ($elem:ty, $rows:expr, $atol:expr) => { - let a: Array2<$elem> = random_hpd($rows); + let mut rng = rand_pcg::Mcg128Xsl64::new(0xcafef00dd15ea5e5); + let a: Array2<$elem> = random_hpd_using($rows, &mut rng); let rcond = 1. / (a.opnorm_one().unwrap() * a.inv().unwrap().opnorm_one().unwrap()); assert_aclose!(a.rcond().unwrap(), rcond, $atol); assert_aclose!(a.rcond_into().unwrap(), rcond, $atol); diff --git a/ndarray-linalg/tests/solveh.rs b/ndarray-linalg/tests/solveh.rs index 56d016c4..25513551 100644 --- a/ndarray-linalg/tests/solveh.rs +++ b/ndarray-linalg/tests/solveh.rs @@ -4,24 +4,27 @@ use ndarray_linalg::*; #[should_panic] #[test] fn solveh_shape_mismatch() { - let a: Array2 = random_hpd(3); - let b: Array1 = random(2); + let mut rng = rand_pcg::Mcg128Xsl64::new(0xcafef00dd15ea5e5); + let a: Array2 = random_hpd_using(3, &mut rng); + let b: Array1 = random_using(2, &mut rng); let _ = a.solveh_into(b); } #[should_panic] #[test] fn factorizeh_solveh_shape_mismatch() { - let a: Array2 = random_hpd(3); - let b: Array1 = random(2); + let mut rng = rand_pcg::Mcg128Xsl64::new(0xcafef00dd15ea5e5); + let a: Array2 = random_hpd_using(3, &mut rng); + let b: Array1 = random_using(2, &mut rng); let f = a.factorizeh_into().unwrap(); let _ = f.solveh_into(b); } #[test] fn solveh_random() { - let a: Array2 = random_hpd(3); - let x: Array1 = random(3); + let mut rng = rand_pcg::Mcg128Xsl64::new(0xcafef00dd15ea5e5); + let a: Array2 = random_hpd_using(3, &mut rng); + let x: Array1 = random_using(3, &mut rng); let b = a.dot(&x); let y = a.solveh_into(b).unwrap(); assert_close_l2!(&x, &y, 1e-7); @@ -35,24 +38,27 @@ fn solveh_random() { #[should_panic] #[test] fn solveh_t_shape_mismatch() { - let a: Array2 = random_hpd(3).reversed_axes(); - let b: Array1 = random(2); + let mut rng = rand_pcg::Mcg128Xsl64::new(0xcafef00dd15ea5e5); + let a: Array2 = random_hpd_using(3, &mut rng).reversed_axes(); + let b: Array1 = random_using(2, &mut rng); let _ = a.solveh_into(b); } #[should_panic] #[test] fn factorizeh_solveh_t_shape_mismatch() { - let a: Array2 = random_hpd(3).reversed_axes(); - let b: Array1 = random(2); + let mut rng = rand_pcg::Mcg128Xsl64::new(0xcafef00dd15ea5e5); + let a: Array2 = random_hpd_using(3, &mut rng).reversed_axes(); + let b: Array1 = random_using(2, &mut rng); let f = a.factorizeh_into().unwrap(); let _ = f.solveh_into(b); } #[test] fn solveh_random_t() { - let a: Array2 = random_hpd(3).reversed_axes(); - let x: Array1 = random(3); + let mut rng = rand_pcg::Mcg128Xsl64::new(0xcafef00dd15ea5e5); + let a: Array2 = random_hpd_using(3, &mut rng).reversed_axes(); + let x: Array1 = random_using(3, &mut rng); let b = a.dot(&x); let y = a.solveh_into(b).unwrap(); assert_close_l2!(&x, &y, 1e-7); diff --git a/ndarray-linalg/tests/svd.rs b/ndarray-linalg/tests/svd.rs index c83885e1..0eac35ea 100644 --- a/ndarray-linalg/tests/svd.rs +++ b/ndarray-linalg/tests/svd.rs @@ -53,13 +53,15 @@ macro_rules! test_svd_impl { paste::item! { #[test] fn []() { - let a = random(($n, $m)); + let mut rng = rand_pcg::Mcg128Xsl64::new(0xcafef00dd15ea5e5); + let a = random_using(($n, $m), &mut rng); $test::<$type>(&a); } #[test] fn []() { - let a = random(($n, $m).f()); + let mut rng = rand_pcg::Mcg128Xsl64::new(0xcafef00dd15ea5e5); + let a = random_using(($n, $m).f(), &mut rng); $test::<$type>(&a); } } diff --git a/ndarray-linalg/tests/svddc.rs b/ndarray-linalg/tests/svddc.rs index ed28fc30..60c6bd66 100644 --- a/ndarray-linalg/tests/svddc.rs +++ b/ndarray-linalg/tests/svddc.rs @@ -32,37 +32,43 @@ macro_rules! test_svd_impl { paste::item! { #[test] fn []() { - let a = random(($n, $m)); + let mut rng = rand_pcg::Mcg128Xsl64::new(0xcafef00dd15ea5e5); + let a = random_using(($n, $m), &mut rng); test::<$scalar>(&a, JobSvd::All); } #[test] fn []() { - let a = random(($n, $m)); + let mut rng = rand_pcg::Mcg128Xsl64::new(0xcafef00dd15ea5e5); + let a = random_using(($n, $m), &mut rng); test::<$scalar>(&a, JobSvd::Some); } #[test] fn []() { - let a = random(($n, $m)); + let mut rng = rand_pcg::Mcg128Xsl64::new(0xcafef00dd15ea5e5); + let a = random_using(($n, $m), &mut rng); test::<$scalar>(&a, JobSvd::None); } #[test] fn []() { - let a = random(($n, $m).f()); + let mut rng = rand_pcg::Mcg128Xsl64::new(0xcafef00dd15ea5e5); + let a = random_using(($n, $m).f(), &mut rng); test::<$scalar>(&a, JobSvd::All); } #[test] fn []() { - let a = random(($n, $m).f()); + let mut rng = rand_pcg::Mcg128Xsl64::new(0xcafef00dd15ea5e5); + let a = random_using(($n, $m).f(), &mut rng); test::<$scalar>(&a, JobSvd::Some); } #[test] fn []() { - let a = random(($n, $m).f()); + let mut rng = rand_pcg::Mcg128Xsl64::new(0xcafef00dd15ea5e5); + let a = random_using(($n, $m).f(), &mut rng); test::<$scalar>(&a, JobSvd::None); } } diff --git a/ndarray-linalg/tests/trace.rs b/ndarray-linalg/tests/trace.rs index 9127be39..f93bb52b 100644 --- a/ndarray-linalg/tests/trace.rs +++ b/ndarray-linalg/tests/trace.rs @@ -3,6 +3,7 @@ use ndarray_linalg::*; #[test] fn trace() { - let a: Array2 = random((3, 3)); + let mut rng = rand_pcg::Mcg128Xsl64::new(0xcafef00dd15ea5e5); + let a: Array2 = random_using((3, 3), &mut rng); assert_rclose!(a.trace().unwrap(), a[(0, 0)] + a[(1, 1)] + a[(2, 2)], 1e-7); } diff --git a/ndarray-linalg/tests/triangular.rs b/ndarray-linalg/tests/triangular.rs index ca609c5c..4ddf0a8b 100644 --- a/ndarray-linalg/tests/triangular.rs +++ b/ndarray-linalg/tests/triangular.rs @@ -34,87 +34,99 @@ where #[test] fn triangular_1d_upper() { let n = 3; - let b: Array1 = random(n); - let a: Array2 = random((n, n)).into_triangular(UPLO::Upper); + let mut rng = rand_pcg::Mcg128Xsl64::new(0xcafef00dd15ea5e5); + let b: Array1 = random_using(n, &mut rng); + let a: Array2 = random_using((n, n), &mut rng).into_triangular(UPLO::Upper); test1d(UPLO::Upper, &a, &b, 1e-7); } #[test] fn triangular_1d_lower() { let n = 3; - let b: Array1 = random(n); - let a: Array2 = random((n, n)).into_triangular(UPLO::Lower); + let mut rng = rand_pcg::Mcg128Xsl64::new(0xcafef00dd15ea5e5); + let b: Array1 = random_using(n, &mut rng); + let a: Array2 = random_using((n, n), &mut rng).into_triangular(UPLO::Lower); test1d(UPLO::Lower, &a, &b, 1e-7); } #[test] fn triangular_1d_upper_t() { let n = 3; - let b: Array1 = random(n); - let a: Array2 = random((n, n).f()).into_triangular(UPLO::Upper); + let mut rng = rand_pcg::Mcg128Xsl64::new(0xcafef00dd15ea5e5); + let b: Array1 = random_using(n, &mut rng); + let a: Array2 = random_using((n, n).f(), &mut rng).into_triangular(UPLO::Upper); test1d(UPLO::Upper, &a, &b, 1e-7); } #[test] fn triangular_1d_lower_t() { let n = 3; - let b: Array1 = random(n); - let a: Array2 = random((n, n).f()).into_triangular(UPLO::Lower); + let mut rng = rand_pcg::Mcg128Xsl64::new(0xcafef00dd15ea5e5); + let b: Array1 = random_using(n, &mut rng); + let a: Array2 = random_using((n, n).f(), &mut rng).into_triangular(UPLO::Lower); test1d(UPLO::Lower, &a, &b, 1e-7); } #[test] fn triangular_2d_upper() { - let b: Array2 = random((3, 4)); - let a: Array2 = random((3, 3)).into_triangular(UPLO::Upper); + let mut rng = rand_pcg::Mcg128Xsl64::new(0xcafef00dd15ea5e5); + let b: Array2 = random_using((3, 4), &mut rng); + let a: Array2 = random_using((3, 3), &mut rng).into_triangular(UPLO::Upper); test2d(UPLO::Upper, &a, &b, 1e-7); } #[test] fn triangular_2d_lower() { - let b: Array2 = random((3, 4)); - let a: Array2 = random((3, 3)).into_triangular(UPLO::Lower); + let mut rng = rand_pcg::Mcg128Xsl64::new(0xcafef00dd15ea5e5); + let b: Array2 = random_using((3, 4), &mut rng); + let a: Array2 = random_using((3, 3), &mut rng).into_triangular(UPLO::Lower); test2d(UPLO::Lower, &a, &b, 1e-7); } #[test] fn triangular_2d_lower_t() { - let b: Array2 = random((3, 4)); - let a: Array2 = random((3, 3).f()).into_triangular(UPLO::Lower); + let mut rng = rand_pcg::Mcg128Xsl64::new(0xcafef00dd15ea5e5); + let b: Array2 = random_using((3, 4), &mut rng); + let a: Array2 = random_using((3, 3).f(), &mut rng).into_triangular(UPLO::Lower); test2d(UPLO::Lower, &a, &b, 1e-7); } #[test] fn triangular_2d_upper_t() { - let b: Array2 = random((3, 4)); - let a: Array2 = random((3, 3).f()).into_triangular(UPLO::Upper); + let mut rng = rand_pcg::Mcg128Xsl64::new(0xcafef00dd15ea5e5); + let b: Array2 = random_using((3, 4), &mut rng); + let a: Array2 = random_using((3, 3).f(), &mut rng).into_triangular(UPLO::Upper); test2d(UPLO::Upper, &a, &b, 1e-7); } #[test] fn triangular_2d_upper_bt() { - let b: Array2 = random((3, 4).f()); - let a: Array2 = random((3, 3)).into_triangular(UPLO::Upper); + let mut rng = rand_pcg::Mcg128Xsl64::new(0xcafef00dd15ea5e5); + let b: Array2 = random_using((3, 4).f(), &mut rng); + let a: Array2 = random_using((3, 3), &mut rng).into_triangular(UPLO::Upper); test2d(UPLO::Upper, &a, &b, 1e-7); } #[test] fn triangular_2d_lower_bt() { - let b: Array2 = random((3, 4).f()); - let a: Array2 = random((3, 3)).into_triangular(UPLO::Lower); + let mut rng = rand_pcg::Mcg128Xsl64::new(0xcafef00dd15ea5e5); + let b: Array2 = random_using((3, 4).f(), &mut rng); + let a: Array2 = random_using((3, 3), &mut rng).into_triangular(UPLO::Lower); test2d(UPLO::Lower, &a, &b, 1e-7); } #[test] fn triangular_2d_lower_t_bt() { - let b: Array2 = random((3, 4).f()); - let a: Array2 = random((3, 3).f()).into_triangular(UPLO::Lower); + let mut rng = rand_pcg::Mcg128Xsl64::new(0xcafef00dd15ea5e5); + let b: Array2 = random_using((3, 4).f(), &mut rng); + let a: Array2 = random_using((3, 3).f(), &mut rng).into_triangular(UPLO::Lower); test2d(UPLO::Lower, &a, &b, 1e-7); } #[test] fn triangular_2d_upper_t_bt() { - let b: Array2 = random((3, 4).f()); - let a: Array2 = random((3, 3).f()).into_triangular(UPLO::Upper); + let mut rng = rand_pcg::Mcg128Xsl64::new(0xcafef00dd15ea5e5); + let b: Array2 = random_using((3, 4).f(), &mut rng); + let a: Array2 = random_using((3, 3).f(), &mut rng).into_triangular(UPLO::Upper); test2d(UPLO::Upper, &a, &b, 1e-7); } diff --git a/ndarray-linalg/tests/tridiagonal.rs b/ndarray-linalg/tests/tridiagonal.rs index 38278951..513d625b 100644 --- a/ndarray-linalg/tests/tridiagonal.rs +++ b/ndarray-linalg/tests/tridiagonal.rs @@ -28,7 +28,8 @@ fn tridiagonal_index() { #[test] fn opnorm_tridiagonal() { - let mut a: Array2 = random((4, 4)); + let mut rng = rand_pcg::Mcg128Xsl64::new(0xcafef00dd15ea5e5); + let mut a: Array2 = random_using((4, 4), &mut rng); a[[0, 2]] = 0.0; a[[0, 3]] = 0.0; a[[1, 3]] = 0.0; @@ -129,10 +130,11 @@ fn solve_tridiagonal_c64() { #[test] fn solve_tridiagonal_random() { - let mut a: Array2 = random((3, 3)); + let mut rng = rand_pcg::Mcg128Xsl64::new(0xcafef00dd15ea5e5); + let mut a: Array2 = random_using((3, 3), &mut rng); a[[0, 2]] = 0.0; a[[2, 0]] = 0.0; - let x: Array1 = random(3); + let x: Array1 = random_using(3, &mut rng); let b1 = a.dot(&x); let b2 = b1.clone(); let y1 = a.solve_tridiagonal_into(b1).unwrap(); @@ -143,10 +145,11 @@ fn solve_tridiagonal_random() { #[test] fn solve_tridiagonal_random_t() { - let mut a: Array2 = random((3, 3)); + let mut rng = rand_pcg::Mcg128Xsl64::new(0xcafef00dd15ea5e5); + let mut a: Array2 = random_using((3, 3), &mut rng); a[[0, 2]] = 0.0; a[[2, 0]] = 0.0; - let x: Array1 = random(3); + let x: Array1 = random_using(3, &mut rng); let at = a.t(); let b1 = at.dot(&x); let b2 = b1.clone(); @@ -158,11 +161,12 @@ fn solve_tridiagonal_random_t() { #[test] fn extract_tridiagonal_solve_random() { - let mut a: Array2 = random((3, 3)); + let mut rng = rand_pcg::Mcg128Xsl64::new(0xcafef00dd15ea5e5); + let mut a: Array2 = random_using((3, 3), &mut rng); a[[0, 2]] = 0.0; a[[2, 0]] = 0.0; let tridiag = a.extract_tridiagonal().unwrap(); - let x: Array1 = random(3); + let x: Array1 = random_using(3, &mut rng); let b1 = a.dot(&x); let b2 = b1.clone(); let y1 = tridiag.solve_tridiagonal_into(b1).unwrap(); @@ -180,7 +184,8 @@ fn det_tridiagonal_f64() { #[test] fn det_tridiagonal_random() { - let mut a: Array2 = random((3, 3)); + let mut rng = rand_pcg::Mcg128Xsl64::new(0xcafef00dd15ea5e5); + let mut a: Array2 = random_using((3, 3), &mut rng); a[[0, 2]] = 0.0; a[[2, 0]] = 0.0; assert_aclose!(a.det_tridiagonal().unwrap(), a.det().unwrap(), 1e-7);