From: chenxuqiang Date: Wed, 17 May 2023 09:43:05 +0000 (+0800) Subject: test/common: add mem_is_zero ut X-Git-Tag: v19.3.0~294^2~2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=7f2c6108fceeebefd0724788683d6ea67bfed766;p=ceph.git test/common: add mem_is_zero ut Signed-off-by: chenxuqiang --- diff --git a/src/test/common/CMakeLists.txt b/src/test/common/CMakeLists.txt index b2ed06ee306..e3b6e549767 100644 --- a/src/test/common/CMakeLists.txt +++ b/src/test/common/CMakeLists.txt @@ -294,6 +294,13 @@ add_executable(unittest_perf_histogram add_ceph_unittest(unittest_perf_histogram) target_link_libraries(unittest_perf_histogram ceph-common) +# unittest_memory +add_executable(unittest_memory + test_memory.cc + ) +add_ceph_unittest(unittest_memory) +target_link_libraries(unittest_memory ceph-common) + # unittest_perf_cache_key add_executable(unittest_perf_counters_key test_perf_counters_key.cc) add_ceph_unittest(unittest_perf_counters_key) diff --git a/src/test/common/test_memory.cc b/src/test/common/test_memory.cc new file mode 100644 index 00000000000..cf075f01e5d --- /dev/null +++ b/src/test/common/test_memory.cc @@ -0,0 +1,73 @@ +// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*- +// vim: ts=8 sw=2 smarttab + +#include +#include +#include + +#include "include/inline_memory.h" +#include "include/utime.h" +#include "common/Clock.h" +#include "gtest/gtest.h" + +class MemoryIsZeroBigTest : public ::testing::TestWithParam {}; +class MemoryIsZeroSmallTest : public ::testing::TestWithParam {}; +class MemoryIsZeroPerformance : public ::testing::TestWithParam {}; + +TEST_P(MemoryIsZeroBigTest, MemoryIsZeroTestBig) { + size_t size = GetParam(); + char *data = (char *)malloc(sizeof(char) * size); + memset(data, 0, sizeof(char) * size); + EXPECT_TRUE(mem_is_zero(data, size)); + + size_t pos = rand() % size; + data[pos] = 'a'; + EXPECT_FALSE(mem_is_zero(data, size)); + + free(data); +} + +TEST_P(MemoryIsZeroSmallTest, MemoryIsZeroTestSmall) { + size_t size = GetParam(); + for (size_t i = 0; i < size; i++) { + char data[size] = { 0 }; + EXPECT_TRUE(mem_is_zero(data, size)); + + data[i] = 'a'; + EXPECT_FALSE(mem_is_zero(data, size)); + } +} + +TEST_P(MemoryIsZeroPerformance, MemoryIsZeroPerformanceTest) { + constexpr size_t ITER = 1000000; + utime_t start; + utime_t end; + + size_t size = GetParam(); + char *data = (char *)malloc(size); + memset(data, 0, size); + + bool res = false; + start = ceph_clock_now(); + for (size_t i = 0; i < ITER; i++) { + res = mem_is_zero(data, size); + } + end = ceph_clock_now(); + + std::cout << "iterators=" << ITER + << " size= " << size + << " time=" << (double)(end - start) + << std::endl; + + ASSERT_TRUE(res); + free(data); +} + +INSTANTIATE_TEST_CASE_P(Default, MemoryIsZeroSmallTest, + ::testing::Values(1, 4, 7, 8, 12, 28, 60, 64)); + +INSTANTIATE_TEST_CASE_P(Default, MemoryIsZeroBigTest, + ::testing::Values(1024, 4096, 8192, 64 * 1024)); + +INSTANTIATE_TEST_CASE_P(Default, MemoryIsZeroPerformance, + ::testing::Values(1024, 2048, 4096, 8192, 64 * 1024));