diff options
author | Hans Boehm <hboehm@google.com> | 2017-04-04 17:34:59 -0700 |
---|---|---|
committer | Hans Boehm <hboehm@google.com> | 2017-04-05 16:12:09 -0700 |
commit | 590a410d29978016b2a01e8fbedaf17154743b76 (patch) | |
tree | 355cfb11f9076d6952567120ea9b57598248fe2d /tests/stdatomic_test.cpp | |
parent | 0a40cb3872ad0382893c0ae2ff72a783054bd0d2 (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.cpp | 24 |
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); } |