diff options
author | Eric Fiselier <eric@efcs.ca> | 2014-12-20 01:40:03 +0000 |
---|---|---|
committer | Eric Fiselier <eric@efcs.ca> | 2014-12-20 01:40:03 +0000 |
commit | 5a83710e371fe68a06e6e3876c6a2c8b820a8976 (patch) | |
tree | afde4c82ad6704681781c5cd49baa3fbd05c85db /libcxx/test/std/utilities/function.objects/unord.hash/enum.pass.cpp | |
parent | f11e8eab527fba316c64112f6e05de1a79693a3e (diff) | |
download | bcm5719-llvm-5a83710e371fe68a06e6e3876c6a2c8b820a8976.tar.gz bcm5719-llvm-5a83710e371fe68a06e6e3876c6a2c8b820a8976.zip |
Move test into test/std subdirectory.
llvm-svn: 224658
Diffstat (limited to 'libcxx/test/std/utilities/function.objects/unord.hash/enum.pass.cpp')
-rw-r--r-- | libcxx/test/std/utilities/function.objects/unord.hash/enum.pass.cpp | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/libcxx/test/std/utilities/function.objects/unord.hash/enum.pass.cpp b/libcxx/test/std/utilities/function.objects/unord.hash/enum.pass.cpp new file mode 100644 index 00000000000..b5cd6f8454d --- /dev/null +++ b/libcxx/test/std/utilities/function.objects/unord.hash/enum.pass.cpp @@ -0,0 +1,63 @@ +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is dual licensed under the MIT and the University of Illinois Open +// Source Licenses. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// <functional> + +// make sure that we can hash enumeration values +// Not very portable + +#include <__config> + +#if _LIBCPP_STD_VER > 11 + +#include <functional> +#include <cassert> +#include <type_traits> +#include <limits> + +enum class Colors { red, orange, yellow, green, blue, indigo, violet }; +enum class Cardinals { zero, one, two, three, five=5 }; +enum class LongColors : short { red, orange, yellow, green, blue, indigo, violet }; +enum class ShortColors : long { red, orange, yellow, green, blue, indigo, violet }; +enum class EightBitColors : uint8_t { red, orange, yellow, green, blue, indigo, violet }; + +enum Fruits { apple, pear, grape, mango, cantaloupe }; + +template <class T> +void +test() +{ + static_assert((std::is_base_of<std::unary_function<T, std::size_t>, + std::hash<T> >::value), ""); + typedef typename std::underlying_type<T>::type under_type; + + std::hash<T> h1; + std::hash<under_type> h2; + for (int i = 0; i <= 5; ++i) + { + T t(static_cast<T> (i)); + if (sizeof(T) <= sizeof(std::size_t)) + assert(h1(t) == h2(static_cast<under_type>(i))); + } +} + +int main() +{ + test<Cardinals>(); + + test<Colors>(); + test<ShortColors>(); + test<LongColors>(); + test<EightBitColors>(); + + test<Fruits>(); +} +#else +int main () {} +#endif |