Add cube line equivalence tests (#8771)

This commit is contained in:
2026-07-24 09:17:23 -07:00
committed by GitHub
parent 49185c103a
commit ecc61c7d2c
@@ -21,6 +21,16 @@ static constexpr PlayerId enemyPlayerId = 3;
static const std::vector<PlayerId> alliedPids{alliedPlayerId};
static void ExpectCubeLine(const std::vector<Cube>& actual, const std::vector<Cube>& expected) {
ASSERT_EQ(expected.size(), actual.size());
for (size_t index = 0; index < expected.size(); ++index) {
SCOPED_TRACE(index);
EXPECT_EQ(expected[index].x, actual[index].x);
EXPECT_EQ(expected[index].y, actual[index].y);
EXPECT_EQ(expected[index].z, actual[index].z);
}
}
class HexMapUtilsTest : public ::testing::Test {
void SetUp() override {
InitializeGameSettings();
@@ -440,12 +450,51 @@ TEST_F(HexMapUtilsTest, LineIsBlockedByMountains_directLine_isFalse) {
TEST_F(HexMapUtilsTest, CubeLineInclusive_sameCube_returnsSingleCube) {
const Cube cube(1, -3, 2);
const auto line = CubeLineInclusive(cube, cube);
ExpectCubeLine(CubeLineInclusive(cube, cube), {cube});
}
ASSERT_EQ(1, line.size());
EXPECT_EQ(cube.x, line.front().x);
EXPECT_EQ(cube.y, line.front().y);
EXPECT_EQ(cube.z, line.front().z);
TEST_F(HexMapUtilsTest, CubeLineInclusive_straightLine_returnsOneCubePerStep) {
ExpectCubeLine(
CubeLineInclusive(Cube(0, 0, 0), Cube(3, -3, 0)),
{
Cube(0, 0, 0),
Cube(1, -1, 0),
Cube(2, -2, 0),
Cube(3, -3, 0),
});
}
TEST_F(HexMapUtilsTest, CubeLineInclusive_lineBetweenHexes_returnsBothHexes) {
ExpectCubeLine(
CubeLineInclusive(Cube(0, 0, 0), Cube(1, -2, 1)),
{
Cube(0, 0, 0),
Cube(1, -1, 0),
Cube(0, -1, 1),
Cube(1, -2, 1),
});
}
TEST_F(HexMapUtilsTest, CubeLineInclusive_lineBetweenHexesWithYTie_returnsBothHexes) {
ExpectCubeLine(
CubeLineInclusive(Cube(0, 0, 0), Cube(2, -1, -1)),
{
Cube(0, 0, 0),
Cube(1, 0, -1),
Cube(1, -1, 0),
Cube(2, -1, -1),
});
}
TEST_F(HexMapUtilsTest, CubeLineInclusive_reversedEndpoints_preservesCurrentTieOrder) {
ExpectCubeLine(
CubeLineInclusive(Cube(1, -2, 1), Cube(0, 0, 0)),
{
Cube(1, -2, 1),
Cube(1, -1, 0),
Cube(0, -1, 1),
Cube(0, 0, 0),
});
}
TEST_F(HexMapUtilsTest, LineIsBlockedByMountains_mountainBetween_isTrue) {