From 25f506461d31ae2b6c661d2dafa356a3e2c989e3 Mon Sep 17 00:00:00 2001 From: Peizhao Ou Date: Thu, 1 Feb 2018 11:03:54 -0800 Subject: [PATCH] Adds garbage collection to map test cases --- CMakeLists.txt | 3 ++- test/grampa_driver.cpp | 43 +++++++++++++++++++++++++++--------------- 2 files changed, 30 insertions(+), 16 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 8a30b44..c62125f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -8,7 +8,8 @@ SET(CMAKE_CXX_COMPILER clang++-cross) if(CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR) # If this is the root project, issue a project() command so that # the Visual Studio generator will create an .sln file. - set(CMAKE_CONFIGURATION_TYPES "Debug;RelWithAsserts;RelWithDebInfo" CACHE INTERNAL "Build configs") + #set(CMAKE_CONFIGURATION_TYPES "Debug;RelWithAsserts;RelWithDebInfo" CACHE INTERNAL "Build configs") + set(CMAKE_CONFIGURATION_TYPES "RelWithDebInfo" CACHE INTERNAL "Build configs") project(Junction) set_property(GLOBAL PROPERTY USE_FOLDERS ON) set(JUNCTION_WITH_SAMPLES TRUE CACHE BOOL "Include all Junction samples in generated build system") diff --git a/test/grampa_driver.cpp b/test/grampa_driver.cpp index db2a276..0b2fcf9 100644 --- a/test/grampa_driver.cpp +++ b/test/grampa_driver.cpp @@ -6,31 +6,33 @@ namespace { -const size_t kMapSize = 10000; -const size_t kPassCount = 100000; const unsigned s_nInsertPercentage = 10; const char* kTestName = "InsDelFind"; -const char* kBenchmarkName = "JunctionMapLinear"; +const size_t kGrampaMapSize = 20000; +const size_t kGrampaPassCount = 30000; +const char* kGrampaBenchmarkName = "JunctionMapLinear"; } // namespace -typedef junction::ConcurrentMap_Grampa Map; +typedef junction::ConcurrentMap_Grampa GrampaMap; -int main() { +template +void run_test(size_t map_size, size_t pass_count, const char* bench_name) { auto start_time = std::chrono::system_clock::now(); size_t nInsertedNum = 0; size_t nFindSuccess = 0; - std::unique_ptr map(new Map(kMapSize)); - for (size_t count = 0; count < kPassCount; count++) { - for (size_t i = 1; i <= kMapSize; ++i) { + std::unique_ptr map(new Map()); + auto qsbrContext = junction::DefaultQSBR.createContext(); + for (size_t count = 0; count < pass_count; count++) { + for (size_t i = 0; i < map_size; ++i) { // The number to operate on the map. - size_t n = i; + size_t n = map_size + i; // Insert if (i % s_nInsertPercentage == 1) { auto iter = map->insertOrFind(n); if (!iter.getValue()) { - iter.assignValue(n + 1); + iter.assignValue(n); nInsertedNum++; // std::cout << "Inserted" << n << "\n"; } @@ -38,7 +40,7 @@ int main() { // Find { auto iter = map->find(n); - if (!iter.getValue()) { + if (iter.getValue()) { ++nFindSuccess; // std::cout << "Found" << n << "\n"; } @@ -51,15 +53,26 @@ int main() { // std::cout << "Erased" << n << "\n"; } } + junction::DefaultQSBR.update(qsbrContext); } } - assert(nFindSuccess == nFindSuccess && "junction::ConcurrentMap_Linear ERROR"); - auto finish_time = std::chrono::system_clock::now(); auto dur = finish_time - start_time; auto milisecs = std::chrono::duration_cast(dur); - std::cout << "[ OK ] " << kTestName << "." << kBenchmarkName << "(" - << milisecs.count() << " ms)\n"; + if (nFindSuccess != nInsertedNum) { + std::cout << "nFindSuccess=" << nFindSuccess << ", nInsertedNum=" + << nInsertedNum << "\n"; + std::cout << "[ FAILED ] " << kTestName << "." << bench_name + << "(" << milisecs.count() << " ms)\n"; + assert(false && "ConcurrentMap ERROR"); + } else { + std::cout << "[ OK ] " << kTestName << "." << bench_name + << "(" << milisecs.count() << " ms)\n"; + } +} + +int main() { + run_test(kGrampaMapSize, kGrampaPassCount, kGrampaBenchmarkName); return 0; } -- 2.34.1