Commit 14d4e7bc by Jonathan Wakely Committed by Jonathan Wakely

libstdc++: Fix atomic<long double> tests (PR 91153, PR 93224)

These tests fail with AIX double double. Use different floating point
values that behave less surprisingly.

libstdc++-v3/ChangeLog:

	PR libstdc++/91153
	PR target/93224
	* testsuite/29_atomics/atomic_float/1.cc: Use different values
	for tests.
	* testsuite/29_atomics/atomic_ref/float.cc: Likewise.

(cherry picked from commit c6f431bba531bac3212b66069cf0f9718edf0132)
parent 41b504e9
...@@ -453,27 +453,28 @@ test03() ...@@ -453,27 +453,28 @@ test03()
ok = a1.compare_exchange_strong(expected, 3.2l, mo); ok = a1.compare_exchange_strong(expected, 3.2l, mo);
VERIFY( !ok && a1.load() == 2.56l && expected == 2.56l ); VERIFY( !ok && a1.load() == 2.56l && expected == 2.56l );
f0 = a0.fetch_add(1.2l); a1 = a0 = 0.5l;
VERIFY( f0 == 12.8l ); f0 = a0.fetch_add(0.25l);
VERIFY( a0 == 14.0l ); VERIFY( f0 == 0.5l );
f1 = a1.fetch_add(2.4l, mo); VERIFY( a0 == 0.75l );
VERIFY( f1 == 2.56l ); f1 = a1.fetch_add(0.25l, mo);
VERIFY( a1 == 4.96l ); VERIFY( f1 == 0.5l );
VERIFY( a1 == 0.75l );
f0 = a0.fetch_sub(1.2l);
VERIFY( f0 == 14.0l ); f0 = a0.fetch_sub(0.5l);
VERIFY( a0 == 12.8l ); VERIFY( f0 == 0.75l );
f1 = a1.fetch_sub(3.5l, mo); VERIFY( a0 == 0.25l );
VERIFY( f1 == 4.96l ); f1 = a1.fetch_sub(0.5l, mo);
VERIFY( a1 == 1.46l ); VERIFY( f1 == 0.75l );
VERIFY( a1 == 0.25l );
f0 = a0 += 1.2l;
VERIFY( f0 == 14.0l ); f0 = a0 += 0.75l;
VERIFY( a0 == 14.0l ); VERIFY( f0 == 1.0l );
VERIFY( a0 == 1.0l );
f0 = a0 -= 0.8l;
VERIFY( f0 == 13.2l ); f0 = a0 -= 0.5l;
VERIFY( a0 == 13.2l ); VERIFY( f0 == 0.5l );
VERIFY( a0 == 0.5l );
} }
// Repeat for volatile std::atomic<long double> // Repeat for volatile std::atomic<long double>
...@@ -540,27 +541,28 @@ test03() ...@@ -540,27 +541,28 @@ test03()
ok = a1.compare_exchange_strong(expected, 3.2l, mo); ok = a1.compare_exchange_strong(expected, 3.2l, mo);
VERIFY( !ok && a1.load() == 2.56l && expected == 2.56l ); VERIFY( !ok && a1.load() == 2.56l && expected == 2.56l );
f0 = a0.fetch_add(1.2l); a1 = a0 = 0.5l;
VERIFY( f0 == 12.8l ); f0 = a0.fetch_add(0.25l);
VERIFY( a0 == 14.0l ); VERIFY( f0 == 0.5l );
f1 = a1.fetch_add(2.4l, mo); VERIFY( a0 == 0.75l );
VERIFY( f1 == 2.56l ); f1 = a1.fetch_add(0.25l, mo);
VERIFY( a1 == 4.96l ); VERIFY( f1 == 0.5l );
VERIFY( a1 == 0.75l );
f0 = a0.fetch_sub(1.2l);
VERIFY( f0 == 14.0l ); f0 = a0.fetch_sub(0.5l);
VERIFY( a0 == 12.8l ); VERIFY( f0 == 0.75l );
f1 = a1.fetch_sub(3.5l, mo); VERIFY( a0 == 0.25l );
VERIFY( f1 == 4.96l ); f1 = a1.fetch_sub(0.5l, mo);
VERIFY( a1 == 1.46l ); VERIFY( f1 == 0.75l );
VERIFY( a1 == 0.25l );
f0 = a0 += 1.2l;
VERIFY( f0 == 14.0l ); f0 = a0 += 0.75l;
VERIFY( a0 == 14.0l ); VERIFY( f0 == 1.0l );
VERIFY( a0 == 1.0l );
f0 = a0 -= 0.8l;
VERIFY( f0 == 13.2l ); f0 = a0 -= 0.5l;
VERIFY( a0 == 13.2l ); VERIFY( f0 == 0.5l );
VERIFY( a0 == 0.5l );
} }
} }
......
...@@ -267,31 +267,32 @@ test03() ...@@ -267,31 +267,32 @@ test03()
ok = a.compare_exchange_strong(expected, 6.4l, mo); ok = a.compare_exchange_strong(expected, 6.4l, mo);
VERIFY( !ok && a.load() == 204.8l && expected == 204.8l ); VERIFY( !ok && a.load() == 204.8l && expected == 204.8l );
v = a.fetch_add(3.2l); a = 0.5l;
VERIFY( v == 204.8l ); v = a.fetch_add(0.5l);
VERIFY( a == 208.0l ); VERIFY( v == 0.5l );
v = a.fetch_add(-8.5l, mo); VERIFY( a == 1.0l );
VERIFY( v == 208.0l ); v = a.fetch_add(-0.2l, mo);
VERIFY( a == 199.5l ); VERIFY( v == 1.0l );
VERIFY( a == 0.8l );
v = a.fetch_sub(109.5l);
VERIFY( v == 199.5l ); v = a.fetch_sub(0.4l);
VERIFY( a == 90.0l ); VERIFY( v == 0.8l );
v = a.fetch_sub(2, mo); VERIFY( a == 0.4l );
VERIFY( v == 90.0l ); v = a.fetch_sub(-0.4l, mo);
VERIFY( a == 88.0l ); VERIFY( v == 0.4l );
VERIFY( a == 0.8l );
v = a += 5.0l;
VERIFY( v == 93.0l ); v = a += .8l;
VERIFY( a == 93.0l ); VERIFY( v == 1.6l );
VERIFY( a == 1.6l );
v = a -= 6.5l;
VERIFY( v == 86.5l ); v = a -= 0.6l;
VERIFY( a == 86.5l ); VERIFY( v == 1.0l );
VERIFY( a == 1.0l );
} }
if constexpr (std::atomic_ref<long double>::is_always_lock_free) if constexpr (std::atomic_ref<long double>::is_always_lock_free)
VERIFY( value == 86.5l ); VERIFY( value == 1.0l );
} }
void void
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment