blob: 7cd9f15e93d11221b5847c85291bb12ad878e4a1 [file] [log] [blame]
Howard Hinnantbc8d3f92010-05-11 19:42:16 +00001//===----------------------------------------------------------------------===//
2//
Howard Hinnantf5256e12010-05-11 21:36:01 +00003// The LLVM Compiler Infrastructure
Howard Hinnantbc8d3f92010-05-11 19:42:16 +00004//
Howard Hinnantb64f8b02010-11-16 22:09:02 +00005// This file is dual licensed under the MIT and the University of Illinois Open
6// Source Licenses. See LICENSE.TXT for details.
Howard Hinnantbc8d3f92010-05-11 19:42:16 +00007//
8//===----------------------------------------------------------------------===//
9
10// <functional>
11
12// template <class T>
13// struct hash
14// : public unary_function<T, size_t>
15// {
16// size_t operator()(T val) const;
17// };
18
19// Not very portable
20
21#include <functional>
22#include <cassert>
23#include <type_traits>
24#include <limits>
25
26template <class T>
27void
28test()
29{
Marshall Clow674e07d2015-01-07 21:53:23 +000030 typedef std::hash<T> H;
31 static_assert((std::is_same<typename H::argument_type, T>::value), "" );
32 static_assert((std::is_same<typename H::result_type, std::size_t>::value), "" );
33 H h;
34
Howard Hinnantbc8d3f92010-05-11 19:42:16 +000035 for (int i = 0; i <= 5; ++i)
36 {
37 T t(i);
Howard Hinnant40c13d32011-12-05 00:08:45 +000038 if (sizeof(T) <= sizeof(std::size_t))
39 assert(h(t) == t);
Howard Hinnantbc8d3f92010-05-11 19:42:16 +000040 }
41}
42
43int main()
44{
45 test<bool>();
46 test<char>();
47 test<signed char>();
48 test<unsigned char>();
49 test<char16_t>();
50 test<char32_t>();
51 test<wchar_t>();
52 test<short>();
53 test<unsigned short>();
54 test<int>();
55 test<unsigned int>();
56 test<long>();
57 test<unsigned long>();
58 test<long long>();
59 test<unsigned long long>();
Howard Hinnantbc8d3f92010-05-11 19:42:16 +000060}