From 0f57ee7a57094dfaf6d7d9276683ca6ec6e8cf34 Mon Sep 17 00:00:00 2001
From: Yen-Chen Chen <yen-chen.chen@tum.de>
Date: Mon, 17 Feb 2025 10:17:11 +0000
Subject: [PATCH] Improve C++ test (icon-libraries/libfortran-support!110)

## What is the bug
The C++ test code for `mo_util_stride` uses the experimental standard library.
The filesystem standard library is automatically linked in C++17
## How do you fix it
Replace with the standard library


Merged-by: Pradipta Samanta <samanta@dkrz.de>
Changelog: bugfix
---
 cmake/gtest_helper.cmake     |  2 +-
 test/c/ctest_util_stride.cpp | 20 ++++++++++++++------
 2 files changed, 15 insertions(+), 7 deletions(-)

diff --git a/cmake/gtest_helper.cmake b/cmake/gtest_helper.cmake
index 073eb13..00d555a 100644
--- a/cmake/gtest_helper.cmake
+++ b/cmake/gtest_helper.cmake
@@ -31,7 +31,7 @@ function(fs_add_c_test test_name)
   add_executable("CTest_${test_name}" ${ARG_SOURCES})
   target_link_libraries(
     "CTest_${test_name}" PRIVATE fortran-support::fortran-support
-                                 GTest::gtest_main stdc++fs)
+                                 GTest::gtest_main)
   add_test(NAME "CTest_${test_name}" COMMAND "CTest_${test_name}" ${ARG_ARGS})
   set_property(TEST "CTest_${test_name}" PROPERTY LABELS C)
   set_target_properties("CTest_${test_name}"
diff --git a/test/c/ctest_util_stride.cpp b/test/c/ctest_util_stride.cpp
index 1e7e6a0..2c75e8a 100644
--- a/test/c/ctest_util_stride.cpp
+++ b/test/c/ctest_util_stride.cpp
@@ -10,7 +10,7 @@
 // ---------------------------------------------------------------
 
 #include <gtest/gtest.h>
-#include <experimental/random>
+#include <random>
 
 #include <util_stride.h>
 
@@ -47,13 +47,17 @@ TEST_F(UtilStrideTest, CanGet1DStride) {
 }
 
 TEST_F(UtilStrideTest, CanGet1DStride2) {
+    std::random_device rd;
+    std::mt19937 gen(rd());
+    std::uniform_int_distribution<int> dist(0, 499);
+
     int stride;
 
     float f_array[1000];
     double d_array[1000];
 
-    int p1 = std::experimental::randint(0, 499);
-    int p2 = std::experimental::randint(500, 999);
+    int p1 = dist(gen);
+    int p2 = 500 + dist(gen);
 
     util_stride_1d(&stride, sizeof(float), &f_array[p1], &f_array[p2]);
     EXPECT_EQ(stride, p2 - p1);
@@ -78,14 +82,18 @@ TEST_F(UtilStrideTest, CanGet2DStride) {
 }
 
 TEST_F(UtilStrideTest, CanGet2DStride2) {
+    std::random_device rd;
+    std::mt19937 gen(rd());
+    std::uniform_int_distribution<int> dist(0, 499);
+
     int stride[2];
 
     float f_array[1000];
     double d_array[1000];
 
-    int p1 = std::experimental::randint(0, 499);
-    int p2 = std::experimental::randint(500, 999);
-    int p3 = std::experimental::randint(500, 999);
+    int p1 = dist(gen);
+    int p2 = 500 + dist(gen);
+    int p3 = 500 + dist(gen);
 
     util_stride_2d(&stride[0], sizeof(float), &f_array[p1], &f_array[p2],
                    &f_array[p3]);
-- 
GitLab