diff --git a/test/fortran/test_util_stride.f90 b/test/fortran/test_util_stride.f90
new file mode 100644
index 0000000000000000000000000000000000000000..e432da4c4b9a23afa38b144e0c72445573f9269d
--- /dev/null
+++ b/test/fortran/test_util_stride.f90
@@ -0,0 +1,66 @@
+! 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