From: Ivan Maidanski Date: Tue, 2 Oct 2012 09:25:01 +0000 (+0400) Subject: Test double_compare_and_swap in test_atomic X-Git-Tag: libatomic_ops-7_4_0~108 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=3acfd853578e81707cae75e3c1561d53a2d847c7;p=libatomic_ops Test double_compare_and_swap in test_atomic * tests/test_atomic_include.template (test_atomicXX): Define old_w and new_w local variables (only if AO_HAVE_double_compare_and_swapXX); add tests for AO_double_compare_and_swapXX if available. --- diff --git a/tests/test_atomic_include.template b/tests/test_atomic_include.template index 10fb949..e63fd9f 100644 --- a/tests/test_atomic_include.template +++ b/tests/test_atomic_include.template @@ -26,11 +26,16 @@ void test_atomicXX(void) AO_TS_t z = AO_TS_INITIALIZER; # endif # if defined(AO_HAVE_compare_and_swap_doubleXX) \ - || defined(AO_HAVE_compare_double_and_swap_doubleXX) + || defined(AO_HAVE_compare_double_and_swap_doubleXX) \ + || defined(AO_HAVE_double_compare_and_swapXX) AO_double_t w; w.AO_val1 = 0; w.AO_val2 = 0; # endif +# if defined(AO_HAVE_double_compare_and_swapXX) + AO_double_t old_w; + AO_double_t new_w; +# endif # if defined(AO_HAVE_nopXX) AO_nopXX(); @@ -235,4 +240,45 @@ void test_atomicXX(void) # else MISSING(AO_compare_and_swap_double); # endif +# if defined(AO_HAVE_double_compare_and_swapXX) + old_w.AO_val1 = 4116; + old_w.AO_val2 = 2121; + new_w.AO_val1 = 8537; + new_w.AO_val2 = 6410; + TA_assert(!AO_double_compare_and_swapXX(&w, old_w, new_w)); + TA_assert(w.AO_val1 == 0 && w.AO_val2 == 0); + TA_assert(AO_double_compare_and_swapXX(&w, w, new_w)); + TA_assert(w.AO_val1 == 8537 && w.AO_val2 == 6410); + old_w.AO_val1 = new_w.AO_val1; + old_w.AO_val2 = 29; + new_w.AO_val1 = 820; + new_w.AO_val2 = 5917; + TA_assert(!AO_double_compare_and_swapXX(&w, old_w, new_w)); + TA_assert(w.AO_val1 == 8537 && w.AO_val2 == 6410); + old_w.AO_val1 = 11; + old_w.AO_val2 = 6410; + new_w.AO_val1 = 3552; + new_w.AO_val2 = 1746; + TA_assert(!AO_double_compare_and_swapXX(&w, old_w, new_w)); + TA_assert(w.AO_val1 == 8537 && w.AO_val2 == 6410); + old_w.AO_val1 = old_w.AO_val2; + old_w.AO_val2 = 8537; + new_w.AO_val1 = 4116; + new_w.AO_val2 = 2121; + TA_assert(!AO_double_compare_and_swapXX(&w, old_w, new_w)); + TA_assert(w.AO_val1 == 8537 && w.AO_val2 == 6410); + old_w.AO_val1 = old_w.AO_val2; + old_w.AO_val2 = 6410; + new_w.AO_val1 = 1; + TA_assert(AO_double_compare_and_swapXX(&w, old_w, new_w)); + TA_assert(w.AO_val1 == 1 && w.AO_val2 == 2121); + old_w.AO_val1 = new_w.AO_val1; + old_w.AO_val2 = w.AO_val2; + new_w.AO_val1--; + new_w.AO_val2 = 0; + TA_assert(AO_double_compare_and_swapXX(&w, old_w, new_w)); + TA_assert(w.AO_val1 == 0 && w.AO_val2 == 0); +# else + MISSING(AO_double_compare_and_swap); +# endif }