| //===----------------------------------------------------------------------===// |
| // |
| // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. |
| // See https://llvm.org/LICENSE.txt for license information. |
| // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception |
| // |
| //===----------------------------------------------------------------------===// |
| |
| // <atomic> |
| |
| // Test nested types |
| |
| // template <class T> |
| // class atomic |
| // { |
| // public: |
| // typedef T value_type; |
| // }; |
| |
| #include <atomic> |
| #include <type_traits> |
| |
| #include <thread> |
| #include <chrono> |
| #if TEST_STD_VER >= 20 |
| # include <memory> |
| #endif |
| |
| #include "test_macros.h" |
| |
| template <class A> |
| void |
| test_atomic() |
| { |
| A a; |
| #if TEST_STD_VER >= 17 |
| static_assert((std::is_same<typename A::value_type, decltype(a.load())>::value), ""); |
| #endif |
| } |
| |
| template <class T> |
| void |
| test() |
| { |
| using A = std::atomic<T>; |
| #if TEST_STD_VER >= 17 |
| static_assert((std::is_same<typename A::value_type, T>::value), ""); |
| #endif |
| test_atomic<A>(); |
| } |
| |
| struct TriviallyCopyable { |
| int i_; |
| }; |
| |
| int main(int, char**) |
| { |
| test<bool> (); |
| test<char> (); |
| test<signed char> (); |
| test<unsigned char> (); |
| test<short> (); |
| test<unsigned short> (); |
| test<int> (); |
| test<unsigned int> (); |
| test<long> (); |
| test<unsigned long> (); |
| test<long long> (); |
| test<unsigned long long> (); |
| test<char16_t> (); |
| test<char32_t> (); |
| test<wchar_t> (); |
| |
| test<int_least8_t> (); |
| test<uint_least8_t> (); |
| test<int_least16_t> (); |
| test<uint_least16_t> (); |
| test<int_least32_t> (); |
| test<uint_least32_t> (); |
| test<int_least64_t> (); |
| test<uint_least64_t> (); |
| |
| test<int_fast8_t> (); |
| test<uint_fast8_t> (); |
| test<int_fast16_t> (); |
| test<uint_fast16_t> (); |
| test<int_fast32_t> (); |
| test<uint_fast32_t> (); |
| test<int_fast64_t> (); |
| test<uint_fast64_t> (); |
| |
| test< int8_t> (); |
| test<uint8_t> (); |
| test< int16_t> (); |
| test<uint16_t> (); |
| test< int32_t> (); |
| test<uint32_t> (); |
| test< int64_t> (); |
| test<uint64_t> (); |
| |
| test<intptr_t> (); |
| test<uintptr_t> (); |
| test<size_t> (); |
| test<ptrdiff_t> (); |
| test<intmax_t> (); |
| test<uintmax_t> (); |
| |
| test<uintmax_t> (); |
| test<uintmax_t> (); |
| |
| test<TriviallyCopyable>(); |
| test<std::thread::id>(); |
| test<std::chrono::nanoseconds>(); |
| test<float>(); |
| |
| #if TEST_STD_VER >= 20 |
| test_atomic<std::atomic_signed_lock_free>(); |
| test_atomic<std::atomic_unsigned_lock_free>(); |
| /* |
| test<std::shared_ptr<int>>(); |
| */ |
| #endif |
| |
| return 0; |
| } |