Skip to content

Commit 9af45ef

Browse files
committed
var_corrected_dev: addition of tests for dp, int, and complex(dp) for var(..., corrected=.false.)
1 parent 21f68dd commit 9af45ef

File tree

1 file changed

+237
-8
lines changed

1 file changed

+237
-8
lines changed

src/tests/stats/test_varn.f90

Lines changed: 237 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,8 @@ program test_varn
99
real(dp), parameter :: dptol = 1000 * epsilon(1._dp)
1010

1111
integer(int32) :: i321(5) = [1, 2, 3, 4, 5]
12-
integer(int64) :: i641(5) = [1, 2, 3, 4, 5]
1312

1413
integer(int32), allocatable :: i32(:,:), i323(:, :, :)
15-
integer(int64), allocatable :: i64(:,:), i643(:, :, :)
1614

1715
real(sp) :: s1(5) = [1.0_sp, 2.0_sp, 3.0_sp, 4.0_sp, 5.0_sp]
1816
real(dp) :: d1(5) = [1.0_dp, 2.0_dp, 3.0_dp, 4.0_dp, 5.0_dp]
@@ -24,17 +22,11 @@ program test_varn
2422
9._dp, 10._dp, 11._dp, 12._dp], [4, 3])
2523

2624

27-
complex(sp) :: cs1(5) = [ cmplx(0.57706_sp, 0.00000_sp),&
28-
cmplx(0.00000_sp, 1.44065_sp),&
29-
cmplx(1.26401_sp, 0.00000_sp),&
30-
cmplx(0.00000_sp, 0.88833_sp),&
31-
cmplx(1.14352_sp, 0.00000_sp)]
3225
complex(dp) :: cd1(5) = [ cmplx(0.57706_dp, 0.00000_dp),&
3326
cmplx(0.00000_dp, 1.44065_dp),&
3427
cmplx(1.26401_dp, 0.00000_dp),&
3528
cmplx(0.00000_dp, 0.88833_dp),&
3629
cmplx(1.14352_dp, 0.00000_dp)]
37-
complex(sp) :: cs(5,3)
3830
complex(dp) :: cd(5,3)
3931

4032

@@ -125,5 +117,242 @@ program test_varn
125117
], [size(s3,1), size(s3,2)] ))&
126118
< sptol ))
127119

120+
!dp
121+
!1dim
122+
print*,' test_dp_1dim'
123+
call assert( abs(var(d1, corrected=.false.) - 2.5_dp*(4._dp/5.)) < dptol)
124+
call assert( abs(var(d1, dim=1, corrected=.false.) - 2.5_dp*(4._dp/5.)) < dptol)
125+
126+
print*,' test_dp_1dim_mask'
127+
call assert( isnan(var(d1, .false., corrected=.false.)))
128+
call assert( isnan(var(d1, 1, .false., corrected=.false.)))
129+
130+
print*,' test_dp_1dim_mask_array'
131+
call assert( abs(var(d1, d1 < 5, corrected=.false.) - 5._dp/4.) < dptol)
132+
call assert( isnan((var(d1, d1 < 0, corrected=.false.))))
133+
call assert( abs(var(d1, d1 == 1, corrected=.false.)) < dptol)
134+
call assert( abs(var(d1, 1, d1 < 5, corrected=.false.) - 5._dp/4.) < dptol)
135+
136+
!2dim
137+
print*,' test_dp_2dim'
138+
call assert( abs(var(d, corrected=.false.) - 13._dp*11./12.) < dptol)
139+
call assert( all( abs( var(d, 1, corrected=.false.) - [20., 20., 5.]/4._dp) < dptol))
140+
call assert( all( abs( var(d, 2, corrected=.false.) -&
141+
[38._dp, 86._dp / 3._dp, 62._dp / 3._dp , 14._dp]/3._dp) < dptol))
142+
143+
print*,' test_dp_2dim_mask'
144+
call assert( isnan(var(d, .false., corrected=.false.)))
145+
call assert( any(isnan(var(d, 1, .false., corrected=.false.))))
146+
call assert( any(isnan(var(d, 2, .false., corrected=.false.))))
147+
148+
print*,' test_dp_2dim_mask_array'
149+
call assert( abs(var(d, d < 11, corrected=.false.) - 2.75_dp*3._dp) < dptol)
150+
call assert( all( abs( var(d, 1, d < 11, corrected=.false.) -&
151+
[5._dp, 5._dp, 0.25_dp]) < dptol))
152+
call assert( all( abs( var(d, 2, d < 11, corrected=.false.) -&
153+
[38._dp/3., 86._dp/9., 0.25_dp , 0.25_dp]) < dptol))
154+
155+
156+
!3dim
157+
allocate(d3(size(d,1),size(d,2),3))
158+
d3(:,:,1)=d;
159+
d3(:,:,2)=d*2;
160+
d3(:,:,3)=d*4;
161+
162+
print*,' test_dp_3dim'
163+
call assert( abs(var(d3, corrected=.false.) - 153.4_dp*35._dp/36._dp) < dptol)
164+
call assert( all( abs( var(d3, 1, corrected=.false.) -&
165+
reshape([20._dp , 20._dp , 5._dp ,&
166+
4* 20._dp , 4* 20._dp , 4* 5._dp ,&
167+
16* 20._dp , 16* 20._dp , 16* 5._dp ],&
168+
[size(d3,2), size(d3,3)])/4._dp)&
169+
< dptol))
170+
call assert( all( abs( var(d3, 2, corrected=.false.) -&
171+
reshape([38._dp, 86. / 3._dp, 62. / 3._dp , 14._dp,&
172+
8* 19._dp, 8* 43. / 3._dp, 8* 31. / 3._dp, 8* 7._dp,&
173+
32* 19._dp, 32* 43. / 3._dp, 32* 31. / 3._dp, 32* 7._dp],&
174+
[size(d3,1), size(d3,3)] )/3._dp)&
175+
< dptol))
176+
print*,' test_dp_3dim'
177+
call assert( all(abs( var(d3, 3, corrected=.false.) -&
178+
reshape([ 7._dp/3., 21._dp, 175._dp/3.,&
179+
343._dp/3., 28._dp/3., 112._dp/3.,&
180+
84._dp, 448._dp/3., 189._dp,&
181+
700._dp/3., 847._dp/3., 336._dp],&
182+
[size(d3,1), size(d3,2)] )*2._dp/3._dp)&
183+
< dptol))
184+
185+
print*,' test_dp_3dim_mask'
186+
call assert( isnan(var(d3, .false., corrected=.false.)))
187+
call assert( any(isnan(var(d3, 1, .false., corrected=.false.))))
188+
call assert( any(isnan(var(d3, 2, .false., corrected=.false.))))
189+
call assert( any(isnan(var(d3, 3, .false., corrected=.false.))))
190+
191+
print*,' test_dp_3dim_mask_array'
192+
call assert( abs(var(d3, d3 < 11, corrected=.false.) -&
193+
7.7370242214532876_dp) < dptol)
194+
call assert( all( abs( var(d3, 1, d3 < 45, corrected=.false.) -&
195+
reshape([5._dp, 5._dp, 1.25_dp, 20._dp, 20._dp, 5._dp,&
196+
80._dp, 80._dp, 32._dp/3.],&
197+
[size(d3, 2), size(d3, 3)])) < dptol ))
198+
call assert( all( abs( var(d3, 2, d3 < 45, corrected=.false.) -&
199+
reshape([ 38._dp/3., 86._dp/9., 62._dp/9., 14._dp/3., 152._dp/3.,&
200+
344._dp/9., 248._dp/9., 168._dp/9., 1824._dp/9.,&
201+
1376._dp/9., 992._dp/9., 4._dp&
202+
],&
203+
[size(d3, 1), size(d3, 3)])) < dptol ))
204+
print*,' test_dp_3dim_mask_array'
205+
call assert( all( abs( var(d3, 3, d3 < 45, corrected=.false.) -&
206+
reshape([14._dp/9., 14._dp, 350._dp/9., 686._dp/9., 56._dp/9.,&
207+
224._dp/9., 56._dp, 896._dp/9., 126._dp, 1400._dp/9.,&
208+
1694._dp/9., 36._dp&
209+
], [size(d3,1), size(d3,2)] ))&
210+
< dptol ))
211+
212+
!int32
213+
!1dim
214+
print*,' test_int32_1dim'
215+
call assert( abs(var(i321, corrected=.false.) - 2.5_dp*(4._dp/5.)) < dptol)
216+
call assert( abs(var(i321, dim=1, corrected=.false.) - 2.5_dp*(4._dp/5.)) < dptol)
217+
218+
print*,' test_int32_1dim_mask'
219+
call assert( isnan(var(i321, .false., corrected=.false.)))
220+
call assert( isnan(var(i321, 1, .false., corrected=.false.)))
221+
222+
print*,' test_int32_1dim_mask_array'
223+
call assert( abs(var(i321, i321 < 5, corrected=.false.) - 5._dp/4.) < dptol)
224+
call assert( isnan((var(i321, i321 < 0, corrected=.false.))))
225+
call assert( abs(var(i321, i321 == 1, corrected=.false.)) < dptol)
226+
call assert( abs(var(i321, 1, i321 < 5, corrected=.false.) - 5._dp/4.) < dptol)
227+
228+
!2dim
229+
i32 = d
230+
print*,' test_int32_2dim'
231+
call assert( abs(var(i32, corrected=.false.) - 13._dp*11./12.) < dptol)
232+
call assert( all( abs( var(i32, 1, corrected=.false.) -&
233+
[20., 20., 5.]/4._dp) < dptol))
234+
call assert( all( abs( var(i32, 2, corrected=.false.) -&
235+
[38._dp, 86._dp / 3._dp, 62._dp / 3._dp , 14._dp]/3._dp) < dptol))
236+
237+
print*,' test_int32_2dim_mask'
238+
call assert( isnan(var(i32, .false., corrected=.false.)))
239+
call assert( any(isnan(var(i32, 1, .false., corrected=.false.))))
240+
call assert( any(isnan(var(i32, 2, .false., corrected=.false.))))
241+
242+
print*,' test_int32_2dim_mask_array'
243+
call assert( abs(var(i32, i32 < 11, corrected=.false.) - 2.75_dp*3._dp) < dptol)
244+
call assert( all( abs( var(i32, 1, i32 < 11, corrected=.false.) -&
245+
[5._dp, 5._dp, 0.25_dp]) < dptol))
246+
call assert( all( abs( var(i32, 2, i32 < 11, corrected=.false.) -&
247+
[38._dp/3., 86._dp/9., 0.25_dp , 0.25_dp]) < dptol))
248+
249+
250+
!3dim
251+
allocate(i323(size(i32,1),size(i32,2),3))
252+
i323(:,:,1)=i32;
253+
i323(:,:,2)=i32*2;
254+
i323(:,:,3)=i32*4;
255+
256+
print*,' test_int32_3dim'
257+
call assert( abs(var(i323, corrected=.false.) - 153.4_dp*35._dp/36._dp) < dptol)
258+
call assert( all( abs( var(i323, 1, corrected=.false.) -&
259+
reshape([20._dp , 20._dp , 5._dp ,&
260+
4* 20._dp , 4* 20._dp , 4* 5._dp ,&
261+
16* 20._dp , 16* 20._dp , 16* 5._dp ],&
262+
[size(i323,2), size(i323,3)])/4._dp)&
263+
< dptol))
264+
call assert( all( abs( var(i323, 2, corrected=.false.) -&
265+
reshape([38._dp, 86. / 3._dp, 62. / 3._dp , 14._dp,&
266+
8* 19._dp, 8* 43. / 3._dp, 8* 31. / 3._dp, 8* 7._dp,&
267+
32* 19._dp, 32* 43. / 3._dp, 32* 31. / 3._dp, 32* 7._dp],&
268+
[size(i323,1), size(i323,3)] )/3._dp)&
269+
< dptol))
270+
print*,' test_int32_3dim'
271+
call assert( all(abs( var(i323, 3, corrected=.false.) -&
272+
reshape([ 7._dp/3., 21._dp, 175._dp/3.,&
273+
343._dp/3., 28._dp/3., 112._dp/3.,&
274+
84._dp, 448._dp/3., 189._dp,&
275+
700._dp/3., 847._dp/3., 336._dp],&
276+
[size(i323,1), size(i323,2)] )*2._dp/3._dp)&
277+
< dptol))
278+
279+
print*,' test_int32_3dim_mask'
280+
call assert( isnan(var(i323, .false., corrected=.false.)))
281+
call assert( any(isnan(var(i323, 1, .false., corrected=.false.))))
282+
call assert( any(isnan(var(i323, 2, .false., corrected=.false.))))
283+
call assert( any(isnan(var(i323, 3, .false., corrected=.false.))))
284+
285+
print*,' test_int32_3dim_mask_array'
286+
call assert( abs(var(i323, i323 < 11, corrected=.false.) -&
287+
7.7370242214532876_dp) < dptol)
288+
call assert( all( abs( var(i323, 1, i323 < 45, corrected=.false.) -&
289+
reshape([5._dp, 5._dp, 1.25_dp, 20._dp, 20._dp, 5._dp,&
290+
80._dp, 80._dp, 32._dp/3.],&
291+
[size(i323, 2), size(i323, 3)])) < dptol ))
292+
call assert( all( abs( var(i323, 2, i323 < 45, corrected=.false.) -&
293+
reshape([ 38._dp/3., 86._dp/9., 62._dp/9., 14._dp/3., 152._dp/3.,&
294+
344._dp/9., 248._dp/9., 168._dp/9., 1824._dp/9.,&
295+
1376._dp/9., 992._dp/9., 4._dp&
296+
],&
297+
[size(i323, 1), size(i323, 3)])) < dptol ))
298+
print*,' test_int32_3dim_mask_array'
299+
call assert( all( abs( var(i323, 3, i323 < 45, corrected=.false.) -&
300+
reshape([14._dp/9., 14._dp, 350._dp/9., 686._dp/9., 56._dp/9.,&
301+
224._dp/9., 56._dp, 896._dp/9., 126._dp, 1400._dp/9.,&
302+
1694._dp/9., 36._dp&
303+
], [size(i323,1), size(i323,2)] ))&
304+
< dptol ))
305+
306+
!cdp
307+
!1dim
308+
print*,' test_cdp_1dim'
309+
call assert( abs(var(cd1, corrected=.false.) -&
310+
(var(real(cd1), corrected=.false.) +&
311+
var(aimag(cd1), corrected=.false.))) < dptol)
312+
call assert( abs(var(cd1, dim=1, corrected=.false.) -&
313+
(var(real(cd1), dim=1, corrected=.false.) +&
314+
var(aimag(cd1), dim=1, corrected=.false.))) < dptol)
315+
316+
print*,' test_cdp_1dim_mask'
317+
call assert( isnan(var(cd1, .false., corrected=.false.)))
318+
call assert( isnan(var(cd1, 1, .false., corrected=.false.)))
319+
320+
print*,' test_cdp_1dim_mask_array'
321+
call assert( abs(var(cd1, aimag(cd1) == 0, corrected=.false.) -&
322+
var(real(cd1), aimag(cd1) == 0, corrected=.false.)) < dptol)
323+
call assert( abs(var(cd1, 1, aimag(cd1) == 0, corrected=.false.) -&
324+
var(real(cd1), 1, aimag(cd1) == 0, corrected=.false.)) < dptol)
325+
call assert( isnan((var(cd1, (real(cd1) == 0 .and. aimag(cd1) == 0),&
326+
corrected=.false.))))
327+
call assert( abs(var(cd1, (real(cd1) > 1.2 .and. aimag(cd1) == 0),&
328+
corrected=.false.)) < dptol)
329+
330+
!2dim
331+
cd(:,1) = cd1
332+
cd(:,2) = cd1*3_sp
333+
cd(:,3) = cd1*1.5_sp
334+
335+
print*,' test_cdp_2dim'
336+
call assert( abs(var(cd, corrected=.false.) -&
337+
(var(real(cd), corrected=.false.) +&
338+
var(aimag(cd), corrected=.false.))) < dptol)
339+
call assert( all( abs(var(cd, 1, corrected=.false.) -&
340+
(var(real(cd), 1, corrected=.false.) +&
341+
var(aimag(cd), 1, corrected=.false.))) < dptol))
342+
call assert( all( abs(var(cd, 2, corrected=.false.) -&
343+
(var(real(cd), 2, corrected=.false.) +&
344+
var(aimag(cd), 2, corrected=.false.))) < dptol))
345+
346+
print*,' test_cdp_2dim_mask'
347+
call assert( isnan(var(cd, .false., corrected=.false.)))
348+
call assert( any(isnan(var(cd, 1, .false., corrected=.false.))))
349+
call assert( any(isnan(var(cd, 2, .false., corrected=.false.))))
350+
351+
print*,' test_cdp_2dim_mask_array'
352+
call assert( abs(var(cd, aimag(cd) == 0, corrected=.false.) -&
353+
var(real(cd), aimag(cd) == 0, corrected=.false.)) < dptol)
354+
call assert( all( abs( var(cd, 1, aimag(cd) == 0, corrected=.false.) -&
355+
var(real(cd), 1, aimag(cd) == 0, corrected=.false.)) < dptol))
356+
call assert( any( isnan( var(cd, 2, aimag(cd) == 0, corrected=.false.))))
128357

129358
end program

0 commit comments

Comments
 (0)