From 375ee6d6512493e411c2851941a0d509e7c71a3c Mon Sep 17 00:00:00 2001 From: "Eunki, Hong" Date: Mon, 25 Apr 2022 12:36:10 +0900 Subject: [PATCH] Calculate hash by Dali::Vector Change-Id: Ic5b640856c8e1f5710d3c0eb961612428e893990 Signed-off-by: Eunki, Hong --- automated-tests/src/dali/utc-Dali-Hash.cpp | 71 ++++++++++++++++++++++++++++++ dali/devel-api/common/hash.cpp | 17 +++++++ dali/devel-api/common/hash.h | 8 ++++ 3 files changed, 96 insertions(+) diff --git a/automated-tests/src/dali/utc-Dali-Hash.cpp b/automated-tests/src/dali/utc-Dali-Hash.cpp index f6bf706..de16406 100644 --- a/automated-tests/src/dali/utc-Dali-Hash.cpp +++ b/automated-tests/src/dali/utc-Dali-Hash.cpp @@ -21,6 +21,19 @@ #include +namespace +{ +Dali::Vector ConverterVector(const std::vector& v) +{ + Dali::Vector res; + for(const auto it : v) + { + res.PushBack(it); + } + return res; +}; +} // namespace + void utc_dali_hash_startup(void) { test_return_value = TET_UNDEF; @@ -124,4 +137,62 @@ int UtcDaliHashBufferNegative(void) DALI_TEST_CHECK(Dali::CalculateHash(notEmptyBuffer1) != Dali::CalculateHash(notEmptyBuffer2)); END_TEST; +} + +int UtcDaliHashDaliBuffer(void) +{ + TestApplication application; + + tet_infoline("UtcDaliHashDaliBuffer"); + + Dali::Vector testBuffer1 = ConverterVector({11, 22, 33, 0, 0}); + Dali::Vector testBuffer2 = ConverterVector({11, 22, 33}); + Dali::Vector testBuffer3 = ConverterVector({0, 0, 33, 22, 11}); + Dali::Vector testBuffer4 = ConverterVector({}); + + DALI_TEST_CHECK(Dali::CalculateHash(testBuffer1) != Dali::CalculateHash(testBuffer2)); + DALI_TEST_CHECK(Dali::CalculateHash(testBuffer1) != Dali::CalculateHash(testBuffer3)); + DALI_TEST_CHECK(Dali::CalculateHash(testBuffer1) != Dali::CalculateHash(testBuffer4)); + DALI_TEST_CHECK(Dali::CalculateHash(testBuffer2) != Dali::CalculateHash(testBuffer3)); + DALI_TEST_CHECK(Dali::CalculateHash(testBuffer2) != Dali::CalculateHash(testBuffer4)); + DALI_TEST_CHECK(Dali::CalculateHash(testBuffer3) != Dali::CalculateHash(testBuffer4)); + + END_TEST; +} + +int UtcDaliHashDaliBuffer02(void) +{ + TestApplication application; + + tet_infoline("UtcDaliHashDaliBuffer02"); + tet_infoline("Same string must have same hash value. even though generated by std::string and std::vector and Dali::Vector."); + + const std::string testString("highp vec4 glowColor = vec4( uGlowColor.rgb, uGlowColor.a * clampedColor.a );"); + const std::vector testBuffer = std::vector(testString.begin(), testString.end()); + const Dali::Vector testBuffer2 = ConverterVector(testBuffer); + + DALI_TEST_CHECK(Dali::CalculateHash(testString) == Dali::CalculateHash(testBuffer2)); + DALI_TEST_CHECK(Dali::CalculateHash(testBuffer) == Dali::CalculateHash(testBuffer2)); + + END_TEST; +} + +int UtcDaliHashDaliBufferNegative(void) +{ + // negative test, check hash value == initial value + const Dali::Vector emptyBuffer; + const Dali::Vector notEmptyBuffer1 = ConverterVector({0}); + const Dali::Vector notEmptyBuffer2 = ConverterVector({0, 0}); + + // Check with zero-only buffers also did not zero. + DALI_TEST_CHECK(Dali::CalculateHash(emptyBuffer) != 0); + DALI_TEST_CHECK(Dali::CalculateHash(notEmptyBuffer1) != 0); + DALI_TEST_CHECK(Dali::CalculateHash(notEmptyBuffer2) != 0); + + // Check with zero-only buffers with difference lengths have difference value each other. + DALI_TEST_CHECK(Dali::CalculateHash(emptyBuffer) != Dali::CalculateHash(notEmptyBuffer1)); + DALI_TEST_CHECK(Dali::CalculateHash(emptyBuffer) != Dali::CalculateHash(notEmptyBuffer2)); + DALI_TEST_CHECK(Dali::CalculateHash(notEmptyBuffer1) != Dali::CalculateHash(notEmptyBuffer2)); + + END_TEST; } \ No newline at end of file diff --git a/dali/devel-api/common/hash.cpp b/dali/devel-api/common/hash.cpp index d59d112..795b0de 100644 --- a/dali/devel-api/common/hash.cpp +++ b/dali/devel-api/common/hash.cpp @@ -51,6 +51,14 @@ inline void HashBuffer(const std::vector& buffer, std::size_t& has } } +inline void HashBuffer(const Dali::Vector& buffer, std::size_t& hash) +{ + for(const auto& c : buffer) + { + hash = hash * 33 + c; + } +} + } // unnamed namespace std::size_t CalculateHash(const std::string& toHash) @@ -90,4 +98,13 @@ std::size_t CalculateHash(const std::vector& toHash) return hash; } +std::size_t CalculateHash(const Dali::Vector& toHash) +{ + std::size_t hash(INITIAL_HASH_VALUE); + + HashBuffer(toHash, hash); + + return hash; +} + } // namespace Dali diff --git a/dali/devel-api/common/hash.h b/dali/devel-api/common/hash.h index 5c78f1a..9c9dbc0 100644 --- a/dali/devel-api/common/hash.h +++ b/dali/devel-api/common/hash.h @@ -24,6 +24,7 @@ //INTERNAL INCLUDES #include +#include namespace Dali { @@ -63,6 +64,13 @@ DALI_CORE_API std::size_t CalculateHash(const std::string& toHash, char terminat */ DALI_CORE_API std::size_t CalculateHash(const std::vector& toHash); +/** + * @brief Create a hash code for a Dali::Vector + * @param toHash list of std::uint8_t to hash + * @return hash code + */ +DALI_CORE_API std::size_t CalculateHash(const Dali::Vector& toHash); + } // namespace Dali #endif // DALI_HASH -- 2.7.4