Home | History | Annotate | Download | only in util.smartptr.shared.atomic
      1 //===----------------------------------------------------------------------===//
      2 //
      3 //                     The LLVM Compiler Infrastructure
      4 //
      5 // This file is dual licensed under the MIT and the University of Illinois Open
      6 // Source Licenses. See LICENSE.TXT for details.
      7 //
      8 //===----------------------------------------------------------------------===//
      9 //
     10 // UNSUPPORTED: libcpp-has-no-threads
     11 //
     12 // This test uses new symbols that were not defined in the libc++ shipped on
     13 // darwin11 and darwin12:
     14 // XFAIL: availability=macosx10.7
     15 // XFAIL: availability=macosx10.8
     16 
     17 // <memory>
     18 
     19 // shared_ptr
     20 
     21 // template <class T>
     22 // bool
     23 // atomic_compare_exchange_strong_explicit(shared_ptr<T>* p, shared_ptr<T>* v,
     24 //                                         shared_ptr<T> w, memory_order success,
     25 //                                         memory_order failure);
     26 
     27 // UNSUPPORTED: c++98, c++03
     28 
     29 #include <memory>
     30 #include <cassert>
     31 
     32 #include "test_macros.h"
     33 
     34 int main()
     35 {
     36     {
     37         std::shared_ptr<int> p(new int(4));
     38         std::shared_ptr<int> v(new int(3));
     39         std::shared_ptr<int> w(new int(2));
     40         bool b = std::atomic_compare_exchange_strong_explicit(&p, &v, w,
     41                                                               std::memory_order_seq_cst,
     42                                                               std::memory_order_seq_cst);
     43         assert(b == false);
     44         assert(*p == 4);
     45         assert(*v == 4);
     46         assert(*w == 2);
     47     }
     48     {
     49         std::shared_ptr<int> p(new int(4));
     50         std::shared_ptr<int> v = p;
     51         std::shared_ptr<int> w(new int(2));
     52         bool b = std::atomic_compare_exchange_strong_explicit(&p, &v, w,
     53                                                               std::memory_order_seq_cst,
     54                                                               std::memory_order_seq_cst);
     55         assert(b == true);
     56         assert(*p == 2);
     57         assert(*v == 4);
     58         assert(*w == 2);
     59     }
     60 }
     61