mirror of https://github.com/dnomd343/klotski.git
Dnomd343
2 years ago
4 changed files with 87 additions and 13 deletions
@ -0,0 +1,75 @@ |
|||
#include <algorithm> |
|||
#include "group.h" |
|||
#include "tiny_pool.h" |
|||
#include "gtest/gtest.h" |
|||
|
|||
#define SHOULD_PANIC(FUNC) \ |
|||
try { \ |
|||
FUNC; EXPECT_STREQ("should panic", "but no panic"); \ |
|||
} catch (...) {} |
|||
|
|||
using klotski::Group; |
|||
using klotski::GroupCase; |
|||
using klotski::GroupType; |
|||
using klotski::CommonCode; |
|||
|
|||
using klotski::TYPE_ID_LIMIT; |
|||
|
|||
TEST(Group, group_info_invalid) { |
|||
SHOULD_PANIC(GroupCase::parse(GroupCase::info_t { |
|||
.type_id = TYPE_ID_LIMIT, |
|||
.group_id = 0, |
|||
.group_index = 0, |
|||
})) |
|||
|
|||
SHOULD_PANIC(GroupCase::parse(GroupCase::info_t { |
|||
.type_id = 0, |
|||
.group_id = static_cast<uint16_t>(GroupType(0).group_num()), |
|||
.group_index = 0, |
|||
})) |
|||
|
|||
SHOULD_PANIC(GroupCase::parse(GroupCase::info_t { |
|||
.type_id = 0, |
|||
.group_id = 0, |
|||
.group_index = Group(0, 0).size(), |
|||
})) |
|||
} |
|||
|
|||
TEST(Group, group_info) { |
|||
auto test = [](GroupType group_type) { |
|||
for (uint32_t group_id = 0; group_id < group_type.group_num(); ++group_id) { |
|||
auto tmp = Group(group_type, group_id).cases(); |
|||
std::vector<CommonCode> cases(tmp.begin(), tmp.end()); |
|||
|
|||
auto min = *std::min_element(cases.begin(), cases.end()); |
|||
auto max = *std::max_element(cases.begin(), cases.end()); |
|||
|
|||
auto min_info = GroupCase::info_t{ |
|||
.type_id = static_cast<uint16_t>(group_type.unwrap()), |
|||
.group_id = static_cast<uint16_t>(group_id), |
|||
.group_index = 0, |
|||
}; |
|||
auto max_info = GroupCase::info_t{ |
|||
.type_id = static_cast<uint16_t>(group_type.unwrap()), |
|||
.group_id = static_cast<uint16_t>(group_id), |
|||
.group_index = static_cast<uint32_t>(cases.size() - 1), |
|||
}; |
|||
|
|||
EXPECT_EQ(min, GroupCase::parse(min_info)); |
|||
EXPECT_EQ(max, GroupCase::parse(max_info)); |
|||
EXPECT_EQ(min_info, GroupCase::encode(min)); |
|||
EXPECT_EQ(max_info, GroupCase::encode(max)); |
|||
EXPECT_EQ(min_info, GroupCase::encode(min.to_raw_code())); |
|||
EXPECT_EQ(max_info, GroupCase::encode(max.to_raw_code())); |
|||
} |
|||
}; |
|||
|
|||
auto pool = TinyPool(); |
|||
for (uint32_t type_id = 0; type_id < TYPE_ID_LIMIT; ++type_id) { |
|||
pool.submit(test, GroupType(type_id)); |
|||
} |
|||
pool.boot(); |
|||
pool.join(); |
|||
} |
|||
|
|||
// TODO: add group_info FAST mode
|
Loading…
Reference in new issue