The tests for clear() and test_and_set() didn't cover all cases.

        * testsuite/29_atomics/atomic_flag/clear/1.cc: Also test clear()
        when the value is currently set.
        * testsuite/29_atomics/atomic_flag/test_and_set/explicit.cc:
        Actually check the return value.
        * testsuite/29_atomics/atomic_flag/test_and_set/implicit.cc:
        Likewise.

Tested powerpc64le-linux and x86_64-linux, committed to master.

commit e784f98027dbd5cdc46712751dcfba8278eb7fa9
Author: Jonathan Wakely <[email protected]>
Date:   Fri Jun 12 10:33:37 2020 +0100

    libstdc++: Improve tests for std::atomic_flag
    
    The tests for clear() and test_and_set() didn't cover all cases.
    
            * testsuite/29_atomics/atomic_flag/clear/1.cc: Also test clear()
            when the value is currently set.
            * testsuite/29_atomics/atomic_flag/test_and_set/explicit.cc:
            Actually check the return value.
            * testsuite/29_atomics/atomic_flag/test_and_set/implicit.cc:
            Likewise.

diff --git a/libstdc++-v3/testsuite/29_atomics/atomic_flag/clear/1.cc 
b/libstdc++-v3/testsuite/29_atomics/atomic_flag/clear/1.cc
index 30d9075e372..ed5d11a5292 100644
--- a/libstdc++-v3/testsuite/29_atomics/atomic_flag/clear/1.cc
+++ b/libstdc++-v3/testsuite/29_atomics/atomic_flag/clear/1.cc
@@ -25,9 +25,9 @@ int main()
 {
   std::atomic_flag f = ATOMIC_FLAG_INIT;
 
-  f.clear(); // set to false
+  f.clear();                           // set to false
+  VERIFY( false == f.test_and_set() ); // return true
+  VERIFY( true == f.test_and_set() );  // return true
+  f.clear();                           // set to false
   VERIFY( false == f.test_and_set() ); // return previous false, set to true
-  VERIFY( true == f.test_and_set() ); // return true
-
-  return 0;
 }
diff --git 
a/libstdc++-v3/testsuite/29_atomics/atomic_flag/test_and_set/explicit.cc 
b/libstdc++-v3/testsuite/29_atomics/atomic_flag/test_and_set/explicit.cc
index 5d6dbcc98a2..1934854d7f7 100644
--- a/libstdc++-v3/testsuite/29_atomics/atomic_flag/test_and_set/explicit.cc
+++ b/libstdc++-v3/testsuite/29_atomics/atomic_flag/test_and_set/explicit.cc
@@ -19,14 +19,13 @@
 // <http://www.gnu.org/licenses/>.
 
 #include <atomic>
+#include <testsuite_hooks.h>
 
 int main()
 {
   using namespace std;
   atomic_flag af = ATOMIC_FLAG_INIT;
 
-  if (!af.test_and_set(memory_order_acquire))
-    af.clear(memory_order_release);
-
-  return 0;
+  VERIFY( ! af.test_and_set(memory_order_acquire) );
+  VERIFY( af.test_and_set(memory_order_acquire) );
 }
diff --git 
a/libstdc++-v3/testsuite/29_atomics/atomic_flag/test_and_set/implicit.cc 
b/libstdc++-v3/testsuite/29_atomics/atomic_flag/test_and_set/implicit.cc
index 8e1284cd299..1934854d7f7 100644
--- a/libstdc++-v3/testsuite/29_atomics/atomic_flag/test_and_set/implicit.cc
+++ b/libstdc++-v3/testsuite/29_atomics/atomic_flag/test_and_set/implicit.cc
@@ -19,14 +19,13 @@
 // <http://www.gnu.org/licenses/>.
 
 #include <atomic>
+#include <testsuite_hooks.h>
 
 int main()
 {
   using namespace std;
   atomic_flag af = ATOMIC_FLAG_INIT;
 
-  if (!af.test_and_set())
-    af.clear();
-
-  return 0;
+  VERIFY( ! af.test_and_set(memory_order_acquire) );
+  VERIFY( af.test_and_set(memory_order_acquire) );
 }

Reply via email to