test: extend coverage of testPortal

This commit is contained in:
dualfroz committed 2026-09-12 18:25:13 +02:00
1 parent dd55276675
commit 7eb223fa7a
1 file changed
+87
+87
View File
@@ -318,3 +318,90 @@ VF_TEST(builtFrameCarvesItsOwnApproachOutOfTheTerrain) {
for (int gz = 0; gz < 10; ++gz)
world.setBlock(gx, gy, gz, Block::Netherrack);
PortalFrame frame;
frame.origin = {4, 42, 5};
frame.width = 2;
frame.height = 3;
frame.alongX = true;
frame.dimension = DimensionId::Nether;
CHECK(PortalScan::siteUsable(world, frame));
PortalScan::buildFrame(world, frame);
CHECK(PortalScan::intact(world, frame));
CHECK(PortalScan::interiorClear(world, frame));
CHECK_EQ(world.blockAt(4, 42, 4), Block::Air);
CHECK_EQ(world.blockAt(5, 42, 6), Block::Air);
CHECK_EQ(world.blockAt(4, 41, 4), Block::Obsidian);
CHECK_EQ(world.blockAt(4, 41, 6), Block::Obsidian);
CHECK_EQ(world.blockAt(0, 42, 0), Block::Netherrack);
CHECK_EQ(PortalScan::light(world, frame), 6);
}
VF_TEST(bedrockMakesASiteUnusable) {
World world;
PortalFrame frame;
frame.origin = {0, 2, 0};
frame.width = 2;
frame.height = 3;
frame.alongX = true;
CHECK(PortalScan::siteUsable(world, frame));
world.setBlock(0, 1, 0, Block::Bedrock);
CHECK(!PortalScan::siteUsable(world, frame));
}
VF_TEST(endPortalIgnitesOnlyOnceEveryEyeIsSeated) {
DimensionSet dimensions(121u);
PortalNetwork network(dimensions);
Vec3i center{40, 60, 40};
CHECK_EQ(network.buildEndFrame(DimensionId::End, center), PortalNetwork::endFrameSlots);
const World& world = dimensions.end().world();
CHECK_EQ(world.blockAt(38, 60, 40), Block::EndPortalFrame);
CHECK_EQ(world.blockAt(40, 60, 42), Block::EndPortalFrame);
CHECK_EQ(world.blockAt(38, 60, 38), Block::Air); // corners stay empty
CHECK_EQ(world.blockAt(42, 60, 42), Block::Air);
CHECK_EQ(world.blockAt(40, 60, 40), Block::Air);
const int offsetX[PortalNetwork::endFrameSlots] = {-2, -2, -2, 2, 2, 2, -1, 0, 1, -1, 0, 1};
const int offsetZ[PortalNetwork::endFrameSlots] = {-1, 0, 1, -1, 0, 1, -2, -2, -2, 2, 2, 2};
for (int slot = 0; slot < PortalNetwork::endFrameSlots - 1; ++slot) {
Vec3i socket{center.x + offsetX[slot], center.y, center.z + offsetZ[slot]};
CHECK(network.insertEndEye(DimensionId::End, socket));
CHECK(network.hasEndEye(DimensionId::End, socket));
CHECK_EQ(network.endEyeCount(DimensionId::End, center), slot + 1);
CHECK(!network.endFrameComplete(DimensionId::End, center));
CHECK_EQ(world.blockAt(center.x, center.y, center.z), Block::Air);
}
Vec3i last{center.x + offsetX[11], center.y, center.z + offsetZ[11]};
CHECK(network.insertEndEye(DimensionId::End, last));
CHECK(network.endFrameComplete(DimensionId::End, center));
int portalCells = 0;
for (int dx = -1; dx <= 1; ++dx)
for (int dz = -1; dz <= 1; ++dz)
if (world.blockAt(center.x + dx, center.y, center.z + dz) == Block::EndPortal)
++portalCells;
CHECK_EQ(portalCells, 9);
}
VF_TEST(endPortalEyesOnlyGoIntoRealFrameBlocks) {
DimensionSet dimensions(122u);
PortalNetwork network(dimensions);
Vec3i center{0, 50, 0};
network.buildEndFrame(DimensionId::End, center);
Vec3i socket{-2, 50, 0};
CHECK(network.insertEndEye(DimensionId::End, socket));
CHECK(!network.insertEndEye(DimensionId::End, socket));
CHECK(!network.insertEndEye(DimensionId::End, {-2, 50, -2}));
CHECK(!network.insertEndEye(DimensionId::End, {9, 9, 9}));
CHECK_EQ(network.endEyeCount(DimensionId::End, center), 1);
// The same socket in another dimension is a different socket entirely.
CHECK(!network.hasEndEye(DimensionId::Overworld, socket));
CHECK(!network.activateEndPortal(DimensionId::End, center));
}