Skip to content
Snippets Groups Projects

Draft: add test for util_stride

Open Jonas Jucker requested to merge test_util_stride into master
+ 66
0
! ICON
!
! ---------------------------------------------------------------
! Copyright (C) 2004-2024, DWD, MPI-M, DKRZ, KIT, ETH, MeteoSwiss
! Contact information: icon-model.org
!
! See AUTHORS.TXT for a list of authors
! See LICENSES/ for license information
! SPDX-License-Identifier: BSD-3-Clause
! ---------------------------------------------------------------
MODULE test_mo_util_stride
USE FORTUTF
USE ISO_C_BINDING, ONLY: c_int, c_ptr, c_loc, c_size_t
USE mo_util_stride
CONTAINS
SUBROUTINE TEST_util_stride_1d
INTEGER(c_int) :: f_out, elemsize
REAL, DIMENSION(10), TARGET :: array
TYPE(c_ptr) :: p1, p2
CALL TAG_TEST("util_stride_1d")
array = [1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0]
elemsize = SIZEOF(array(1))
p1 = c_loc(array(1))
p2 = c_loc(array(2))
CALL util_stride_1d(f_out, elemsize, p1, p2)
CALL ASSERT_EQUAL(f_out, 1)
END SUBROUTINE TEST_util_stride_1d
SUBROUTINE TEST_util_stride_2d
INTEGER(c_int) :: f_out(2), elemsize
REAL, DIMENSION(10, 10), TARGET :: array
TYPE(c_ptr) :: p1, p2, p3
CALL TAG_TEST("util_stride_2d")
array = RESHAPE([(i, i=1,100)], [10, 10])
elemsize = SIZEOF(array(1, 1))
p1 = c_loc(array(1, 1))
p2 = c_loc(array(2, 1))
p3 = c_loc(array(1, 2))
CALL util_stride_2d(f_out, elemsize, p1, p2, p3)
CALL ASSERT_EQUAL(f_out(1) , 1)
CALL ASSERT_EQUAL(f_out(2), 10)
END SUBROUTINE TEST_util_stride_2d
SUBROUTINE TEST_util_get_ptrdiff
INTEGER(c_size_t) :: s
REAL, DIMENSION(1, 10), TARGET :: array
TYPE(c_ptr) :: p1, p2
CALL TAG_TEST("util_get_ptrdiff")
array = RESHAPE([1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0], [1, 10])
p1 = c_loc(array(1, 1))
p2 = c_loc(array(1, 10))
print *, TRANSFER(p1, 0_c_size_t), TRANSFER(p2, 0_c_size_t)
s = util_get_ptrdiff(TRANSFER(p1, 0_c_size_t), TRANSFER(p2, 0_c_size_t))
CALL ASSERT_EQUAL(s , 14 * SIZEOF(array(1, 1)))
END SUBROUTINE TEST_util_get_ptrdiff
END MODULE test_mo_util_stride
Loading