Skip to content

Commit 7ddcbcc

Browse files
committed
Add equivalent pack to testsuite
1 parent 4a4ac22 commit 7ddcbcc

File tree

1 file changed

+75
-1
lines changed

1 file changed

+75
-1
lines changed

src/tests/array/test_logicalloc.f90

Lines changed: 75 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,12 @@ subroutine collect_logicalloc(testsuite)
2222
new_unittest("trueloc-all", test_trueloc_all), &
2323
new_unittest("trueloc-where", test_trueloc_where), &
2424
new_unittest("trueloc-merge", test_trueloc_merge), &
25+
new_unittest("trueloc-pack", test_trueloc_pack), &
2526
new_unittest("falseloc-empty", test_falseloc_empty), &
2627
new_unittest("falseloc-all", test_falseloc_all), &
2728
new_unittest("falseloc-where", test_falseloc_where), &
28-
new_unittest("falseloc-merge", test_falseloc_merge) &
29+
new_unittest("falseloc-merge", test_falseloc_merge), &
30+
new_unittest("falseloc-pack", test_falseloc_pack) &
2931
]
3032
end subroutine collect_logicalloc
3133

@@ -136,6 +138,42 @@ subroutine test_trueloc_merge(error)
136138
call report("trueloc", tl, "merge", tm)
137139
end subroutine test_trueloc_merge
138140

141+
subroutine test_trueloc_pack(error)
142+
!> Error handling
143+
type(error_type), allocatable, intent(out) :: error
144+
145+
integer :: ndim
146+
real, allocatable :: avec(:), bvec(:), cvec(:)
147+
real(dp) :: tl, tp
148+
149+
tl = 0.0_dp
150+
tp = 0.0_dp
151+
do ndim = 100, 12000, 100
152+
allocate(avec(ndim))
153+
154+
call random_number(avec)
155+
avec(:) = avec - 0.5
156+
157+
bvec = avec
158+
tl = tl - timing()
159+
bvec(trueloc(bvec > 0)) = 0.0
160+
tl = tl + timing()
161+
162+
cvec = avec
163+
tp = tp - timing()
164+
block
165+
integer :: i
166+
cvec(pack([(i, i=1, size(cvec))], cvec > 0)) = 0.0
167+
end block
168+
tp = tp + timing()
169+
170+
call check(error, all(bvec == cvec))
171+
deallocate(avec, bvec, cvec)
172+
if (allocated(error)) exit
173+
end do
174+
call report("trueloc", tl, "pack", tp)
175+
end subroutine test_trueloc_pack
176+
139177
subroutine test_falseloc_empty(error)
140178
!> Error handling
141179
type(error_type), allocatable, intent(out) :: error
@@ -243,6 +281,42 @@ subroutine test_falseloc_merge(error)
243281
call report("falseloc", tl, "merge", tm)
244282
end subroutine test_falseloc_merge
245283

284+
subroutine test_falseloc_pack(error)
285+
!> Error handling
286+
type(error_type), allocatable, intent(out) :: error
287+
288+
integer :: ndim
289+
real, allocatable :: avec(:), bvec(:), cvec(:)
290+
real(dp) :: tl, tp
291+
292+
tl = 0.0_dp
293+
tp = 0.0_dp
294+
do ndim = 100, 12000, 100
295+
allocate(avec(ndim))
296+
297+
call random_number(avec)
298+
avec(:) = avec - 0.5
299+
300+
bvec = avec
301+
tl = tl - timing()
302+
bvec(falseloc(bvec > 0)) = 0.0
303+
tl = tl + timing()
304+
305+
cvec = avec
306+
tp = tp - timing()
307+
block
308+
integer :: i
309+
cvec(pack([(i, i=1, size(cvec))], cvec < 0)) = 0.0
310+
end block
311+
tp = tp + timing()
312+
313+
call check(error, all(bvec == cvec))
314+
deallocate(avec, bvec, cvec)
315+
if (allocated(error)) exit
316+
end do
317+
call report("falseloc", tl, "pack", tp)
318+
end subroutine test_falseloc_pack
319+
246320
subroutine report(l1, t1, l2, t2)
247321
character(len=*), intent(in) :: l1, l2
248322
real(dp), intent(in) :: t1, t2

0 commit comments

Comments
 (0)