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.
This commit is contained in:
Jonathan Wakely 2020-06-12 10:33:37 +01:00
parent 17412a74c5
commit e784f98027
3 changed files with 10 additions and 12 deletions

View file

@ -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;
}

View file

@ -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) );
}

View file

@ -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) );
}