~ubuntu-branches/ubuntu/trusty/libc++/trusty

« back to all changes in this revision

Viewing changes to libcxx/test/atomics/atomics.types.operations/atomics.types.operations.req/atomic_fetch_or_explicit.pass.cpp

  • Committer: Package Import Robot
  • Author(s): Andrej Belym
  • Date: 2012-06-02 19:25:47 UTC
  • Revision ID: package-import@ubuntu.com-20120602192547-b6ta950a8ckc9um2
Tags: upstream-1.0~svn160132
ImportĀ upstreamĀ versionĀ 1.0~svn160132

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
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
// <atomic>
 
11
 
 
12
// template <class Integral>
 
13
//     Integral
 
14
//     atomic_fetch_or_explicit(volatile atomic<Integral>* obj, Integral op);
 
15
// 
 
16
// template <class Integral>
 
17
//     Integral
 
18
//     atomic_fetch_or_explicit(atomic<Integral>* obj, Integral op);
 
19
 
 
20
#include <atomic>
 
21
#include <type_traits>
 
22
#include <cassert>
 
23
 
 
24
template <class T>
 
25
void
 
26
test()
 
27
{
 
28
    {
 
29
        typedef std::atomic<T> A;
 
30
        A t;
 
31
        std::atomic_init(&t, T(1));
 
32
        assert(std::atomic_fetch_or_explicit(&t, T(2),
 
33
               std::memory_order_seq_cst) == T(1));
 
34
        assert(t == T(3));
 
35
    }
 
36
    {
 
37
        typedef std::atomic<T> A;
 
38
        volatile A t;
 
39
        std::atomic_init(&t, T(3));
 
40
        assert(std::atomic_fetch_or_explicit(&t, T(2),
 
41
               std::memory_order_seq_cst) == T(3));
 
42
        assert(t == T(3));
 
43
    }
 
44
}
 
45
 
 
46
int main()
 
47
{
 
48
    test<char>();
 
49
    test<signed char>();
 
50
    test<unsigned char>();
 
51
    test<short>();
 
52
    test<unsigned short>();
 
53
    test<int>();
 
54
    test<unsigned int>();
 
55
    test<long>();
 
56
    test<unsigned long>();
 
57
    test<long long>();
 
58
    test<unsigned long long>();
 
59
    test<wchar_t>();
 
60
#ifndef _LIBCPP_HAS_NO_UNICODE_CHARS
 
61
    test<char16_t>();
 
62
    test<char32_t>();
 
63
#endif  // _LIBCPP_HAS_NO_UNICODE_CHARS
 
64
}