@@ -5,6 +5,9 @@ program test_mean
5
5
use stdlib_experimental_stats, only: mean
6
6
implicit none
7
7
8
+ real (sp), parameter :: sptol = 1.2e-06_sp
9
+ real (dp), parameter :: dptol = 2.2e-15_dp
10
+
8
11
real (sp) :: s1(3 ) = [1.0_sp , 2.0_sp , 3.0_sp ]
9
12
10
13
real (sp), allocatable :: s(:, :)
@@ -17,37 +20,37 @@ program test_mean
17
20
! sp
18
21
call loadtxt(" array3.dat" , s)
19
22
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 )
23
26
24
27
! 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 )
27
30
28
31
29
32
! dp
30
33
call loadtxt(" array3.dat" , d)
31
34
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 )
35
38
36
39
37
40
! int32
38
41
call loadtxt(" array3.dat" , d)
39
42
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 )
43
46
44
47
45
48
! int64
46
49
call loadtxt(" array3.dat" , d)
47
50
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 )
51
54
52
55
53
56
! dp rank 3
@@ -56,10 +59,10 @@ program test_mean
56
59
d3(:,:,2 )= d* 1.5_dp ;
57
60
d3(:,:,3 )= d* 4._dp ;
58
61
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 )
63
66
64
67
65
68
! dp rank 4
@@ -70,12 +73,10 @@ program test_mean
70
73
d4(:,:,3 ,1 )= d* 4._dp ;
71
74
d4(:,:,3 ,9 )= d* 4._dp ;
72
75
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)
80
81
81
82
end program
0 commit comments