|
|
@ -4,6 +4,8 @@ |
|
|
|
#include "common_code.h" |
|
|
|
#include "gtest/gtest.h" |
|
|
|
|
|
|
|
#include "tiny_pool.h" |
|
|
|
|
|
|
|
#include "group/type_id.h" |
|
|
|
#include "group/group_seeds.h" |
|
|
|
|
|
|
@ -48,22 +50,32 @@ TEST(Group, all_cases) { |
|
|
|
} |
|
|
|
|
|
|
|
TEST(Group, group_cases) { |
|
|
|
|
|
|
|
// TODO: using multi-threads
|
|
|
|
|
|
|
|
std::vector<CommonCode> all_cases; |
|
|
|
all_cases.reserve(ALL_CASES_SIZE_SUM); |
|
|
|
|
|
|
|
for (auto &&seed : GROUP_SEEDS) { |
|
|
|
auto test = [](CommonCode seed) -> std::vector<CommonCode> { |
|
|
|
auto group_raw = Group::group_cases(RawCode::from_common_code(seed)); |
|
|
|
std::vector<CommonCode> group(group_raw.begin(), group_raw.end()); // convert as CommonCodes
|
|
|
|
EXPECT_EQ(seed, std::min_element(group.begin(), group.end())->unwrap()); // confirm min seed
|
|
|
|
all_cases.insert(all_cases.end(), group.begin(), group.end()); // archive group cases
|
|
|
|
|
|
|
|
uint32_t type_id = Group::type_id(CommonCode(seed)); // current type id
|
|
|
|
for (auto &&elem : group) { |
|
|
|
EXPECT_EQ(Group::type_id(elem), type_id); // verify type id of group cases
|
|
|
|
} |
|
|
|
return group; |
|
|
|
}; |
|
|
|
|
|
|
|
auto pool = TinyPool(); |
|
|
|
std::vector<std::future<std::vector<CommonCode>>> futures; |
|
|
|
for (auto &&seed : GROUP_SEEDS) { |
|
|
|
futures.emplace_back( |
|
|
|
pool.submit(test, CommonCode::unsafe_create(seed)) |
|
|
|
); |
|
|
|
} |
|
|
|
|
|
|
|
pool.boot(); |
|
|
|
std::vector<CommonCode> all_cases; |
|
|
|
all_cases.reserve(ALL_CASES_SIZE_SUM); |
|
|
|
for (auto &&f : futures) { |
|
|
|
auto ret = f.get(); |
|
|
|
all_cases.insert(all_cases.end(), ret.begin(), ret.end()); |
|
|
|
} |
|
|
|
std::sort(all_cases.begin(), all_cases.end()); |
|
|
|
EXPECT_EQ(all_cases, AllCases::release()); // verify all released cases
|
|
|
|