From fbe7528360ec97aacd145fe9fef0d4aff4a1f43f Mon Sep 17 00:00:00 2001 From: Henning Baldersheim Date: Fri, 4 Jun 2021 10:10:28 +0000 Subject: Add benchmark for non POD objects. --- vespalib/src/tests/stllike/hashtable_test.cpp | 30 +++++++++++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) (limited to 'vespalib') diff --git a/vespalib/src/tests/stllike/hashtable_test.cpp b/vespalib/src/tests/stllike/hashtable_test.cpp index 5f6f1601c84..aaecbb3833d 100644 --- a/vespalib/src/tests/stllike/hashtable_test.cpp +++ b/vespalib/src/tests/stllike/hashtable_test.cpp @@ -5,9 +5,9 @@ #include #include #include +#include #include #include -#include using vespalib::hashtable; using std::vector; @@ -141,7 +141,7 @@ TEST("require that hashtable> can be copied") { * 2 - test - 6.6s hash_node() : _next(invalid) { memset(_node, 0, sizeof(node)); } * 3 - current - 2.3s hash_node() : _next(invalid) {} */ -TEST("benchmark clear") { +TEST("benchmark hash table reconstruction with POD objects") { vespalib::hash_map m(1000000); constexpr size_t NUM_ITER = 10; // Set to 1k-10k to get measurable numbers 10k ~= 2.3s for (size_t i(0); i < NUM_ITER; i++) { @@ -155,6 +155,32 @@ TEST("benchmark clear") { } } +class NonPOD { +public: + NonPOD() : _v(rand()) {} + ~NonPOD() { _v = 0; } +private: + uint32_t _v; +}; + +/** + * Performance is identical for NonPOD objects as with POD object. + * Object are are only constructed on insert, and destructed on erase/clear. + */ +TEST("benchmark hash table reconstruction with POD objects") { + vespalib::hash_map m(1000000); + constexpr size_t NUM_ITER = 10; // Set to 1k-10k to get measurable numbers 10k ~= 2.3s + for (size_t i(0); i < NUM_ITER; i++) { + m[46] = NonPOD(); + EXPECT_FALSE(m.empty()); + EXPECT_EQUAL(1u, m.size()); + EXPECT_EQUAL(1048576u, m.capacity()); + m.clear(); + EXPECT_TRUE(m.empty()); + EXPECT_EQUAL(1048576u, m.capacity()); + } +} + } // namespace TEST_MAIN() { TEST_RUN_ALL(); } -- cgit v1.2.3