thrust / dependencies /libcudacxx /libcxx /test /std /utilities /function.objects /unord.hash /integral.pass.cpp
| //===----------------------------------------------------------------------===// | |
| // | |
| // 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 | |
| // | |
| //===----------------------------------------------------------------------===// | |
| // <functional> | |
| // template <class T> | |
| // struct hash | |
| // : public unary_function<T, size_t> | |
| // { | |
| // size_t operator()(T val) const; | |
| // }; | |
| template <class T> | |
| void | |
| test() | |
| { | |
| typedef std::hash<T> H; | |
| static_assert((std::is_same<typename H::argument_type, T>::value), "" ); | |
| static_assert((std::is_same<typename H::result_type, std::size_t>::value), "" ); | |
| ASSERT_NOEXCEPT(H()(T())); | |
| H h; | |
| for (int i = 0; i <= 5; ++i) | |
| { | |
| T t(static_cast<T>(i)); | |
| const bool small = std::integral_constant<bool, sizeof(T) <= sizeof(std::size_t)>::value; // avoid compiler warnings | |
| if (small) | |
| { | |
| const std::size_t result = h(t); | |
| LIBCPP_ASSERT(result == static_cast<size_t>(t)); | |
| ((void)result); // Prevent unused warning | |
| } | |
| } | |
| } | |
| int main(int, char**) | |
| { | |
| test<bool>(); | |
| test<char>(); | |
| test<signed char>(); | |
| test<unsigned char>(); | |
| test<char16_t>(); | |
| test<char32_t>(); | |
| test<wchar_t>(); | |
| test<short>(); | |
| test<unsigned short>(); | |
| test<int>(); | |
| test<unsigned int>(); | |
| test<long>(); | |
| test<unsigned long>(); | |
| test<long long>(); | |
| test<unsigned long long>(); | |
| // LWG #2119 | |
| test<std::ptrdiff_t>(); | |
| test<size_t>(); | |
| test<int8_t>(); | |
| test<int16_t>(); | |
| test<int32_t>(); | |
| test<int64_t>(); | |
| test<int_fast8_t>(); | |
| test<int_fast16_t>(); | |
| test<int_fast32_t>(); | |
| test<int_fast64_t>(); | |
| test<int_least8_t>(); | |
| test<int_least16_t>(); | |
| test<int_least32_t>(); | |
| test<int_least64_t>(); | |
| test<intmax_t>(); | |
| test<intptr_t>(); | |
| test<uint8_t>(); | |
| test<uint16_t>(); | |
| test<uint32_t>(); | |
| test<uint64_t>(); | |
| test<uint_fast8_t>(); | |
| test<uint_fast16_t>(); | |
| test<uint_fast32_t>(); | |
| test<uint_fast64_t>(); | |
| test<uint_least8_t>(); | |
| test<uint_least16_t>(); | |
| test<uint_least32_t>(); | |
| test<uint_least64_t>(); | |
| test<uintmax_t>(); | |
| test<uintptr_t>(); | |
| test<__int128_t>(); | |
| test<__uint128_t>(); | |
| return 0; | |
| } | |