Skip to content

Commit 75cea6c

Browse files
committed
Turn floating point tests to use tolerance
1 parent 37f6ed6 commit 75cea6c

File tree

1 file changed

+26
-25
lines changed

1 file changed

+26
-25
lines changed

src/tests/stats/test_mean.f90

+26-25
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,9 @@ program test_mean
55
use stdlib_experimental_stats, only: mean
66
implicit none
77

8+
real(sp), parameter :: sptol = 1.2e-06_sp
9+
real(dp), parameter :: dptol = 2.2e-15_dp
10+
811
real(sp) :: s1(3) = [1.0_sp, 2.0_sp, 3.0_sp]
912

1013
real(sp), allocatable :: s(:, :)
@@ -17,37 +20,37 @@ program test_mean
1720
!sp
1821
call loadtxt("array3.dat", s)
1922

20-
call assert( mean(s) - sum(s)/real(size(s), sp) == 0.0_sp)
21-
call assert( sum( abs( mean(s,1) - sum(s,1)/real(size(s,1), sp) )) == 0.0_sp)
22-
call assert( sum( abs( mean(s,2) - sum(s,2)/real(size(s,2), sp) )) == 0.0_sp)
23+
call assert( abs(mean(s) - sum(s)/real(size(s), sp)) < sptol)
24+
call assert( sum( abs( mean(s,1) - sum(s,1)/real(size(s,1), sp) )) < sptol)
25+
call assert( sum( abs( mean(s,2) - sum(s,2)/real(size(s,2), sp) )) < sptol)
2326

2427
! check reduction of rank one array to scalar
25-
call assert(mean(s1) - sum(s1) / real(size(s1), sp) == 0.0_dp)
26-
call assert(mean(s1, dim=1) - sum(s1, dim=1) / real(size(s1, dim=1), sp) == 0.0_dp)
28+
call assert(abs(mean(s1) - sum(s1) / real(size(s1), sp)) < sptol)
29+
call assert(abs(mean(s1, dim=1) - sum(s1, dim=1) / real(size(s1, dim=1), sp)) < sptol)
2730

2831

2932
!dp
3033
call loadtxt("array3.dat", d)
3134

32-
call assert( mean(d) - sum(d)/real(size(d), dp) == 0.0_dp)
33-
call assert( sum( abs( mean(d,1) - sum(d,1)/real(size(d,1), dp) )) == 0.0_dp)
34-
call assert( sum( abs( mean(d,2) - sum(d,2)/real(size(d,2), dp) )) == 0.0_dp)
35+
call assert( abs(mean(d) - sum(d)/real(size(d), dp)) < dptol)
36+
call assert( sum( abs( mean(d,1) - sum(d,1)/real(size(d,1), dp) )) < dptol)
37+
call assert( sum( abs( mean(d,2) - sum(d,2)/real(size(d,2), dp) )) < dptol)
3538

3639

3740
!int32
3841
call loadtxt("array3.dat", d)
3942

40-
call assert( mean(int(d, int32)) - sum(real(int(d, int32),dp))/real(size(d), dp) == 0.0_dp)
41-
call assert( sum(abs( mean(int(d, int32),1) - sum(real(int(d, int32),dp),1)/real(size(d,1), dp) )) == 0.0_dp)
42-
call assert( sum(abs( mean(int(d, int32),2) - sum(real(int(d, int32),dp),2)/real(size(d,2), dp) )) == 0.0_dp)
43+
call assert( abs(mean(int(d, int32)) - sum(real(int(d, int32),dp))/real(size(d), dp)) < dptol)
44+
call assert( sum(abs( mean(int(d, int32),1) - sum(real(int(d, int32),dp),1)/real(size(d,1), dp) )) < dptol)
45+
call assert( sum(abs( mean(int(d, int32),2) - sum(real(int(d, int32),dp),2)/real(size(d,2), dp) )) < dptol)
4346

4447

4548
!int64
4649
call loadtxt("array3.dat", d)
4750

48-
call assert( mean(int(d, int64)) - sum(real(int(d, int64),dp))/real(size(d), dp) == 0.0_dp)
49-
call assert( sum(abs( mean(int(d, int64),1) - sum(real(int(d, int64),dp),1)/real(size(d,1), dp) )) == 0.0_dp)
50-
call assert( sum(abs( mean(int(d, int64),2) - sum(real(int(d, int64),dp),2)/real(size(d,2), dp) )) == 0.0_dp)
51+
call assert( abs(mean(int(d, int64)) - sum(real(int(d, int64),dp))/real(size(d), dp)) < dptol)
52+
call assert( sum(abs( mean(int(d, int64),1) - sum(real(int(d, int64),dp),1)/real(size(d,1), dp) )) < dptol)
53+
call assert( sum(abs( mean(int(d, int64),2) - sum(real(int(d, int64),dp),2)/real(size(d,2), dp) )) < dptol)
5154

5255

5356
!dp rank 3
@@ -56,10 +59,10 @@ program test_mean
5659
d3(:,:,2)=d*1.5_dp;
5760
d3(:,:,3)=d*4._dp;
5861

59-
call assert( mean(d3) - sum(d3)/real(size(d3), dp) == 0.0_dp)
60-
call assert( sum( abs( mean(d3,1) - sum(d3,1)/real(size(d3,1), dp) )) == 0.0_dp)
61-
call assert( sum( abs( mean(d3,2) - sum(d3,2)/real(size(d3,2), dp) )) == 0.0_dp)
62-
call assert( sum( abs( mean(d3,3) - sum(d3,3)/real(size(d3,3), dp) )) == 0.0_dp)
62+
call assert( abs(mean(d3) - sum(d3)/real(size(d3), dp)) < dptol)
63+
call assert( sum( abs( mean(d3,1) - sum(d3,1)/real(size(d3,1), dp) )) < dptol)
64+
call assert( sum( abs( mean(d3,2) - sum(d3,2)/real(size(d3,2), dp) )) < dptol)
65+
call assert( sum( abs( mean(d3,3) - sum(d3,3)/real(size(d3,3), dp) )) < dptol)
6366

6467

6568
!dp rank 4
@@ -70,12 +73,10 @@ program test_mean
7073
d4(:,:,3,1)=d*4._dp;
7174
d4(:,:,3,9)=d*4._dp;
7275

73-
call assert( mean(d4) - sum(d4)/real(size(d4), dp) == 0.0_dp)
74-
call assert( sum( abs( mean(d4,1) - sum(d4,1)/real(size(d4,1), dp) )) == 0.0_dp)
75-
call assert( sum( abs( mean(d4,2) - sum(d4,2)/real(size(d4,2), dp) )) == 0.0_dp)
76-
call assert( sum( abs( mean(d4,3) - sum(d4,3)/real(size(d4,3), dp) )) == 0.0_dp)
77-
call assert( sum( abs( mean(d4,4) - sum(d4,4)/real(size(d4,4), dp) )) == 0.0_dp)
78-
79-
contains
76+
call assert( abs(mean(d4) - sum(d4)/real(size(d4), dp)) < dptol)
77+
call assert( sum( abs( mean(d4,1) - sum(d4,1)/real(size(d4,1), dp) )) < dptol)
78+
call assert( sum( abs( mean(d4,2) - sum(d4,2)/real(size(d4,2), dp) )) < dptol)
79+
call assert( sum( abs( mean(d4,3) - sum(d4,3)/real(size(d4,3), dp) )) < dptol)
80+
call assert( sum( abs( mean(d4,4) - sum(d4,4)/real(size(d4,4), dp) )) < dptol)
8081

8182
end program

0 commit comments

Comments
 (0)