From 491994595cab7ce43b3f9ffdffd35ac13495d73f Mon Sep 17 00:00:00 2001 From: Dnomd343 Date: Sat, 29 Apr 2023 23:18:28 +0800 Subject: [PATCH] test: core test using multi-threads --- test/CMakeLists.txt | 2 +- test/core/core.cc | 19 +++++++++++-------- 2 files changed, 12 insertions(+), 9 deletions(-) diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 93d29d7..c49bfd7 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -55,7 +55,7 @@ add_test(NAME codec COMMAND test_codec) set(TEST_CORE_SRC core/core.cc) add_executable(test_core ${TEST_CORE_SRC}) -target_link_libraries(test_core ${TEST_DEPS} absl::flat_hash_map) +target_link_libraries(test_core ${TEST_DEPS} tiny_pool absl::flat_hash_map) add_test(NAME core COMMAND test_core) ####################################################################################### diff --git a/test/core/core.cc b/test/core/core.cc index 6a15849..ff36860 100644 --- a/test/core/core.cc +++ b/test/core/core.cc @@ -1,8 +1,9 @@ -#include #include "core.h" #include "group.h" #include "all_cases.h" +#include "tiny_pool.h" #include "gtest/gtest.h" +#include "absl/container/flat_hash_set.h" using klotski::RawCode; using klotski::AllCases; @@ -11,25 +12,27 @@ using klotski::GroupType; using klotski::TYPE_ID_LIMIT; TEST(Core, next_cases) { - auto test = [](uint32_t type_id) { - auto raw_codes = std::unordered_set(); + auto test = [](GroupType type_id) { + auto raw_codes = absl::flat_hash_set(); raw_codes.reserve(klotski::ALL_CASES_SIZE_SUM); - for (auto &&common_code: GroupType(type_id).cases()) { // load all cases in a type + for (auto &&common_code: type_id.cases()) { // load all cases in a type raw_codes.emplace(common_code.to_raw_code().unwrap()); } auto core = klotski::Core( [&raw_codes](auto &&code, auto &&mask) { - EXPECT_NE(raw_codes.find(code), raw_codes.end()); // verify next case - EXPECT_EQ(mask >> __builtin_ctzll(mask), 0b111); // verify mask + EXPECT_NE(raw_codes.find(code), raw_codes.end()); // next case existed + EXPECT_EQ(mask >> __builtin_ctzll(mask), 0b111); // mask format } ); for (auto &&raw_code: raw_codes) { core.next_cases(raw_code, 0); // search next cases } }; - // TODO: using multi-threads + + auto pool = TinyPool(); for (uint32_t type_id = 0; type_id < TYPE_ID_LIMIT; ++type_id) { - test(type_id); + pool.submit(test, GroupType(type_id)); // test all type_ids } + pool.boot().join(); }