You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
63 lines
1.8 KiB
63 lines
1.8 KiB
|
3 years ago
|
#include <cmath>
|
||
|
|
|
||
|
2 years ago
|
#include <gmock/gmock.h>
|
||
|
5 years ago
|
#include <gtest/gtest.h>
|
||
|
|
|
||
|
2 years ago
|
#include "crawl.hpp"
|
||
|
|
#include "engine/displacement.hpp"
|
||
|
5 years ago
|
|
||
|
2 years ago
|
namespace devilution {
|
||
|
|
namespace {
|
||
|
|
using ::testing::ElementsAre;
|
||
|
5 years ago
|
|
||
|
2 years ago
|
TEST(CrawlTest, BasicTest)
|
||
|
5 years ago
|
{
|
||
|
|
bool added[40][40];
|
||
|
|
memset(added, 0, sizeof(added));
|
||
|
|
|
||
|
4 years ago
|
int x = 20;
|
||
|
|
int y = 20;
|
||
|
|
|
||
|
2 years ago
|
constexpr int MaxCrawlRadius = 18;
|
||
|
4 years ago
|
Crawl(0, MaxCrawlRadius, [&](Displacement displacement) {
|
||
|
4 years ago
|
int dx = x + displacement.deltaX;
|
||
|
|
int dy = y + displacement.deltaY;
|
||
|
|
EXPECT_EQ(added[dx][dy], false) << "displacement " << displacement.deltaX << ":" << displacement.deltaY << " added twice";
|
||
|
|
added[dx][dy] = true;
|
||
|
|
return false;
|
||
|
|
});
|
||
|
5 years ago
|
|
||
|
4 years ago
|
for (int i = -MaxCrawlRadius; i <= MaxCrawlRadius; i++) {
|
||
|
|
for (int j = -MaxCrawlRadius; j <= MaxCrawlRadius; j++) {
|
||
|
5 years ago
|
if (added[i + 20][j + 20])
|
||
|
|
continue;
|
||
|
3 years ago
|
if (std::abs(i) == MaxCrawlRadius && std::abs(j) == MaxCrawlRadius)
|
||
|
5 years ago
|
continue; // Limit of the crawl table rage
|
||
|
4 years ago
|
EXPECT_EQ(false, true) << "while checking location " << i << ":" << j;
|
||
|
5 years ago
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
2 years ago
|
|
||
|
2 years ago
|
TEST(CrawlTest, VisitationOrderTest)
|
||
|
2 years ago
|
{
|
||
|
|
std::vector<Displacement> order;
|
||
|
|
Crawl(0, 2, [&](Displacement displacement) {
|
||
|
|
order.push_back(displacement);
|
||
|
|
return false;
|
||
|
|
});
|
||
|
|
EXPECT_THAT(
|
||
|
|
order,
|
||
|
|
ElementsAre(
|
||
|
|
Displacement(0, 0),
|
||
|
|
Displacement(0, 1), Displacement(0, -1),
|
||
|
|
Displacement(-1, 0), Displacement(1, 0),
|
||
|
|
Displacement(0, 2), Displacement(0, -2),
|
||
|
|
Displacement(-1, 2), Displacement(1, 2), Displacement(-1, -2), Displacement(1, -2),
|
||
|
|
Displacement(-1, 1), Displacement(1, 1), Displacement(-1, -1), Displacement(1, -1),
|
||
|
|
Displacement(-2, 0), Displacement(2, 0), Displacement(-2, 1),
|
||
|
|
Displacement(2, 1), Displacement(-2, -1), Displacement(2, -1)));
|
||
|
|
}
|
||
|
|
|
||
|
|
} // namespace
|
||
|
|
} // namespace devilution
|