mirror of https://github.com/dnomd343/klotski.git
Dnomd343
2 years ago
1 changed files with 34 additions and 15 deletions
@ -1,37 +1,56 @@ |
|||
#include "gtest/gtest.h" |
|||
#include "all_cases.h" |
|||
#include "short_code.h" |
|||
#include "gtest/gtest.h" |
|||
#include "global_utils.h" |
|||
|
|||
using klotski::AllCases; |
|||
using klotski::ShortCode; |
|||
using klotski::CommonCode; |
|||
|
|||
std::vector<uint64_t> short_code_check(uint32_t start, uint32_t end) { |
|||
|
|||
// TODO: give me short_code range -> convert to common_code and archive it
|
|||
// common_code convert to short_code -> verify normal mode
|
|||
|
|||
std::vector<uint64_t> archive; |
|||
|
|||
for (uint32_t short_code = start; short_code < end; ++short_code) { |
|||
|
|||
auto common_code = ShortCode::unsafe_create(short_code).to_common_code(); |
|||
|
|||
archive.emplace_back(common_code.unwrap()); |
|||
|
|||
EXPECT_EQ(common_code.to_short_code().unwrap(), short_code); |
|||
|
|||
} |
|||
|
|||
return archive; |
|||
|
|||
} |
|||
|
|||
TEST(GLOBAL, short_code) { |
|||
|
|||
/// create short code check tasks
|
|||
auto pool = TinyPool(thread_num()); |
|||
ShortCode::speed_up(ShortCode::NORMAL); |
|||
std::vector<std::future<std::vector<uint64_t>>> futures; |
|||
|
|||
auto r = short_code_check(0, 100); |
|||
for (const auto &range : range_split(0, klotski::ALL_CASES_SIZE_SUM, 10000)) { |
|||
// for (const auto &range : range_split(0, 80000, 10000)) {
|
|||
|
|||
std::cout << r.size() << std::endl; |
|||
// std::cout << "[" << range.first << ", " << range.second << ")" << std::endl;
|
|||
|
|||
futures.emplace_back( |
|||
pool.submit(short_code_check, range.first, range.second) |
|||
); |
|||
} |
|||
|
|||
/// run short code search
|
|||
pool.boot(); |
|||
std::vector<uint64_t> result; |
|||
for (auto &f : futures) { |
|||
auto ret = f.get(); |
|||
result.insert(result.end(), ret.begin(), ret.end()); |
|||
} |
|||
pool.join(); |
|||
|
|||
// std::cout << result.size() << std::endl;
|
|||
|
|||
/// verify check result
|
|||
std::vector<uint64_t> all_cases; |
|||
for (uint64_t head = 0; head < 16; ++head) { |
|||
for (const auto &range : AllCases::fetch()[head]) { |
|||
all_cases.emplace_back(head << 32 | range); |
|||
} |
|||
} |
|||
EXPECT_EQ(result, all_cases); |
|||
|
|||
} |
|||
|
Loading…
Reference in new issue