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 "short_code.h" |
||||
|
#include "gtest/gtest.h" |
||||
|
#include "global_utils.h" |
||||
|
|
||||
|
using klotski::AllCases; |
||||
using klotski::ShortCode; |
using klotski::ShortCode; |
||||
using klotski::CommonCode; |
using klotski::CommonCode; |
||||
|
|
||||
std::vector<uint64_t> short_code_check(uint32_t start, uint32_t end) { |
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; |
std::vector<uint64_t> archive; |
||||
|
|
||||
for (uint32_t short_code = start; short_code < end; ++short_code) { |
for (uint32_t short_code = start; short_code < end; ++short_code) { |
||||
|
|
||||
auto common_code = ShortCode::unsafe_create(short_code).to_common_code(); |
auto common_code = ShortCode::unsafe_create(short_code).to_common_code(); |
||||
|
|
||||
archive.emplace_back(common_code.unwrap()); |
archive.emplace_back(common_code.unwrap()); |
||||
|
|
||||
EXPECT_EQ(common_code.to_short_code().unwrap(), short_code); |
EXPECT_EQ(common_code.to_short_code().unwrap(), short_code); |
||||
|
|
||||
} |
} |
||||
|
|
||||
return archive; |
return archive; |
||||
|
|
||||
} |
} |
||||
|
|
||||
TEST(GLOBAL, short_code) { |
TEST(GLOBAL, short_code) { |
||||
|
/// create short code check tasks
|
||||
|
auto pool = TinyPool(thread_num()); |
||||
ShortCode::speed_up(ShortCode::NORMAL); |
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