Files
voxelforge/tests/testWorld.cpp
T

52 lines
1.5 KiB
C++

#include "testHarness.h"
#include "vf/World.h"
using namespace vf;
VF_TEST(worldFloorDivHandlesNegatives) {
CHECK_EQ(floorDiv(0, 16), 0);
CHECK_EQ(floorDiv(15, 16), 0);
CHECK_EQ(floorDiv(16, 16), 1);
CHECK_EQ(floorDiv(-1, 16), -1);
CHECK_EQ(floorDiv(-16, 16), -1);
CHECK_EQ(floorDiv(-17, 16), -2);
}
VF_TEST(worldFloorModHandlesNegatives) {
CHECK_EQ(floorMod(0, 16), 0);
CHECK_EQ(floorMod(-1, 16), 15);
CHECK_EQ(floorMod(16, 16), 0);
CHECK_EQ(floorMod(-17, 16), 15);
}
VF_TEST(worldSetGetCrossesChunkBorders) {
World world;
world.setBlock(0, 0, 0, Block::Stone);
world.setBlock(-1, 5, 3, Block::Grass);
world.setBlock(31, 40, 17, Block::Sand);
CHECK(world.blockAt(0, 0, 0) == Block::Stone);
CHECK(world.blockAt(-1, 5, 3) == Block::Grass);
CHECK(world.blockAt(31, 40, 17) == Block::Sand);
CHECK(world.blockAt(100, 100, 100) == Block::Air);
}
VF_TEST(worldNegativeCoordinateLandsInExpectedChunk) {
World world;
world.setBlock(-1, -1, -1, Block::Wood);
const Chunk* chunk = world.chunkAt({-1, -1, -1});
CHECK(chunk != nullptr);
CHECK(chunk->at(15, 15, 15) == Block::Wood);
CHECK(world.solidAt(-1, -1, -1));
}
VF_TEST(worldEnsureChunkIsIdempotent) {
World world;
Chunk& first = world.ensureChunk({2, 0, 2});
first.set(1, 1, 1, Block::Dirt);
Chunk& second = world.ensureChunk({2, 0, 2});
CHECK(&first == &second);
CHECK_EQ(world.chunkCount(), static_cast<std::size_t>(1));
CHECK(second.at(1, 1, 1) == Block::Dirt);
}