]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
test/common: add mem_is_zero ut
authorchenxuqiang <chenxuqiang3@hisilicon.com>
Wed, 17 May 2023 09:43:05 +0000 (17:43 +0800)
committerRongqi Sun <sunrongqi@huawei.com>
Wed, 13 Dec 2023 03:46:12 +0000 (11:46 +0800)
Signed-off-by: chenxuqiang <chenxuqiang3@hisilicon.com>
src/test/common/CMakeLists.txt
src/test/common/test_memory.cc [new file with mode: 0644]

index b2ed06ee3062cc1ca52390675dd539c768ac7a22..e3b6e5497677be5f5e52db46a5f3a7c28c44dbd7 100644 (file)
@@ -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 (file)
index 0000000..cf075f0
--- /dev/null
@@ -0,0 +1,73 @@
+// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
+// vim: ts=8 sw=2 smarttab
+
+#include <iostream>
+#include <vector>
+#include <string.h>
+
+#include "include/inline_memory.h"
+#include "include/utime.h"
+#include "common/Clock.h"
+#include "gtest/gtest.h"
+
+class MemoryIsZeroBigTest : public ::testing::TestWithParam<size_t> {};
+class MemoryIsZeroSmallTest : public ::testing::TestWithParam<size_t> {};
+class MemoryIsZeroPerformance : public ::testing::TestWithParam<size_t> {};
+
+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));