HashCombineTest.cpp 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. // Jolt Physics Library (https://github.com/jrouwe/JoltPhysics)
  2. // SPDX-FileCopyrightText: 2024 Jorrit Rouwe
  3. // SPDX-License-Identifier: MIT
  4. #include "UnitTestFramework.h"
  5. #include <Jolt/Core/HashCombine.h>
  6. TEST_SUITE("HashCombineTest")
  7. {
  8. TEST_CASE("TestHashBytes")
  9. {
  10. CHECK(HashBytes("This is a test", 14) == 2733878766136413408UL);
  11. }
  12. TEST_CASE("TestHashString")
  13. {
  14. CHECK(HashString("This is a test") == 2733878766136413408UL);
  15. }
  16. TEST_CASE("TestHashStruct")
  17. {
  18. const char *char_test = "This is a test";
  19. CHECK(Hash<const char *> { } (char_test) == 2733878766136413408UL);
  20. std::string_view str_view_test = "This is a test";
  21. CHECK(Hash<std::string_view> { } (str_view_test) == 2733878766136413408UL);
  22. String str_test = "This is a test";
  23. CHECK(Hash<String> { } (str_test) == 2733878766136413408UL);
  24. }
  25. TEST_CASE("TestHashCombine")
  26. {
  27. int val1 = 0;
  28. uint64 val1_hash = Hash<int> { } (val1);
  29. int val2 = 1;
  30. uint64 val2_hash = Hash<int> { } (val2);
  31. // Check non-commutative
  32. uint64 seed1 = val1_hash;
  33. HashCombine(seed1, val2);
  34. uint64 seed2 = val2_hash;
  35. HashCombine(seed2, val1);
  36. CHECK(seed1 != seed2);
  37. // Check that adding a 0 changes the hash
  38. uint64 seed3 = val1_hash;
  39. HashCombine(seed3, val1);
  40. CHECK(seed3 != val1_hash);
  41. }
  42. }