hash_function_pointer_test.cpp 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. // Copyright 2005-2009 Daniel James.
  2. // Distributed under the Boost Software License, Version 1.0. (See accompanying
  3. // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
  4. #include "./config.hpp"
  5. #ifdef BOOST_HASH_TEST_STD_INCLUDES
  6. # include <functional>
  7. #else
  8. # include <boost/container_hash/hash.hpp>
  9. #endif
  10. #include <boost/core/lightweight_test.hpp>
  11. #include "./compile_time.hpp"
  12. void void_func1() { static int x = 1; ++x; }
  13. void void_func2() { static int x = 2; --x; }
  14. int int_func1(int) { return 0; }
  15. int int_func2(int) { return 1; }
  16. void function_pointer_tests()
  17. {
  18. compile_time_tests((void(**)()) 0);
  19. compile_time_tests((int(**)(int)) 0);
  20. BOOST_HASH_TEST_NAMESPACE::hash<void(*)()> hasher_void;
  21. BOOST_HASH_TEST_NAMESPACE::hash<int(*)(int)> hasher_int;
  22. BOOST_TEST(&void_func1 != &void_func2);
  23. BOOST_TEST(&int_func1 != &int_func2);
  24. BOOST_TEST(hasher_void(0) == hasher_void(0));
  25. BOOST_TEST(hasher_void(&void_func1) == hasher_void(&void_func1));
  26. BOOST_TEST(hasher_void(&void_func1) != hasher_void(&void_func2));
  27. BOOST_TEST(hasher_void(&void_func1) != hasher_void(0));
  28. BOOST_TEST(hasher_int(0) == hasher_int(0));
  29. BOOST_TEST(hasher_int(&int_func1) == hasher_int(&int_func1));
  30. BOOST_TEST(hasher_int(&int_func1) != hasher_int(&int_func2));
  31. BOOST_TEST(hasher_int(&int_func1) != hasher_int(0));
  32. #if defined(BOOST_HASH_TEST_EXTENSIONS)
  33. BOOST_TEST(hasher_void(&void_func1)
  34. == BOOST_HASH_TEST_NAMESPACE::hash_value(&void_func1));
  35. BOOST_TEST(hasher_int(&int_func1)
  36. == BOOST_HASH_TEST_NAMESPACE::hash_value(&int_func1));
  37. // This isn't specified in Peter's proposal:
  38. BOOST_TEST(hasher_void(0) == 0);
  39. #endif
  40. }
  41. int main()
  42. {
  43. function_pointer_tests();
  44. return boost::report_errors();
  45. }