Skip to content

Commit 4668eec

Browse files
author
Pawel Latawiec
committed
Fix Backwards-compatible test rng generation
1 parent a7bfb0d commit 4668eec

17 files changed

+136
-25
lines changed

test/bicgstabl.jl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,11 @@ using LinearAlgebra
77

88
@testset ("BiCGStab(l)") begin
99

10-
rng = Random.Xoshiro(12345)
10+
rng = Random.MersenneTwister(12345)
1111
n = 20
1212

1313
@testset "Matrix{$T}" for T in (Float32, Float64, ComplexF32, ComplexF64)
14-
rng_temp = Random.Xoshiro(12345) # Issue #316 (test sensitive to the rng)
14+
rng_temp = Random.MersenneTwister(1234) # Issue #316 (test sensitive to the rng)
1515
A = rand(rng_temp, T, n, n) + 15I
1616
x = ones(T, n)
1717
b = A * x

test/cg.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ ldiv!(y, P::JacobiPrec, x) = y .= x ./ P.diagonal
1919

2020
@testset "Conjugate Gradients" begin
2121

22-
rng = Random.Xoshiro(1234)
22+
rng = Random.MersenneTwister(1234)
2323

2424
@testset "Small full system" begin
2525
n = 10

test/chebyshev.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ end
2121
@testset "Chebyshev" begin
2222

2323
n = 10
24-
rng = Random.Xoshiro(1234)
24+
rng = Random.MersenneTwister(1234)
2525

2626
@testset "Matrix{$T}" for T in (Float32, Float64, ComplexF32, ComplexF64)
2727
A = randSPD(rng, T, n)

test/common.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ using IterativeSolvers
66
using Test
77
using Random
88

9-
rng = Random.Xoshiro(1234)
9+
rng = Random.MersenneTwister(1234)
1010

1111
@testset "Basic operations" begin
1212

test/gmres.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ using SparseArrays
1010
#GMRES
1111
@testset "GMRES" begin
1212

13-
rng = Random.Xoshiro(1234)
13+
rng = Random.MersenneTwister(1234)
1414
n = 10
1515

1616
@testset "Matrix{$T}" for T in (Float32, Float64, ComplexF32, ComplexF64)

test/idrs.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ using SparseArrays
1010

1111
n = 10
1212
m = 6
13-
rng = Random.Xoshiro(12345)
13+
rng = Random.MersenneTwister(12345)
1414

1515
@testset "Matrix{$T}" for T in (Float32, Float64, ComplexF32, ComplexF64)
1616
A = rand(rng, T, n, n) + n * I

test/lal.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import Random
66

77
@testset "LAL" begin
88

9-
rng = Random.Xoshiro(1234)
9+
rng = Random.MersenneTwister(1234)
1010

1111
# Equation references and identities from:
1212
# Freund, R. W., & Nachtigal, N. M. (1994). An Implementation of the QMR Method Based on Coupled Two-Term Recurrences. SIAM Journal on Scientific Computing, 15(2), 313–337. https://doi.org/10.1137/0915022

test/lalqmr.jl

Lines changed: 111 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,111 @@
1+
module TestLALQMR
2+
3+
using IterativeSolvers
4+
using Test
5+
using LinearMaps
6+
using LinearAlgebra
7+
using Random
8+
using SparseArrays
9+
10+
#LALQMR
11+
@testset "LALQMR" begin
12+
13+
rng = Random.MersenneTwister(123)
14+
n = 10
15+
16+
@testset "Matrix{$T}" for T in (Float32, Float64, ComplexF32, ComplexF64)
17+
A = rand(rng, T, n, n)
18+
b = rand(rng, T, n)
19+
F = lu(A)
20+
reltol = eps(real(T))
21+
22+
x, history = lalqmr(A, b, log=true, maxiter=10, reltol=reltol);
23+
@test isa(history, ConvergenceHistory)
24+
25+
# Left exact preconditioner
26+
#x, history = lalqmr(A, b, Pl=F, maxiter=1, reltol=reltol, log=true)
27+
#@test history.isconverged
28+
#@test norm(F \ (A * x - b)) / norm(b) ≤ reltol
29+
30+
# Right exact preconditioner
31+
#x, history = lalqmr(A, b, Pl=Identity(), Pr=F, maxiter=1, reltol=reltol, log=true)
32+
#@test history.isconverged
33+
#@test norm(A * x - b) / norm(b) ≤ reltol
34+
end
35+
36+
@testset "SparseMatrixCSC{$T, $Ti}" for T in (Float64, ComplexF64), Ti in (Int64, Int32)
37+
A = sprand(rng, T, n, n, 0.5) + n * I
38+
b = rand(rng, T, n)
39+
F = lu(A)
40+
reltol = eps(real(T))
41+
42+
x, history = lalqmr(A, b, log = true, maxiter = 10);
43+
@test norm(A * x - b) / norm(b) reltol
44+
45+
# Left exact preconditioner
46+
#x, history = lalqmr(A, b, Pl=F, maxiter=1, log=true)
47+
#@test history.isconverged
48+
#@test norm(F \ (A * x - b)) / norm(b) ≤ reltol
49+
50+
# Right exact preconditioner
51+
#x, history = lalqmr(A, b, Pl = Identity(), Pr=F, maxiter=1, log=true)
52+
#@test history.isconverged
53+
#@test norm(A * x - b) / norm(b) ≤ reltol
54+
end
55+
56+
@testset "Block Creation {$T}" for T in (Float32, Float64, ComplexF32, ComplexF64)
57+
# Guaranteed to create blocks during Lanczos process
58+
# This satisfies the condition that in the V-W sequence, the first
59+
# iterates are orthogonal: <Av - v<A, v>, Atv - v<At, v>> under transpose inner product
60+
# These do _not_ work for regular qmr
61+
dl = fill(one(T), n-1)
62+
du = fill(one(T), n-1)
63+
d = fill(one(T), n)
64+
dl[1] = -1
65+
A = Tridiagonal(dl, d, du)
66+
b = fill(zero(T), n)
67+
b[2] = 1.0
68+
69+
reltol = eps(real(T))
70+
71+
x, history = lalqmr(A, b, log = true)
72+
@test norm(A * x - b) / norm(b) reltol
73+
end
74+
75+
@testset "Linear operator defined as a function" begin
76+
A = LinearMap(identity, identity, 100; ismutating=false)
77+
b = rand(100)
78+
reltol = 1e-6
79+
80+
x = lalqmr(A, b; reltol=reltol, maxiter=2000)
81+
@test norm(A * x - b) / norm(b) reltol
82+
end
83+
84+
@testset "Termination criterion" begin
85+
for T in (Float32, Float64, ComplexF32, ComplexF64)
86+
A = T[ 2 -1 0
87+
-1 2 -1
88+
0 -1 2]
89+
n = size(A, 2)
90+
b = ones(T, n)
91+
x0 = A \ b
92+
perturbation = 10 * sqrt(eps(real(T))) * T[(-1)^i for i in 1:n]
93+
94+
# If the initial residual is small and a small relative tolerance is used,
95+
# many iterations are necessary
96+
x = x0 + perturbation
97+
initial_residual = norm(A * x - b)
98+
x, ch = lalqmr!(x, A, b, log=true)
99+
@test 2 niters(ch) n
100+
101+
# If the initial residual is small and a large absolute tolerance is used,
102+
# no iterations are necessary
103+
x = x0 + perturbation
104+
initial_residual = norm(A * x - b)
105+
x, ch = lalqmr!(x, A, b, abstol=2*initial_residual, reltol=zero(real(T)), log=true)
106+
@test niters(ch) == 0
107+
end
108+
end
109+
end
110+
111+
end # module

test/lobpcg.jl

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ function max_err(R)
2828
end
2929

3030
@testset "Locally Optimal Block Preconditioned Conjugate Gradient" begin
31-
rng = Random.Xoshiro(1234)
31+
rng = Random.MersenneTwister(1234)
3232
@testset "Single eigenvalue" begin
3333
n = 10
3434
@testset "Small full system" begin
@@ -86,7 +86,7 @@ end
8686
@testset "Simple eigenvalue problem" begin
8787
@testset "Matrix{$T}" for T in (Float32, Float64, ComplexF32, ComplexF64)
8888
@testset "largest = $largest" for largest in (true, false)
89-
rng_temp = Random.Xoshiro(1234) # Issue #316 (test sensitive to the rng)
89+
rng_temp = Random.MersenneTwister(1234) # Issue #316 (test sensitive to the rng)
9090
A = rand(rng_temp, T, n, n)
9191
A = A' + A + 20I
9292
b = zeros(T, n, 1)
@@ -100,7 +100,7 @@ end
100100
@testset "Generalized eigenvalue problem" begin
101101
@testset "Matrix{$T}" for T in (Float32, Float64, ComplexF32, ComplexF64)
102102
@testset "largest = $largest" for largest in (true, false)
103-
rng_temp = Random.Xoshiro(1234) # Issue #316 (test sensitive to the rng)
103+
rng_temp = Random.MersenneTwister(1234) # Issue #316 (test sensitive to the rng)
104104
A = rand(rng_temp, T, n, n)
105105
A = A' + A + 20I
106106
B = rand(rng_temp, T, n, n)
@@ -269,7 +269,7 @@ end
269269
@testset "Generalized eigenvalue problem" begin
270270
@testset "Matrix{$T}" for T in (Float32, Float64, ComplexF32, ComplexF64)
271271
@testset "largest = $largest" for largest in (true, false)
272-
rng_temp = Random.Xoshiro(1234) # Issue #316 (test sensitive to the rng)
272+
rng_temp = Random.MersenneTwister(123) # Issue #316 (test sensitive to the rng)
273273
A = rand(rng_temp, T, n, n)
274274
A = A' + A + 20I
275275
B = rand(rng_temp, T, n, n)
@@ -307,7 +307,7 @@ end
307307
@testset "Generalized eigenvalue problem" begin
308308
@testset "Matrix{$T}" for T in (Float32, Float64, ComplexF32, ComplexF64)
309309
@testset "largest = $largest" for largest in (true, false)
310-
rng_temp = Random.Xoshiro(1234) # Issue #316 (test sensitive to the rng)
310+
rng_temp = Random.MersenneTwister(123) # Issue #316 (test sensitive to the rng)
311311
A = rand(rng_temp, T, n, n)
312312
A = A' + A + 20I
313313
B = rand(rng_temp, T, n, n)

test/lsmr.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ function sol_matrix(m, n)
6262
end
6363

6464
@testset "LSMR" begin
65-
rng = Random.Xoshiro(1234)
65+
rng = Random.MersenneTwister(1234)
6666

6767
@testset "Small dense matrix" for T = (Float32, Float64)
6868
A = rand(rng, T, 10, 5)

0 commit comments

Comments
 (0)