Line data Source code
1 : !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2 : !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3 : !!!!
4 : !!!! MIT License
5 : !!!!
6 : !!!! ParaMonte: plain powerful parallel Monte Carlo library.
7 : !!!!
8 : !!!! Copyright (C) 2012-present, The Computational Data Science Lab
9 : !!!!
10 : !!!! This file is part of the ParaMonte library.
11 : !!!!
12 : !!!! Permission is hereby granted, free of charge, to any person obtaining a
13 : !!!! copy of this software and associated documentation files (the "Software"),
14 : !!!! to deal in the Software without restriction, including without limitation
15 : !!!! the rights to use, copy, modify, merge, publish, distribute, sublicense,
16 : !!!! and/or sell copies of the Software, and to permit persons to whom the
17 : !!!! Software is furnished to do so, subject to the following conditions:
18 : !!!!
19 : !!!! The above copyright notice and this permission notice shall be
20 : !!!! included in all copies or substantial portions of the Software.
21 : !!!!
22 : !!!! THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
23 : !!!! EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
24 : !!!! MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
25 : !!!! IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
26 : !!!! DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
27 : !!!! OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE
28 : !!!! OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
29 : !!!!
30 : !!!! ACKNOWLEDGMENT
31 : !!!!
32 : !!!! ParaMonte is an honor-ware and its currency is acknowledgment and citations.
33 : !!!! As per the ParaMonte library license agreement terms, if you use any parts of
34 : !!!! this library for any purposes, kindly acknowledge the use of ParaMonte in your
35 : !!!! work (education/research/industry/development/...) by citing the ParaMonte
36 : !!!! library as described on this page:
37 : !!!!
38 : !!!! https://github.com/cdslaborg/paramonte/blob/main/ACKNOWLEDGMENT.md
39 : !!!!
40 : !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
41 : !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
42 :
43 : !> \brief This module contains tests of the module [Misc_mod](@ref misc_mod).
44 : !> \author Amir Shahmoradi
45 :
46 : module Test_Misc_mod
47 :
48 : use Misc_mod
49 : use Err_mod, only: Err_type
50 : use Test_mod, only: Test_type
51 : implicit none
52 :
53 : private
54 : public :: test_Misc
55 :
56 : type(Test_type) :: Test
57 :
58 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
59 :
60 : contains
61 :
62 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
63 :
64 3 : subroutine test_Misc()
65 : implicit none
66 3 : Test = Test_type(moduleName=MODULE_NAME)
67 3 : call Test%run(test_arth_IK_1, "test_arth_IK_1")
68 3 : call Test%run(test_arth_RK_1, "test_arth_RK_1")
69 3 : call Test%run(test_arth_RK_2, "test_arth_RK_2")
70 3 : call Test%run(test_swap_IK_1, "test_swap_IK_1")
71 3 : call Test%run(test_swap_RK_1, "test_swap_RK_1")
72 3 : call Test%run(test_swap_CK_1, "test_swap_RK_1")
73 3 : call Test%run(test_swap_SPI_1, "test_swap_SPI_1")
74 3 : call Test%run(test_swap_DPI_1, "test_swap_DPI_1")
75 3 : call Test%run(test_swap_SPR_1, "test_swap_SPR_1")
76 3 : call Test%run(test_swap_DPR_1, "test_swap_DPR_1")
77 3 : call Test%run(test_swap_SPC_1, "test_swap_SPC_1")
78 3 : call Test%run(test_swap_DPC_1, "test_swap_DPC_1")
79 3 : call Test%run(test_zroots_unity_1, "test_zroots_unity_1")
80 3 : call Test%run(test_copyArray_IK_1, "test_copyArray_IK_1")
81 3 : call Test%run(test_copyArray_IK_2, "test_copyArray_IK_2")
82 3 : call Test%run(test_copyArray_RK_1, "test_copyArray_RK_1")
83 3 : call Test%run(test_copyArray_RK_2, "test_copyArray_RK_2")
84 3 : call Test%run(test_resizeVector_RK_1, "test_resizeVector_RK_1")
85 3 : call Test%run(test_masked_swap_SPR_1, "test_masked_swap_SPR_1")
86 3 : call Test%run(test_masked_swap_SPR_2, "test_masked_swap_SPR_2")
87 3 : call Test%run(test_masked_swap_SPRV_1, "test_masked_swap_SPRV_1")
88 3 : call Test%run(test_masked_swap_SPRM_1, "test_masked_swap_SPRM_1")
89 3 : call Test%run(test_findUnique_1, "test_findUnique_1")
90 3 : call Test%finalize()
91 3 : end subroutine test_Misc
92 :
93 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
94 :
95 3 : function test_swap_IK_1() result(assertion)
96 3 : use Constants_mod, only: IK
97 : implicit none
98 : logical :: assertion
99 : integer(IK) :: i
100 : integer(IK) , parameter :: vecLen = 3_IK
101 : integer(IK) , parameter :: Vector1_ref(vecLen) = [(+i,i=1,vecLen)]
102 : integer(IK) , parameter :: Vector2_ref(vecLen) = [(-i,i=1,vecLen)]
103 : integer(IK) :: Vector1(vecLen)
104 : integer(IK) :: Vector2(vecLen)
105 3 : Vector1 = Vector1_ref
106 3 : Vector2 = Vector2_ref
107 12 : call swap_IK(Vector1,Vector2)
108 21 : assertion = all(Vector1==Vector2_ref) .and. all(Vector2==Vector1_ref)
109 3 : if (Test%isDebugMode .and. .not. assertion) then
110 : ! LCOV_EXCL_START
111 : write(Test%outputUnit,"(*(g0,:,' '))")
112 : write(Test%outputUnit,"(*(g0,:,' '))") "Vector1_ref =", Vector1_ref
113 : write(Test%outputUnit,"(*(g0,:,' '))") "Vector2 =", Vector2
114 : write(Test%outputUnit,"(*(g0,:,' '))") "Vector2_ref =", Vector2_ref
115 : write(Test%outputUnit,"(*(g0,:,' '))") "Vector1 =", Vector1
116 : write(Test%outputUnit,"(*(g0,:,' '))")
117 : end if
118 : ! LCOV_EXCL_STOP
119 3 : end function test_swap_IK_1
120 :
121 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
122 :
123 3 : function test_swap_SPI_1() result(assertion)
124 3 : use Constants_mod, only: SPI
125 : implicit none
126 : logical :: assertion
127 : integer(SPI) :: i
128 : integer(SPI) , parameter :: vecLen = 3_SPI
129 : integer(SPI) , parameter :: Vector1_ref(vecLen) = [(+i,i=1,vecLen)]
130 : integer(SPI) , parameter :: Vector2_ref(vecLen) = [(-i,i=1,vecLen)]
131 : integer(SPI) :: Vector1(vecLen)
132 : integer(SPI) :: Vector2(vecLen)
133 3 : Vector1 = Vector1_ref
134 3 : Vector2 = Vector2_ref
135 12 : call swap_SPI(Vector1,Vector2)
136 21 : assertion = all(Vector1==Vector2_ref) .and. all(Vector2==Vector1_ref)
137 3 : if (Test%isDebugMode .and. .not. assertion) then
138 : ! LCOV_EXCL_START
139 : write(Test%outputUnit,"(*(g0,:,' '))")
140 : write(Test%outputUnit,"(*(g0,:,' '))") "Vector1_ref =", Vector1_ref
141 : write(Test%outputUnit,"(*(g0,:,' '))") "Vector2 =", Vector2
142 : write(Test%outputUnit,"(*(g0,:,' '))") "Vector2_ref =", Vector2_ref
143 : write(Test%outputUnit,"(*(g0,:,' '))") "Vector1 =", Vector1
144 : write(Test%outputUnit,"(*(g0,:,' '))")
145 : end if
146 : ! LCOV_EXCL_STOP
147 3 : end function test_swap_SPI_1
148 :
149 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
150 :
151 3 : function test_swap_DPI_1() result(assertion)
152 3 : use Constants_mod, only: DPI
153 : implicit none
154 : logical :: assertion
155 : integer(DPI) :: i
156 : integer(DPI) , parameter :: vecLen = 3
157 : integer(DPI) , parameter :: Vector1_ref(vecLen) = [(+i,i=1,vecLen)]
158 : integer(DPI) , parameter :: Vector2_ref(vecLen) = [(-i,i=1,vecLen)]
159 : integer(DPI) :: Vector1(vecLen)
160 : integer(DPI) :: Vector2(vecLen)
161 3 : Vector1 = Vector1_ref
162 3 : Vector2 = Vector2_ref
163 12 : call swap_DPI(Vector1,Vector2)
164 21 : assertion = all(Vector1==Vector2_ref) .and. all(Vector2==Vector1_ref)
165 3 : if (Test%isDebugMode .and. .not. assertion) then
166 : ! LCOV_EXCL_START
167 : write(Test%outputUnit,"(*(g0,:,' '))")
168 : write(Test%outputUnit,"(*(g0,:,' '))") "Vector1_ref =", Vector1_ref
169 : write(Test%outputUnit,"(*(g0,:,' '))") "Vector2 =", Vector2
170 : write(Test%outputUnit,"(*(g0,:,' '))") "Vector2_ref =", Vector2_ref
171 : write(Test%outputUnit,"(*(g0,:,' '))") "Vector1 =", Vector1
172 : write(Test%outputUnit,"(*(g0,:,' '))")
173 : end if
174 : ! LCOV_EXCL_STOP
175 3 : end function test_swap_DPI_1
176 :
177 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
178 :
179 3 : function test_swap_RK_1() result(assertion)
180 3 : use Constants_mod, only: IK, RK
181 : implicit none
182 : logical :: assertion
183 : integer(IK) :: i
184 : integer(IK) , parameter :: vecLen = 3_IK
185 : real(RK) , parameter :: Vector1_ref(vecLen) = [(real(+i,RK),i=1,vecLen)]
186 : real(RK) , parameter :: Vector2_ref(vecLen) = [(real(-i,RK),i=1,vecLen)]
187 : real(RK) :: Vector1(vecLen)
188 : real(RK) :: Vector2(vecLen)
189 3 : Vector1 = Vector1_ref
190 3 : Vector2 = Vector2_ref
191 12 : call swap_RK(Vector1,Vector2)
192 21 : assertion = all(Vector1==Vector2_ref) .and. all(Vector2==Vector1_ref)
193 3 : if (Test%isDebugMode .and. .not. assertion) then
194 : ! LCOV_EXCL_START
195 : write(Test%outputUnit,"(*(g0,:,' '))")
196 : write(Test%outputUnit,"(*(g0,:,' '))") "Vector1_ref =", Vector1_ref
197 : write(Test%outputUnit,"(*(g0,:,' '))") "Vector2 =", Vector2
198 : write(Test%outputUnit,"(*(g0,:,' '))") "Vector2_ref =", Vector2_ref
199 : write(Test%outputUnit,"(*(g0,:,' '))") "Vector1 =", Vector1
200 : write(Test%outputUnit,"(*(g0,:,' '))")
201 : end if
202 : ! LCOV_EXCL_STOP
203 3 : end function test_swap_RK_1
204 :
205 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
206 :
207 3 : function test_swap_SPR_1() result(assertion)
208 3 : use Constants_mod, only: IK, SPR
209 : implicit none
210 : logical :: assertion
211 : integer(IK) :: i
212 : integer(IK) , parameter :: vecLen = 3_IK
213 : real(SPR) , parameter :: Vector1_ref(vecLen) = [(real(+i,SPR),i=1,vecLen)]
214 : real(SPR) , parameter :: Vector2_ref(vecLen) = [(real(-i,SPR),i=1,vecLen)]
215 : real(SPR) :: Vector1(vecLen)
216 : real(SPR) :: Vector2(vecLen)
217 3 : Vector1 = Vector1_ref
218 3 : Vector2 = Vector2_ref
219 12 : call swap_SPR(Vector1,Vector2)
220 21 : assertion = all(Vector1==Vector2_ref) .and. all(Vector2==Vector1_ref)
221 3 : if (Test%isDebugMode .and. .not. assertion) then
222 : ! LCOV_EXCL_START
223 : write(Test%outputUnit,"(*(g0,:,' '))")
224 : write(Test%outputUnit,"(*(g0,:,' '))") "Vector1_ref =", Vector1_ref
225 : write(Test%outputUnit,"(*(g0,:,' '))") "Vector2 =", Vector2
226 : write(Test%outputUnit,"(*(g0,:,' '))") "Vector2_ref =", Vector2_ref
227 : write(Test%outputUnit,"(*(g0,:,' '))") "Vector1 =", Vector1
228 : write(Test%outputUnit,"(*(g0,:,' '))")
229 : end if
230 : ! LCOV_EXCL_STOP
231 3 : end function test_swap_SPR_1
232 :
233 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
234 :
235 3 : function test_swap_DPR_1() result(assertion)
236 3 : use Constants_mod, only: IK, DPR
237 : implicit none
238 : logical :: assertion
239 : integer(IK) :: i
240 : integer(IK) , parameter :: vecLen = 3_IK
241 : real(DPR) , parameter :: Vector1_ref(vecLen) = [(real(+i,DPR),i=1,vecLen)]
242 : real(DPR) , parameter :: Vector2_ref(vecLen) = [(real(-i,DPR),i=1,vecLen)]
243 : real(DPR) :: Vector1(vecLen)
244 : real(DPR) :: Vector2(vecLen)
245 3 : Vector1 = Vector1_ref
246 3 : Vector2 = Vector2_ref
247 12 : call swap_DPR(Vector1,Vector2)
248 21 : assertion = all(Vector1==Vector2_ref) .and. all(Vector2==Vector1_ref)
249 3 : if (Test%isDebugMode .and. .not. assertion) then
250 : ! LCOV_EXCL_START
251 : write(Test%outputUnit,"(*(g0,:,' '))")
252 : write(Test%outputUnit,"(*(g0,:,' '))") "Vector1_ref =", Vector1_ref
253 : write(Test%outputUnit,"(*(g0,:,' '))") "Vector2 =", Vector2
254 : write(Test%outputUnit,"(*(g0,:,' '))") "Vector2_ref =", Vector2_ref
255 : write(Test%outputUnit,"(*(g0,:,' '))") "Vector1 =", Vector1
256 : write(Test%outputUnit,"(*(g0,:,' '))")
257 : end if
258 : ! LCOV_EXCL_STOP
259 3 : end function test_swap_DPR_1
260 :
261 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
262 :
263 3 : function test_swap_CK_1() result(assertion)
264 3 : use Constants_mod, only: IK, RK, CK
265 : implicit none
266 : logical :: assertion
267 : integer(IK) :: i
268 : integer(IK) , parameter :: vecLen = 3_IK
269 : complex(CK) , parameter :: Vector1_ref(vecLen) = [(cmplx(+i,0.,RK),i=1,vecLen)]
270 : complex(CK) , parameter :: Vector2_ref(vecLen) = [(cmplx(-i,0.,RK),i=1,vecLen)]
271 : complex(CK) :: Vector1(vecLen)
272 : complex(CK) :: Vector2(vecLen)
273 3 : Vector1 = Vector1_ref
274 3 : Vector2 = Vector2_ref
275 12 : call swap_CK(Vector1,Vector2)
276 21 : assertion = all(Vector1==Vector2_ref) .and. all(Vector2==Vector1_ref)
277 3 : if (Test%isDebugMode .and. .not. assertion) then
278 : ! LCOV_EXCL_START
279 : write(Test%outputUnit,"(*(g0,:,' '))")
280 : write(Test%outputUnit,"(*(g0,:,' '))") "Vector1_ref =", Vector1_ref
281 : write(Test%outputUnit,"(*(g0,:,' '))") "Vector2 =", Vector2
282 : write(Test%outputUnit,"(*(g0,:,' '))") "Vector2_ref =", Vector2_ref
283 : write(Test%outputUnit,"(*(g0,:,' '))") "Vector1 =", Vector1
284 : write(Test%outputUnit,"(*(g0,:,' '))")
285 : end if
286 : ! LCOV_EXCL_STOP
287 3 : end function test_swap_CK_1
288 :
289 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
290 :
291 3 : function test_swap_SPC_1() result(assertion)
292 3 : use Constants_mod, only: IK, SPR, SPC
293 : implicit none
294 : logical :: assertion
295 : integer(IK) :: i
296 : integer(IK) , parameter :: vecLen = 3_IK
297 : complex(SPC), parameter :: Vector1_ref(vecLen) = [(cmplx(+i,0.,SPR),i=1,vecLen)]
298 : complex(SPC), parameter :: Vector2_ref(vecLen) = [(cmplx(-i,0.,SPR),i=1,vecLen)]
299 : complex(SPC) :: Vector1(vecLen)
300 : complex(SPC) :: Vector2(vecLen)
301 3 : Vector1 = Vector1_ref
302 3 : Vector2 = Vector2_ref
303 12 : call swap_SPC(Vector1,Vector2)
304 21 : assertion = all(Vector1==Vector2_ref) .and. all(Vector2==Vector1_ref)
305 3 : if (Test%isDebugMode .and. .not. assertion) then
306 : ! LCOV_EXCL_START
307 : write(Test%outputUnit,"(*(g0,:,' '))")
308 : write(Test%outputUnit,"(*(g0,:,' '))") "Vector1_ref =", Vector1_ref
309 : write(Test%outputUnit,"(*(g0,:,' '))") "Vector2 =", Vector2
310 : write(Test%outputUnit,"(*(g0,:,' '))") "Vector2_ref =", Vector2_ref
311 : write(Test%outputUnit,"(*(g0,:,' '))") "Vector1 =", Vector1
312 : write(Test%outputUnit,"(*(g0,:,' '))")
313 : end if
314 : ! LCOV_EXCL_STOP
315 3 : end function test_swap_SPC_1
316 :
317 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
318 :
319 3 : function test_swap_DPC_1() result(assertion)
320 3 : use Constants_mod, only: IK, DPR, DPC
321 : implicit none
322 : logical :: assertion
323 : integer(IK) :: i
324 : integer(IK) , parameter :: vecLen = 3_IK
325 : complex(DPC), parameter :: Vector1_ref(vecLen) = [(cmplx(+i,0.,DPR),i=1,vecLen)]
326 : complex(DPC), parameter :: Vector2_ref(vecLen) = [(cmplx(-i,0.,DPR),i=1,vecLen)]
327 : complex(DPC) :: Vector1(vecLen)
328 : complex(DPC) :: Vector2(vecLen)
329 3 : Vector1 = Vector1_ref
330 3 : Vector2 = Vector2_ref
331 12 : call swap_DPC(Vector1,Vector2)
332 21 : assertion = all(Vector1==Vector2_ref) .and. all(Vector2==Vector1_ref)
333 3 : if (Test%isDebugMode .and. .not. assertion) then
334 : ! LCOV_EXCL_START
335 : write(Test%outputUnit,"(*(g0,:,' '))")
336 : write(Test%outputUnit,"(*(g0,:,' '))") "Vector1_ref =", Vector1_ref
337 : write(Test%outputUnit,"(*(g0,:,' '))") "Vector2 =", Vector2
338 : write(Test%outputUnit,"(*(g0,:,' '))") "Vector2_ref =", Vector2_ref
339 : write(Test%outputUnit,"(*(g0,:,' '))") "Vector1 =", Vector1
340 : write(Test%outputUnit,"(*(g0,:,' '))")
341 : end if
342 : ! LCOV_EXCL_STOP
343 3 : end function test_swap_DPC_1
344 :
345 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
346 :
347 3 : function test_masked_swap_SPR_1() result(assertion)
348 3 : use Constants_mod, only: IK, SPR
349 : implicit none
350 : logical :: assertion
351 : logical , parameter :: mask = .true.
352 : real(SPR) , parameter :: scalar1_ref = 1._SPR
353 : real(SPR) , parameter :: scalar2_ref = 2._SPR
354 3 : real(SPR) :: scalar1
355 3 : real(SPR) :: scalar2
356 3 : scalar1 = scalar1_ref
357 3 : scalar2 = scalar2_ref
358 3 : call masked_swap_SPR(scalar1,scalar2,mask)
359 3 : assertion = scalar1==scalar2_ref .and. scalar2==scalar1_ref
360 3 : if (Test%isDebugMode .and. .not. assertion) then
361 : ! LCOV_EXCL_START
362 : write(Test%outputUnit,"(*(g0,:,' '))")
363 : write(Test%outputUnit,"(*(g0,:,' '))") "scalar1_ref =", scalar1_ref
364 : write(Test%outputUnit,"(*(g0,:,' '))") "scalar2 =", scalar2
365 : write(Test%outputUnit,"(*(g0,:,' '))") "scalar2_ref =", scalar2_ref
366 : write(Test%outputUnit,"(*(g0,:,' '))") "scalar1 =", scalar1
367 : write(Test%outputUnit,"(*(g0,:,' '))")
368 : end if
369 : ! LCOV_EXCL_STOP
370 3 : end function test_masked_swap_SPR_1
371 :
372 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
373 :
374 3 : function test_masked_swap_SPR_2() result(assertion)
375 3 : use Constants_mod, only: IK, SPR
376 : implicit none
377 : logical :: assertion
378 : logical , parameter :: mask = .false.
379 : real(SPR) , parameter :: scalar1_ref = 1._SPR
380 : real(SPR) , parameter :: scalar2_ref = 2._SPR
381 3 : real(SPR) :: scalar1
382 3 : real(SPR) :: scalar2
383 3 : scalar1 = scalar1_ref
384 3 : scalar2 = scalar2_ref
385 3 : call masked_swap_SPR(scalar1,scalar2,mask)
386 3 : assertion = scalar1==scalar1_ref .and. scalar2==scalar2_ref
387 3 : if (Test%isDebugMode .and. .not. assertion) then
388 : ! LCOV_EXCL_START
389 : write(Test%outputUnit,"(*(g0,:,' '))")
390 : write(Test%outputUnit,"(*(g0,:,' '))") "scalar1_ref =", scalar1_ref
391 : write(Test%outputUnit,"(*(g0,:,' '))") "scalar1 =", scalar1
392 : write(Test%outputUnit,"(*(g0,:,' '))") "scalar2_ref =", scalar2_ref
393 : write(Test%outputUnit,"(*(g0,:,' '))") "scalar2 =", scalar2
394 : write(Test%outputUnit,"(*(g0,:,' '))")
395 : end if
396 : ! LCOV_EXCL_STOP
397 3 : end function test_masked_swap_SPR_2
398 :
399 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
400 :
401 3 : function test_masked_swap_SPRV_1() result(assertion)
402 3 : use Constants_mod, only: IK, SPR
403 : implicit none
404 : logical :: assertion
405 : integer(IK) :: i
406 : integer(IK) , parameter :: vecLen = 3_IK
407 : logical , parameter :: Mask(vecLen) = [ .false., .true., .false. ]
408 : real(SPR) , parameter :: Vector2_ref(vecLen) = [(real(-i,SPR),i=1,vecLen)]
409 : real(SPR) , parameter :: Vector1_ref(vecLen) = [(real(+i,SPR),i=1,vecLen)]
410 : real(SPR) :: Vector1(vecLen)
411 : real(SPR) :: Vector2(vecLen)
412 3 : Vector1 = Vector1_ref
413 3 : Vector2 = Vector2_ref
414 3 : call masked_swap_SPRV(Vector1,Vector2,Mask)
415 21 : assertion = all((Vector1==Vector2_ref) .eqv. Mask) .and. all( (Vector2==Vector1_ref) .eqv. Mask)
416 3 : if (Test%isDebugMode .and. .not. assertion) then
417 : ! LCOV_EXCL_START
418 : write(Test%outputUnit,"(*(g0,:,' '))")
419 : write(Test%outputUnit,"(*(g0,:,' '))") "Mask =", Mask
420 : write(Test%outputUnit,"(*(g0,:,' '))") "Vector1_ref =", Vector1_ref
421 : write(Test%outputUnit,"(*(g0,:,' '))") "Vector2 =", Vector2
422 : write(Test%outputUnit,"(*(g0,:,' '))") "Vector2_ref =", Vector2_ref
423 : write(Test%outputUnit,"(*(g0,:,' '))") "Vector1 =", Vector1
424 : write(Test%outputUnit,"(*(g0,:,' '))")
425 : end if
426 : ! LCOV_EXCL_STOP
427 3 : end function test_masked_swap_SPRV_1
428 :
429 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
430 :
431 3 : function test_masked_swap_SPRM_1() result(assertion)
432 3 : use Constants_mod, only: IK, SPR
433 : implicit none
434 : logical :: assertion
435 : integer(IK) :: i
436 : integer(IK) , parameter :: nrow = 3_IK
437 : integer(IK) , parameter :: ncol = 2_IK
438 : logical , parameter :: Mask(nrow,ncol) = reshape([ .false., .true., .false., .false., .true., .false. ], shape = shape(Mask))
439 : real(SPR) , parameter :: Matrix2_ref(nrow,ncol) = reshape([(real(-i,SPR),i=1,nrow*ncol)], shape = shape(Mask))
440 : real(SPR) , parameter :: Matrix1_ref(nrow,ncol) = reshape([(real(+i,SPR),i=1,nrow*ncol)], shape = shape(Mask))
441 : real(SPR) :: Matrix1(nrow,ncol)
442 : real(SPR) :: Matrix2(nrow,ncol)
443 3 : Matrix1 = Matrix1_ref
444 3 : Matrix2 = Matrix2_ref
445 3 : call masked_swap_SPRM(Matrix1,Matrix2,mask)
446 51 : assertion = all((Matrix1==Matrix2_ref) .eqv. mask) .and. all( (Matrix2==Matrix1_ref) .eqv. mask)
447 3 : if (Test%isDebugMode .and. .not. assertion) then
448 : ! LCOV_EXCL_START
449 : write(Test%outputUnit,"(*(g0,:,' '))")
450 : write(Test%outputUnit,"(*(g0,:,' '))") "Mask =", Mask
451 : write(Test%outputUnit,"(*(g0,:,' '))") "Matrix1_ref =", Matrix1_ref
452 : write(Test%outputUnit,"(*(g0,:,' '))") "Matrix2 =", Matrix2
453 : write(Test%outputUnit,"(*(g0,:,' '))") "Matrix2_ref =", Matrix2_ref
454 : write(Test%outputUnit,"(*(g0,:,' '))") "Matrix1 =", Matrix1
455 : write(Test%outputUnit,"(*(g0,:,' '))")
456 : end if
457 : ! LCOV_EXCL_STOP
458 3 : end function test_masked_swap_SPRM_1
459 :
460 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
461 :
462 3 : function test_arth_IK_1() result(assertion)
463 3 : use Constants_mod, only: IK
464 : implicit none
465 : logical :: assertion
466 : integer(IK) :: i
467 : integer(IK) , parameter :: first = 13, increment = 5, n = 10
468 : integer(IK) , parameter :: ArithmeticProgression_ref(n) = [(i*increment+first,i=0,n-1)]
469 : integer(IK), allocatable :: ArithmeticProgression(:)
470 3 : ArithmeticProgression = arth_IK(first = first,increment = increment, n = n)
471 33 : assertion = all(ArithmeticProgression == ArithmeticProgression_ref)
472 3 : if (Test%isDebugMode .and. .not. assertion) then
473 : ! LCOV_EXCL_START
474 : write(Test%outputUnit,"(*(g0,:,' '))")
475 : write(Test%outputUnit,"(*(g0,:,' '))") "ArithmeticProgression_ref =", ArithmeticProgression_ref
476 : write(Test%outputUnit,"(*(g0,:,' '))") "ArithmeticProgression =", ArithmeticProgression
477 : write(Test%outputUnit,"(*(g0,:,' '))")
478 : end if
479 : ! LCOV_EXCL_STOP
480 3 : end function test_arth_IK_1
481 :
482 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
483 :
484 3 : function test_arth_RK_1() result(assertion)
485 3 : use Constants_mod, only: IK, RK
486 : implicit none
487 : logical :: assertion
488 : integer(IK) :: i
489 : real(RK) , parameter :: first = 13._RK, increment = 5._RK
490 : integer(IK) , parameter :: n = 10_IK
491 : real(RK) , parameter :: ArithmeticProgression_ref(n) = [(real(i*increment+first,RK),i=0,n-1)]
492 : real(RK) , allocatable :: ArithmeticProgression(:)
493 3 : ArithmeticProgression = arth_RK(first = first, increment = increment, n = n)
494 33 : assertion = all(ArithmeticProgression == ArithmeticProgression_ref)
495 3 : if (Test%isDebugMode .and. .not. assertion) then
496 : ! LCOV_EXCL_START
497 : write(Test%outputUnit,"(*(g0,:,' '))")
498 : write(Test%outputUnit,"(*(g0,:,' '))") "ArithmeticProgression_ref =", ArithmeticProgression_ref
499 : write(Test%outputUnit,"(*(g0,:,' '))") "ArithmeticProgression =", ArithmeticProgression
500 : write(Test%outputUnit,"(*(g0,:,' '))")
501 : end if
502 : ! LCOV_EXCL_STOP
503 3 : end function test_arth_RK_1
504 :
505 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
506 :
507 3 : function test_arth_RK_2() result(assertion)
508 3 : use Constants_mod, only: IK, RK
509 : implicit none
510 : logical :: assertion
511 : integer(IK) :: i
512 : real(RK) , parameter :: first = 13._RK, increment = 5._RK
513 : integer(IK) , parameter :: n = 20_IK
514 : real(RK) , parameter :: ArithmeticProgression_ref(n) = [(real(i*increment+first,RK),i=0,n-1)]
515 : real(RK) , allocatable :: ArithmeticProgression(:)
516 3 : ArithmeticProgression = arth_RK(first = first, increment = increment, n = n)
517 63 : assertion = all(ArithmeticProgression == ArithmeticProgression_ref)
518 3 : if (Test%isDebugMode .and. .not. assertion) then
519 : ! LCOV_EXCL_START
520 : write(Test%outputUnit,"(*(g0,:,' '))")
521 : write(Test%outputUnit,"(*(g0,:,' '))") "ArithmeticProgression_ref =", ArithmeticProgression_ref
522 : write(Test%outputUnit,"(*(g0,:,' '))") "ArithmeticProgression =", ArithmeticProgression
523 : write(Test%outputUnit,"(*(g0,:,' '))")
524 : end if
525 : ! LCOV_EXCL_STOP
526 3 : end function test_arth_RK_2
527 :
528 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
529 :
530 3 : function test_zroots_unity_1() result(assertion)
531 3 : use Constants_mod, only: IK, RK, CK
532 : implicit none
533 : logical :: assertion
534 : complex(CK) , allocatable :: Zroots(:)
535 : integer(IK) , parameter :: n = 5, nn = 10
536 : real(RK) , parameter :: tolerance = 1.e-10_RK
537 : complex(CK) , parameter :: Zroots_ref(nn) = [ (1.000000000000000_RK, 0.000000000000000_RK) &
538 : , (0.3090169943749475_RK, 0.9510565162951535_RK) &
539 : , (-0.8090169943749473_RK, 0.5877852522924732_RK) &
540 : , (-0.8090169943749476_RK, -0.5877852522924730_RK) &
541 : , (0.3090169943749472_RK, -0.9510565162951536_RK) &
542 : , (1.000000000000000_RK, -0.2775557561562891E-15_RK) &
543 : , (0.3090169943749478_RK, 0.9510565162951534_RK) &
544 : , (-0.8090169943749472_RK, 0.5877852522924734_RK) &
545 : , (-0.8090169943749477_RK, -0.5877852522924728_RK) &
546 : , (0.3090169943749470_RK, -0.9510565162951536_RK) ]
547 3 : Zroots = zroots_unity(n,nn)
548 63 : assertion = all(abs(real(Zroots) - real(Zroots_ref)) < tolerance) .and. all(abs(aimag(Zroots) - aimag(Zroots_ref)) < tolerance)
549 3 : if (Test%isDebugMode .and. .not. assertion) then
550 : ! LCOV_EXCL_START
551 : write(Test%outputUnit,"(*(g0.16,' '))")
552 : write(Test%outputUnit,"(*(g0.16,' '))") "Zroots_ref =", Zroots_ref
553 : write(Test%outputUnit,"(*(g0.16,' '))") "Zroots =", Zroots
554 : write(Test%outputUnit,"(*(g0.16,' '))")
555 : end if
556 : ! LCOV_EXCL_STOP
557 3 : end function test_zroots_unity_1
558 :
559 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
560 :
561 3 : function test_copyArray_IK_1() result(assertion)
562 3 : use Constants_mod, only: IK
563 : implicit none
564 : logical :: assertion
565 : integer(IK) :: i
566 : integer(IK) , parameter :: numCopied_ref = 5, numNotCopied_ref = 0
567 : integer(IK) , parameter :: lenSource = 5, lenDestin = 10
568 : integer(IK) , parameter :: Source(lenSource) = [(int(i,IK),i=1,lenSource)]
569 : integer(IK) , parameter :: Destin_ref(lenDestin) = [1_IK, 2_IK, 3_IK, 4_IK, 5_IK, 0_IK, 0_IK, 0_IK, 0_IK, 0_IK]
570 : integer(IK) :: Destin(lenDestin)
571 : integer(IK) :: numCopied, numNotCopied
572 3 : Destin = 0_IK
573 3 : call copyArray_IK(Source = Source, Destination = Destin, numCopied = numCopied, numNotCopied = numNotCopied)
574 33 : assertion = all(Destin == Destin_ref) .and. (numCopied == numCopied_ref) .and. (numNotCopied == numNotCopied_ref)
575 3 : if (Test%isDebugMode .and. .not. assertion) then
576 : ! LCOV_EXCL_START
577 : write(Test%outputUnit,"(*(g0,:,' '))")
578 : write(Test%outputUnit,"(*(g0,:,' '))") "numNotCopied_ref =", numNotCopied_ref
579 : write(Test%outputUnit,"(*(g0,:,' '))") "numNotCopied =", numNotCopied
580 : write(Test%outputUnit,"(*(g0,:,' '))") "numCopied_ref =", numCopied_ref
581 : write(Test%outputUnit,"(*(g0,:,' '))") "numCopied =", numCopied
582 : write(Test%outputUnit,"(*(g0,:,' '))") "Destin_ref =", Destin_ref
583 : write(Test%outputUnit,"(*(g0,:,' '))") "Source =", Source
584 : write(Test%outputUnit,"(*(g0,:,' '))") "Destin =", Destin
585 : write(Test%outputUnit,"(*(g0,:,' '))")
586 : end if
587 : ! LCOV_EXCL_STOP
588 3 : end function test_copyArray_IK_1
589 :
590 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
591 :
592 3 : function test_copyArray_IK_2() result(assertion)
593 3 : use Constants_mod, only: IK
594 : implicit none
595 : logical :: assertion
596 : integer(IK) :: i
597 : integer(IK) , parameter :: numCopied_ref = 5, numNotCopied_ref = 5
598 : integer(IK) , parameter :: lenSource = 10, lenDestin = 5
599 : integer(IK) , parameter :: Source(lenSource) = [(int(i,IK),i=1,lenSource)]
600 : integer(IK) , parameter :: Destin_ref(lenDestin) = [1_IK, 2_IK, 3_IK, 4_IK, 5_IK]
601 : integer(IK) :: Destin(lenDestin)
602 : integer(IK) :: numCopied, numNotCopied
603 3 : Destin = 0_IK
604 3 : call copyArray_IK(Source = Source, Destination = Destin, numCopied = numCopied, numNotCopied = numNotCopied)
605 18 : assertion = all(Destin == Destin_ref) .and. (numCopied == numCopied_ref) .and. (numNotCopied == numNotCopied_ref)
606 3 : if (Test%isDebugMode .and. .not. assertion) then
607 : ! LCOV_EXCL_START
608 : write(Test%outputUnit,"(*(g0,:,' '))")
609 : write(Test%outputUnit,"(*(g0,:,' '))") "numNotCopied_ref =", numNotCopied_ref
610 : write(Test%outputUnit,"(*(g0,:,' '))") "numNotCopied =", numNotCopied
611 : write(Test%outputUnit,"(*(g0,:,' '))") "numCopied_ref =", numCopied_ref
612 : write(Test%outputUnit,"(*(g0,:,' '))") "numCopied =", numCopied
613 : write(Test%outputUnit,"(*(g0,:,' '))") "Destin_ref =", Destin_ref
614 : write(Test%outputUnit,"(*(g0,:,' '))") "Source =", Source
615 : write(Test%outputUnit,"(*(g0,:,' '))") "Destin =", Destin
616 : write(Test%outputUnit,"(*(g0,:,' '))")
617 : end if
618 : ! LCOV_EXCL_STOP
619 3 : end function test_copyArray_IK_2
620 :
621 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
622 :
623 3 : function test_copyArray_RK_1() result(assertion)
624 3 : use Constants_mod, only: IK, RK
625 : implicit none
626 : logical :: assertion
627 : integer(IK) :: i
628 : integer(IK) , parameter :: numCopied_ref = 5, numNotCopied_ref = 0
629 : integer(IK) , parameter :: lenSource = 5, lenDestin = 10
630 : real(RK) , parameter :: Source(lenSource) = [(real(i,RK),i=1,lenSource)]
631 : real(RK) , parameter :: Destin_ref(lenDestin) = [1._RK, 2._RK, 3._RK, 4._RK, 5._RK, 0._RK, 0._RK, 0._RK, 0._RK, 0._RK]
632 : real(RK) :: Destin(lenDestin)
633 : integer(IK) :: numCopied, numNotCopied
634 3 : Destin = 0._RK
635 3 : call copyArray_RK(Source = Source, Destination = Destin, numCopied = numCopied, numNotCopied = numNotCopied)
636 33 : assertion = all(Destin == Destin_ref) .and. (numCopied == numCopied_ref) .and. (numNotCopied == numNotCopied_ref)
637 3 : if (Test%isDebugMode .and. .not. assertion) then
638 : ! LCOV_EXCL_START
639 : write(Test%outputUnit,"(*(g0,:,' '))")
640 : write(Test%outputUnit,"(*(g0,:,' '))") "numNotCopied_ref =", numNotCopied_ref
641 : write(Test%outputUnit,"(*(g0,:,' '))") "numNotCopied =", numNotCopied
642 : write(Test%outputUnit,"(*(g0,:,' '))") "numCopied_ref =", numCopied_ref
643 : write(Test%outputUnit,"(*(g0,:,' '))") "numCopied =", numCopied
644 : write(Test%outputUnit,"(*(g0,:,' '))") "Destin_ref =", Destin_ref
645 : write(Test%outputUnit,"(*(g0,:,' '))") "Source =", Source
646 : write(Test%outputUnit,"(*(g0,:,' '))") "Destin =", Destin
647 : write(Test%outputUnit,"(*(g0,:,' '))")
648 : end if
649 : ! LCOV_EXCL_STOP
650 3 : end function test_copyArray_RK_1
651 :
652 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
653 :
654 3 : function test_copyArray_RK_2() result(assertion)
655 3 : use Constants_mod, only: IK, RK
656 : implicit none
657 : logical :: assertion
658 : integer(IK) :: i
659 : integer(IK) , parameter :: numCopied_ref = 5, numNotCopied_ref = 5
660 : integer(IK) , parameter :: lenSource = 10, lenDestin = 5
661 : real(RK) , parameter :: Source(lenSource) = [(real(i,RK),i=1,lenSource)]
662 : real(RK) , parameter :: Destin_ref(lenDestin) = [1._RK, 2._RK, 3._RK, 4._RK, 5._RK]
663 : real(RK) :: Destin(lenDestin)
664 : integer(IK) :: numCopied, numNotCopied
665 3 : Destin = 0._RK
666 3 : call copyArray_RK(Source = Source, Destination = Destin, numCopied = numCopied, numNotCopied = numNotCopied)
667 18 : assertion = all(Destin == Destin_ref) .and. (numCopied == numCopied_ref) .and. (numNotCopied == numNotCopied_ref)
668 3 : if (Test%isDebugMode .and. .not. assertion) then
669 : ! LCOV_EXCL_START
670 : write(Test%outputUnit,"(*(g0,:,' '))")
671 : write(Test%outputUnit,"(*(g0,:,' '))") "numNotCopied_ref =", numNotCopied_ref
672 : write(Test%outputUnit,"(*(g0,:,' '))") "numNotCopied =", numNotCopied
673 : write(Test%outputUnit,"(*(g0,:,' '))") "numCopied_ref =", numCopied_ref
674 : write(Test%outputUnit,"(*(g0,:,' '))") "numCopied =", numCopied
675 : write(Test%outputUnit,"(*(g0,:,' '))") "Destin_ref =", Destin_ref
676 : write(Test%outputUnit,"(*(g0,:,' '))") "Source =", Source
677 : write(Test%outputUnit,"(*(g0,:,' '))") "Destin =", Destin
678 : write(Test%outputUnit,"(*(g0,:,' '))")
679 : end if
680 : ! LCOV_EXCL_STOP
681 3 : end function test_copyArray_RK_2
682 :
683 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
684 :
685 3 : function test_resizeVector_RK_1() result(assertion)
686 3 : use Constants_mod, only: IK, RK
687 : implicit none
688 : logical :: assertion
689 : integer(IK) :: i
690 : integer(IK) , parameter :: lenVector = 5, lenVectorNew = 10
691 : real(RK) , parameter :: Vector_ref(lenVector) = [(real(i,RK),i=1,lenVector)]
692 : real(RK) , allocatable :: Vector(:)
693 18 : Vector = Vector_ref
694 3 : call resizeVector_RK(Vector = Vector, from = lenVector, to = lenVectorNew)
695 18 : assertion = size(Vector) == lenVectorNew .and. all(Vector(1:lenVector) == Vector_ref(1:lenVector))
696 3 : if (Test%isDebugMode .and. .not. assertion) then
697 : ! LCOV_EXCL_START
698 : write(Test%outputUnit,"(*(g0,:,' '))")
699 : write(Test%outputUnit,"(*(g0,:,' '))") "Vector_ref =", Vector_ref
700 : write(Test%outputUnit,"(*(g0,:,' '))") "lenVectorNew =", lenVectorNew
701 : write(Test%outputUnit,"(*(g0,:,' '))") "size(Vector) =", size(Vector)
702 : write(Test%outputUnit,"(*(g0,:,' '))")
703 : end if
704 : ! LCOV_EXCL_STOP
705 3 : end function test_resizeVector_RK_1
706 :
707 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
708 :
709 3 : function test_findUnique_1() result(assertion)
710 :
711 3 : use Constants_mod, only: RK, IK
712 :
713 : implicit none
714 : logical :: assertion
715 : integer(IK), parameter :: VECTOR(*) = [1,2,1,3,5,5,2]
716 : integer(IK), parameter :: LEN_VECTOR = size(VECTOR)
717 : integer(IK), parameter :: UNIQUE_VALUE(*) = [1,2,3,5]
718 : integer(IK), parameter :: UNIQUE_COUNT(*) = [2,2,1,2]
719 : integer(IK), allocatable :: UniqueValue(:), UniqueCount(:), ZeroLenVector(:)
720 : integer(IK) :: lenUnique
721 :
722 : call findUnique ( lenVector = LEN_VECTOR &
723 : , Vector = VECTOR &
724 : , UniqueValue = UniqueValue &
725 : , UniqueCount = UniqueCount &
726 : , lenUnique = lenUnique &
727 3 : )
728 :
729 27 : assertion = all(UniqueValue==UNIQUE_VALUE) .and. all(UniqueCount==UNIQUE_COUNT)
730 :
731 : ! test with empty input vector
732 :
733 3 : allocate(ZeroLenVector(0))
734 : call findUnique ( lenVector = 0_IK & ! LCOV_EXCL_LINE
735 : , Vector = ZeroLenVector & ! LCOV_EXCL_LINE
736 : , UniqueValue = UniqueValue & ! LCOV_EXCL_LINE
737 : , UniqueCount = UniqueCount & ! LCOV_EXCL_LINE
738 : , lenUnique = lenUnique & ! LCOV_EXCL_LINE
739 3 : )
740 :
741 3 : if (Test%isDebugMode .and. .not. assertion) then
742 : ! LCOV_EXCL_START
743 : write(Test%outputUnit,"(*(g0,:,', '))")
744 : write(Test%outputUnit,"(*(g0,:,', '))") "VECTOR", VECTOR
745 : write(Test%outputUnit,"(*(g0,:,', '))")
746 : write(Test%outputUnit,"(*(g0,:,', '))") "UNIQUE_VALUE", UNIQUE_VALUE
747 : write(Test%outputUnit,"(*(g0,:,', '))") "UniqueValue ", UniqueValue
748 : write(Test%outputUnit,"(*(g0,:,', '))")
749 : write(Test%outputUnit,"(*(g0,:,', '))") "UNIQUE_COUNT", UNIQUE_COUNT
750 : write(Test%outputUnit,"(*(g0,:,', '))") "UniqueCount ", UniqueCount
751 : write(Test%outputUnit,"(*(g0,:,', '))")
752 : write(Test%outputUnit,"(*(g0,:,', '))") "lenUnique", lenUnique
753 : write(Test%outputUnit,"(*(g0,:,', '))")
754 : write(Test%outputUnit,"(*(g0,:,', '))")
755 : write(Test%outputUnit,"(*(g0,:,', '))")
756 : write(Test%outputUnit,"(*(g0,:,', '))") "VECTOR", ZeroLenVector
757 : write(Test%outputUnit,"(*(g0,:,', '))")
758 : write(Test%outputUnit,"(*(g0,:,', '))") "UniqueValue ", UniqueValue
759 : write(Test%outputUnit,"(*(g0,:,', '))")
760 : write(Test%outputUnit,"(*(g0,:,', '))") "UniqueCount ", UniqueCount
761 : write(Test%outputUnit,"(*(g0,:,', '))")
762 : write(Test%outputUnit,"(*(g0,:,', '))") "lenUnique", lenUnique
763 : write(Test%outputUnit,"(*(g0,:,', '))")
764 : end if
765 : ! LCOV_EXCL_STOP
766 :
767 3 : end function test_findUnique_1
768 :
769 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
770 :
771 : end module Test_Misc_mod ! LCOV_EXCL_LINE
|