hashed_string.cpp 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. #include <cstddef>
  2. #include <gtest/gtest.h>
  3. #include <entt/core/hashed_string.hpp>
  4. constexpr bool ptr(const char *str) {
  5. using hash_type = entt::HashedString::hash_type;
  6. return (static_cast<hash_type>(entt::HashedString{str}) == entt::HashedString{str}
  7. && static_cast<const char *>(entt::HashedString{str}) == str
  8. && entt::HashedString{str} == entt::HashedString{str}
  9. && !(entt::HashedString{str} != entt::HashedString{str}));
  10. }
  11. template<std::size_t N>
  12. constexpr bool ref(const char (&str)[N]) {
  13. using hash_type = entt::HashedString::hash_type;
  14. return (static_cast<hash_type>(entt::HashedString{str}) == entt::HashedString{str}
  15. && static_cast<const char *>(entt::HashedString{str}) == str
  16. && entt::HashedString{str} == entt::HashedString{str}
  17. && !(entt::HashedString{str} != entt::HashedString{str}));
  18. }
  19. TEST(HashedString, Constexprness) {
  20. // how would you test a constepxr otherwise?
  21. static_assert(ptr("foo"), "!");
  22. static_assert(ref("bar"), "!");
  23. ASSERT_TRUE(true);
  24. }
  25. TEST(HashedString, Functionalities) {
  26. using hash_type = entt::HashedString::hash_type;
  27. const char *bar = "bar";
  28. auto fooHs = entt::HashedString{"foo"};
  29. auto barHs = entt::HashedString{bar};
  30. ASSERT_NE(static_cast<hash_type>(fooHs), static_cast<hash_type>(barHs));
  31. ASSERT_EQ(static_cast<const char *>(fooHs), "foo");
  32. ASSERT_EQ(static_cast<const char *>(barHs), bar);
  33. ASSERT_TRUE(fooHs == fooHs);
  34. ASSERT_TRUE(fooHs != barHs);
  35. entt::HashedString hs{"foobar"};
  36. ASSERT_EQ(static_cast<hash_type>(hs), 0x85944171f73967e8);
  37. }