Skip to content

Commit ca439e6

Browse files
committed
Fixed tolerances in tests
1 parent 0da4d57 commit ca439e6

File tree

1 file changed

+36
-27
lines changed

1 file changed

+36
-27
lines changed

src/tests/linalg/test_linalg.f90

+36-27
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,19 @@
11
program test_linalg
2+
23
use stdlib_experimental_error, only: check
34
use stdlib_experimental_kinds, only: sp, dp, qp, int8, int16, int32, int64
45
use stdlib_experimental_linalg, only: diag, eye, trace
6+
57
implicit none
8+
9+
real(sp), parameter :: sptol = 1000 * epsilon(1._sp)
10+
real(dp), parameter :: dptol = 1000 * epsilon(1._dp)
11+
real(qp), parameter :: qptol = 1000 * epsilon(1._qp)
12+
613
logical :: warn
14+
15+
! whether calls to check issue a warning
16+
! or stop execution
717
warn = .false.
818

919
!
@@ -59,12 +69,12 @@ subroutine test_eye
5969
msg="all(eye(5) == diag([(1,i=1,5)] failed.",warn=warn)
6070

6171
rye = eye(6)
62-
call check(sum(rye - diag([(1.0_sp,i=1,6)])) < epsilon(rye), &
63-
msg="sum(rye - diag([(1.0_sp,i=1,6)])) < epsilon(rye) failed.",warn=warn)
72+
call check(sum(rye - diag([(1.0_sp,i=1,6)])) < sptol, &
73+
msg="sum(rye - diag([(1.0_sp,i=1,6)])) < sptol failed.",warn=warn)
6474

6575
cye = eye(7)
66-
call check(abs(trace(cye) - complex(7.0_sp,0.0_sp)) < epsilon(1.0_sp), &
67-
msg="abs(trace(cye) - complex(7.0_sp,0.0_sp)) < epsilon(1.0_sp) failed.",warn=warn)
76+
call check(abs(trace(cye) - complex(7.0_sp,0.0_sp)) < sptol, &
77+
msg="abs(trace(cye) - complex(7.0_sp,0.0_sp)) < sptol failed.",warn=warn)
6878
end subroutine
6979

7080
subroutine test_diag_rsp
@@ -95,8 +105,8 @@ subroutine test_diag_rsp_k
95105
call check(all(a == b), &
96106
msg="all(a == b) failed.",warn=warn)
97107

98-
call check(sum(diag(a,-1)) - (n-1) < epsilon(1.0_sp), &
99-
msg="sum(diag(a,-1)) - (n-1) < epsilon(1.0_sp) failed.",warn=warn)
108+
call check(sum(diag(a,-1)) - (n-1) < sptol, &
109+
msg="sum(diag(a,-1)) - (n-1) < sptol failed.",warn=warn)
100110

101111
call check(all(a == transpose(diag([(1._sp,i=1,n-1)],1))), &
102112
msg="all(a == transpose(diag([(1._sp,i=1,n-1)],1))) failed",warn=warn)
@@ -151,10 +161,10 @@ subroutine test_diag_csp
151161
call check(all(a == b), &
152162
msg="all(a == b) failed.",warn=warn)
153163

154-
call check(all(abs(real(diag(a)) - [(i,i=1,n)]) < epsilon(1.0_sp)), &
155-
msg="all(abs(real(diag(a)) - [(i,i=1,n)]) < epsilon(1.0_sp))", warn=warn)
156-
call check(all(abs(aimag(diag(a)) - [(1,i=1,n)]) < epsilon(1.0_sp)), &
157-
msg="all(abs(aimag(diag(a)) - [(1,i=1,n)]) < epsilon(1.0_sp))", warn=warn)
164+
call check(all(abs(real(diag(a)) - [(i,i=1,n)]) < sptol), &
165+
msg="all(abs(real(diag(a)) - [(i,i=1,n)]) < sptol)", warn=warn)
166+
call check(all(abs(aimag(diag(a)) - [(1,i=1,n)]) < sptol), &
167+
msg="all(abs(aimag(diag(a)) - [(1,i=1,n)]) < sptol)", warn=warn)
158168
end subroutine
159169

160170
subroutine test_diag_cdp
@@ -204,7 +214,6 @@ subroutine test_diag_int16
204214
msg="all(diag(a) == pack(a,mask))", warn=warn)
205215
call check(all(diag(diag(a)) == merge(a,0_int16,mask)), &
206216
msg="all(diag(diag(a)) == merge(a,0_int16,mask)) failed.", warn=warn)
207-
a = unpack(int([1,2,3,4],int16),eye(n)==1,a)
208217
end subroutine
209218
subroutine test_diag_int32
210219
integer, parameter :: n = 3
@@ -261,8 +270,8 @@ subroutine test_trace_rsp
261270
integer :: i
262271
write(*,*) "test_trace_rsp"
263272
a = reshape([(i,i=1,n**2)],[n,n])
264-
call check(abs(trace(a) - sum(diag(a))) < epsilon(1.0_sp), &
265-
msg="abs(trace(a) - sum(diag(a))) < epsilon(1.0_sp) failed.",warn=warn)
273+
call check(abs(trace(a) - sum(diag(a))) < sptol, &
274+
msg="abs(trace(a) - sum(diag(a))) < sptol failed.",warn=warn)
266275
end subroutine
267276

268277
subroutine test_trace_rsp_nonsquare
@@ -278,8 +287,8 @@ subroutine test_trace_rsp_nonsquare
278287
a = reshape([(i,i=1,n*(n+1))],[n,n+1])
279288
ans = sum([1._sp,6._sp,11._sp,16._sp])
280289

281-
call check(abs(trace(a) - ans) < epsilon(1.0_sp), &
282-
msg="abs(trace(a) - ans) < epsilon(1.0_sp) failed.",warn=warn)
290+
call check(abs(trace(a) - ans) < sptol, &
291+
msg="abs(trace(a) - ans) < sptol failed.",warn=warn)
283292
end subroutine
284293

285294
subroutine test_trace_rdp
@@ -288,8 +297,8 @@ subroutine test_trace_rdp
288297
integer :: i
289298
write(*,*) "test_trace_rdp"
290299
a = reshape([(i,i=1,n**2)],[n,n])
291-
call check(abs(trace(a) - sum(diag(a))) < epsilon(1.0_dp), &
292-
msg="abs(trace(a) - sum(diag(a))) < epsilon(1.0_dp) failed.",warn=warn)
300+
call check(abs(trace(a) - sum(diag(a))) < dptol, &
301+
msg="abs(trace(a) - sum(diag(a))) < dptol failed.",warn=warn)
293302
end subroutine
294303

295304
subroutine test_trace_rdp_nonsquare
@@ -305,8 +314,8 @@ subroutine test_trace_rdp_nonsquare
305314
a = reshape([(i**2,i=1,n*(n-1))],[n,n-1])
306315
ans = sum([1._dp,36._dp,121._dp])
307316

308-
call check(abs(trace(a) - ans) < epsilon(1.0_dp), &
309-
msg="abs(trace(a) - ans) < epsilon(1.0_sp) failed.",warn=warn)
317+
call check(abs(trace(a) - ans) < dptol, &
318+
msg="abs(trace(a) - ans) < dptol failed.",warn=warn)
310319
end subroutine
311320

312321
subroutine test_trace_rqp
@@ -315,8 +324,8 @@ subroutine test_trace_rqp
315324
integer :: i
316325
write(*,*) "test_trace_rqp"
317326
a = reshape([(i,i=1,n**2)],[n,n])
318-
call check(abs(trace(a) - sum(diag(a))) < epsilon(1.0_qp), &
319-
msg="abs(trace(a) - sum(diag(a))) < epsilon(1.0_qp) failed.",warn=warn)
327+
call check(abs(trace(a) - sum(diag(a))) < qptol, &
328+
msg="abs(trace(a) - sum(diag(a))) < qptol failed.",warn=warn)
320329
end subroutine
321330

322331

@@ -336,8 +345,8 @@ subroutine test_trace_csp
336345
b = re + im*i_
337346

338347
! tr(A + B) = tr(A) + tr(B)
339-
call check(abs(trace(a+b) - (trace(a) + trace(b))) < 10*epsilon(1.0_sp), &
340-
msg="abs(trace(a+b) - (trace(a) + trace(b))) < 10*epsilon(1.0_sp) failed.",warn=warn)
348+
call check(abs(trace(a+b) - (trace(a) + trace(b))) < sptol, &
349+
msg="abs(trace(a+b) - (trace(a) + trace(b))) < sptol failed.",warn=warn)
341350
end subroutine
342351

343352
subroutine test_trace_cdp
@@ -350,8 +359,8 @@ subroutine test_trace_cdp
350359
a = reshape([(j + (n**2 - (j-1))*i_,j=1,n**2)],[n,n])
351360
ans = complex(15,15) !(1 + 5 + 9) + (9 + 5 + 1)i
352361

353-
call check(abs(trace(a) - ans) < epsilon(1.0_dp), &
354-
msg="abs(trace(a) - ans) < epsilon(1.0_dp) failed.",warn=warn)
362+
call check(abs(trace(a) - ans) < dptol, &
363+
msg="abs(trace(a) - ans) < dptol failed.",warn=warn)
355364
end subroutine
356365

357366
subroutine test_trace_cqp
@@ -360,8 +369,8 @@ subroutine test_trace_cqp
360369
complex(qp), parameter :: i_ = complex(0,1)
361370
write(*,*) "test_trace_cqp"
362371
a = 3*eye(n) + 4*eye(n)*i_ ! pythagorean triple
363-
call check(abs(trace(a)) - 3*5.0_qp < epsilon(1.0_qp), &
364-
msg="abs(trace(a)) - 3*5.0_qp < epsilon(1.0_qp) failed.",warn=warn)
372+
call check(abs(trace(a)) - 3*5.0_qp < qptol, &
373+
msg="abs(trace(a)) - 3*5.0_qp < qptol failed.",warn=warn)
365374
end subroutine
366375

367376

0 commit comments

Comments
 (0)