mirror of
https://github.com/luanti-org/luanti.git
synced 2025-06-27 16:36:03 +00:00
loose ends and a unit test
This commit is contained in:
parent
13eca383c4
commit
01df186d0e
3 changed files with 106 additions and 12 deletions
|
@ -10,6 +10,7 @@
|
|||
#include "serialization.h"
|
||||
#include "noise.h"
|
||||
#include "inventory.h"
|
||||
#include "voxel.h"
|
||||
|
||||
class TestMapBlock : public TestBase
|
||||
{
|
||||
|
@ -33,6 +34,9 @@ public:
|
|||
|
||||
// Tests loading a non-standard MapBlock
|
||||
void testLoadNonStd(IGameDef *gamedef);
|
||||
|
||||
// Tests blocks with a single node recurring node
|
||||
void testMonoblock(IGameDef *gamedef);
|
||||
};
|
||||
|
||||
static TestMapBlock g_test_instance;
|
||||
|
@ -45,10 +49,89 @@ void TestMapBlock::runTests(IGameDef *gamedef)
|
|||
TEST(testLoad29, gamedef);
|
||||
TEST(testLoad20, gamedef);
|
||||
TEST(testLoadNonStd, gamedef);
|
||||
TEST(testMonoblock, gamedef);
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
void TestMapBlock::testMonoblock(IGameDef *gamedef)
|
||||
{
|
||||
MapBlock block({}, gamedef);
|
||||
UASSERT(!block.m_is_mono_block);
|
||||
MapNode *t = block.data;
|
||||
for (size_t i = 0; i < MapBlock::nodecount; ++i) {
|
||||
block.data[i] = MapNode(CONTENT_AIR);
|
||||
}
|
||||
// covert to monoblock
|
||||
block.tryConvertToMonoblock();
|
||||
UASSERT(block.m_is_mono_block);
|
||||
UASSERT(block.data[0].param0 == CONTENT_AIR);
|
||||
UASSERT(block.data != t);
|
||||
t = block.data;
|
||||
|
||||
// get the data(), should deconvert the block
|
||||
MapNode *d1 = block.getData();
|
||||
UASSERT(!block.m_is_mono_block);
|
||||
UASSERT(block.data != t);
|
||||
UASSERT(block.data == d1);
|
||||
|
||||
// covert back to mono block
|
||||
block.tryConvertToMonoblock();
|
||||
UASSERT(block.m_is_mono_block);
|
||||
t = block.data;
|
||||
|
||||
// deconvert explicitly
|
||||
block.deconvertMonoblock();
|
||||
UASSERT(!block.m_is_mono_block);
|
||||
UASSERT(block.data != t);
|
||||
|
||||
// covert back to mono block
|
||||
block.tryConvertToMonoblock();
|
||||
UASSERT(block.m_is_mono_block);
|
||||
t = block.data;
|
||||
|
||||
// set a node, should deconvert the block
|
||||
block.setNode(5,5,5, MapNode(42));
|
||||
UASSERT(!block.m_is_mono_block);
|
||||
UASSERT(block.data != t);
|
||||
t = block.data;
|
||||
|
||||
// cannot covert to mono block
|
||||
block.tryConvertToMonoblock();
|
||||
UASSERT(!block.m_is_mono_block);
|
||||
UASSERT(block.data == t);
|
||||
|
||||
// set all nodes to 42
|
||||
for (size_t i = 0; i < MapBlock::nodecount; ++i) {
|
||||
block.data[i] = MapNode(42);
|
||||
}
|
||||
|
||||
// can covert to mono block
|
||||
block.tryConvertToMonoblock();
|
||||
UASSERT(block.m_is_mono_block);
|
||||
UASSERT(block.data[0].param0 == 42);
|
||||
UASSERT(block.data != t);
|
||||
t = block.data;
|
||||
|
||||
VoxelManipulator vmm;
|
||||
v3s16 data_size(MAP_BLOCKSIZE, MAP_BLOCKSIZE, MAP_BLOCKSIZE);
|
||||
vmm.addArea(VoxelArea(block.getPosRelative(), block.getPosRelative() + data_size + v3s16(1,1,1)));
|
||||
block.copyTo(vmm);
|
||||
UASSERT(block.m_is_mono_block);
|
||||
UASSERT(vmm.getNode({5,5,5}).param0 == 42);
|
||||
|
||||
block.setNode(5,5,5,MapNode(23));
|
||||
t = block.data;
|
||||
|
||||
block.copyFrom(vmm);
|
||||
UASSERT(block.m_is_mono_block);
|
||||
UASSERT(block.data[0].param0 == 42);
|
||||
|
||||
vmm.setNode({5,5,5}, MapNode(23));
|
||||
block.copyFrom(vmm);
|
||||
UASSERT(!block.m_is_mono_block);
|
||||
}
|
||||
|
||||
void TestMapBlock::testSaveLoad(IGameDef *gamedef, const u8 version)
|
||||
{
|
||||
// Use the bottom node ids for this test
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue