summaryrefslogtreecommitdiff
path: root/tests/stdatomic_test.cpp
diff options
context:
space:
mode:
authorHans Boehm <hboehm@google.com>2017-04-04 17:34:59 -0700
committerHans Boehm <hboehm@google.com>2017-04-05 16:12:09 -0700
commit590a410d29978016b2a01e8fbedaf17154743b76 (patch)
tree355cfb11f9076d6952567120ea9b57598248fe2d /tests/stdatomic_test.cpp
parent0a40cb3872ad0382893c0ae2ff72a783054bd0d2 (diff)
Fix compare_exchange_weak tests to allow spurious failure
Test: Ran bionic unit tests on angler. Bug: 36869788 Change-Id: Ic1e0e4e409ac719d5b426391a771b4858a6149ee
Diffstat (limited to 'tests/stdatomic_test.cpp')
-rw-r--r--tests/stdatomic_test.cpp24
1 files changed, 19 insertions, 5 deletions
diff --git a/tests/stdatomic_test.cpp b/tests/stdatomic_test.cpp
index 22e0c5016..389b2511d 100644
--- a/tests/stdatomic_test.cpp
+++ b/tests/stdatomic_test.cpp
@@ -116,20 +116,34 @@ TEST(stdatomic, atomic_compare_exchange) {
atomic_store(&i, 123);
expected = 123;
- ASSERT_TRUE(atomic_compare_exchange_strong_explicit(&i, &expected, 456, memory_order_relaxed, memory_order_relaxed));
- ASSERT_FALSE(atomic_compare_exchange_strong_explicit(&i, &expected, 456, memory_order_relaxed, memory_order_relaxed));
+ ASSERT_TRUE(atomic_compare_exchange_strong_explicit(&i, &expected, 456, memory_order_relaxed,
+ memory_order_relaxed));
+ ASSERT_FALSE(atomic_compare_exchange_strong_explicit(&i, &expected, 456, memory_order_relaxed,
+ memory_order_relaxed));
ASSERT_EQ(456, expected);
atomic_store(&i, 123);
expected = 123;
- ASSERT_TRUE(atomic_compare_exchange_weak(&i, &expected, 456));
+ int iter_count = 0;
+ do {
+ ++iter_count;
+ ASSERT_LT(iter_count, 100); // Arbitrary limit on spurious compare_exchange failures.
+ ASSERT_EQ(expected, 123);
+ } while(!atomic_compare_exchange_weak(&i, &expected, 456));
ASSERT_FALSE(atomic_compare_exchange_weak(&i, &expected, 456));
ASSERT_EQ(456, expected);
atomic_store(&i, 123);
expected = 123;
- ASSERT_TRUE(atomic_compare_exchange_weak_explicit(&i, &expected, 456, memory_order_relaxed, memory_order_relaxed));
- ASSERT_FALSE(atomic_compare_exchange_weak_explicit(&i, &expected, 456, memory_order_relaxed, memory_order_relaxed));
+ iter_count = 0;
+ do {
+ ++iter_count;
+ ASSERT_LT(iter_count, 100);
+ ASSERT_EQ(expected, 123);
+ } while(!atomic_compare_exchange_weak_explicit(&i, &expected, 456, memory_order_relaxed,
+ memory_order_relaxed));
+ ASSERT_FALSE(atomic_compare_exchange_weak_explicit(&i, &expected, 456, memory_order_relaxed,
+ memory_order_relaxed));
ASSERT_EQ(456, expected);
}