From 4c5668f10b632980833bcac2775b25761a718e08 Mon Sep 17 00:00:00 2001
From: Wolfgang Bangerth <bangerth@colostate.edu>
Date: Tue, 23 Jul 2024 16:23:55 -0600
Subject: [PATCH] Adjust tests.

---
 tests/base/lazy_01.cc     | 27 ++++++++++++++++++++-------
 tests/base/lazy_01.output |  5 ++++-
 tests/base/lazy_02.cc     | 10 +++++-----
 tests/base/lazy_02.output |  3 ++-
 4 files changed, 31 insertions(+), 14 deletions(-)

diff --git a/tests/base/lazy_01.cc b/tests/base/lazy_01.cc
index 8644999974..9dfe429f62 100644
--- a/tests/base/lazy_01.cc
+++ b/tests/base/lazy_01.cc
@@ -30,6 +30,8 @@ main()
   initlog();
 
   {
+    deallog << "Part 1:" << std::endl;
+
     Lazy<int> lazy_integer;
     deallog << "lazy_integer.has_value() = " << lazy_integer.has_value()
             << std::endl;
@@ -38,7 +40,15 @@ main()
       deallog << "[initializing object]" << std::endl;
       return 42;
     });
-    deallog << "lazy_integer.has_value() = " << lazy_integer.has_value()
+
+    // Lazy computes the result on a different task, which may be on a
+    // different thread. To avoid producing unreliable output, make
+    // sure we don't say
+    //   deallog << "lazy_integer.has_value() = " << lazy_integer.has_value()
+    // but the following, where the order of computation and output are
+    // clear and well defined:
+    deallog << "lazy_integer.has_value() = " +
+                 std::to_string(lazy_integer.has_value())
             << std::endl;
     deallog << "lazy_integer.value() = " << lazy_integer.value() << std::endl;
 
@@ -47,17 +57,20 @@ main()
       return -1;
     });
 
-    deallog << "lazy_integer.value() = " << lazy_integer.value() << std::endl;
+    deallog << "lazy_integer.value() = " + std::to_string(lazy_integer.value())
+            << std::endl;
   }
 
   {
+    deallog << "Part 2:" << std::endl;
+
     Lazy<int> lazy_integer;
 
-    deallog << "lazy_integer.value() = "
-            << lazy_integer.value_or_initialize([&]() {
-                 deallog << "... [initializing object] ... ";
-                 return 42;
-               })
+    deallog << "lazy_integer.value() = " +
+                 std::to_string(lazy_integer.value_or_initialize([&]() {
+                   deallog << "... [initializing object] ... " << std::endl;
+                   return 42;
+                 }))
             << std::endl;
   }
 
diff --git a/tests/base/lazy_01.output b/tests/base/lazy_01.output
index 728e7260e7..55b6532134 100644
--- a/tests/base/lazy_01.output
+++ b/tests/base/lazy_01.output
@@ -1,8 +1,11 @@
 
+DEAL::Part 1:
 DEAL::lazy_integer.has_value() = 0
 DEAL::[initializing object]
 DEAL::lazy_integer.has_value() = 1
 DEAL::lazy_integer.value() = 42
 DEAL::lazy_integer.value() = 42
-DEAL::lazy_integer.value() = ... [initializing object] ... 42
+DEAL::Part 2:
+DEAL::... [initializing object] ... 
+DEAL::lazy_integer.value() = 42
 DEAL::OK!
diff --git a/tests/base/lazy_02.cc b/tests/base/lazy_02.cc
index 4f9aa77a59..b54d119dd7 100644
--- a/tests/base/lazy_02.cc
+++ b/tests/base/lazy_02.cc
@@ -71,11 +71,11 @@ main()
 
   deallog << "... [ reset ] ... " << std::endl;
   lazy_integer_4.reset();
-  deallog << "value_or_initialize: "
-          << lazy_integer_4.value_or_initialize([&]() {
-               deallog << "... [ initialized ] ... ";
-               return 45;
-             })
+  deallog << "value_or_initialize: " +
+               std::to_string(lazy_integer_4.value_or_initialize([&]() {
+                 deallog << "... [ initialized ] ... " << std::endl;
+                 return 45;
+               }))
           << std::endl;
 
   deallog << "OK!" << std::endl;
diff --git a/tests/base/lazy_02.output b/tests/base/lazy_02.output
index 54697dcbb5..a1bba381b2 100644
--- a/tests/base/lazy_02.output
+++ b/tests/base/lazy_02.output
@@ -11,5 +11,6 @@ DEAL::... [ reset ] ...
 DEAL::... [ initialized ] ... 
 DEAL::Reset: 43
 DEAL::... [ reset ] ... 
-DEAL::value_or_initialize: ... [ initialized ] ... 45
+DEAL::... [ initialized ] ... 
+DEAL::value_or_initialize: 45
 DEAL::OK!
-- 
2.39.5