diff options
Diffstat (limited to 'src/unittest')
| -rw-r--r-- | src/unittest/test.cpp | 56 | ||||
| -rw-r--r-- | src/unittest/test_voxelalgorithms.cpp | 73 |
2 files changed, 74 insertions, 55 deletions
diff --git a/src/unittest/test.cpp b/src/unittest/test.cpp index af30c209d..149ab82b5 100644 --- a/src/unittest/test.cpp +++ b/src/unittest/test.cpp @@ -22,10 +22,8 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "client/sound.h" #include "nodedef.h" #include "itemdef.h" -#include "gamedef.h" +#include "dummygamedef.h" #include "modchannels.h" -#include "content/mods.h" -#include "database/database-dummy.h" #include "util/numeric.h" #include "porting.h" @@ -42,36 +40,13 @@ content_t t_CONTENT_BRICK; //// TestGameDef //// -class TestGameDef : public IGameDef { +class TestGameDef : public DummyGameDef { public: TestGameDef(); - ~TestGameDef(); - - IItemDefManager *getItemDefManager() { return m_itemdef; } - const NodeDefManager *getNodeDefManager() { return m_nodedef; } - ICraftDefManager *getCraftDefManager() { return m_craftdef; } - ITextureSource *getTextureSource() { return m_texturesrc; } - IShaderSource *getShaderSource() { return m_shadersrc; } - ISoundManager *getSoundManager() { return m_soundmgr; } - scene::ISceneManager *getSceneManager() { return m_scenemgr; } - IRollbackManager *getRollbackManager() { return m_rollbackmgr; } - EmergeManager *getEmergeManager() { return m_emergemgr; } - ModMetadataDatabase *getModStorageDatabase() { return m_mod_storage_database; } - - scene::IAnimatedMesh *getMesh(const std::string &filename) { return NULL; } - bool checkLocalPrivilege(const std::string &priv) { return false; } - u16 allocateUnknownNodeId(const std::string &name) { return 0; } + ~TestGameDef() = default; void defineSomeNodes(); - virtual const std::vector<ModSpec> &getMods() const - { - static std::vector<ModSpec> testmodspec; - return testmodspec; - } - virtual const ModSpec* getModSpec(const std::string &modname) const { return NULL; } - virtual bool registerModStorage(ModMetadata *meta) { return true; } - virtual void unregisterModStorage(const std::string &name) {} bool joinModChannel(const std::string &channel); bool leaveModChannel(const std::string &channel); bool sendModChannelMessage(const std::string &channel, const std::string &message); @@ -81,39 +56,18 @@ public: } private: - IItemDefManager *m_itemdef = nullptr; - const NodeDefManager *m_nodedef = nullptr; - ICraftDefManager *m_craftdef = nullptr; - ITextureSource *m_texturesrc = nullptr; - IShaderSource *m_shadersrc = nullptr; - ISoundManager *m_soundmgr = nullptr; - scene::ISceneManager *m_scenemgr = nullptr; - IRollbackManager *m_rollbackmgr = nullptr; - EmergeManager *m_emergemgr = nullptr; - ModMetadataDatabase *m_mod_storage_database = nullptr; std::unique_ptr<ModChannelMgr> m_modchannel_mgr; }; TestGameDef::TestGameDef() : - m_mod_storage_database(new Database_Dummy()), + DummyGameDef(), m_modchannel_mgr(new ModChannelMgr()) { - m_itemdef = createItemDefManager(); - m_nodedef = createNodeDefManager(); - defineSomeNodes(); } -TestGameDef::~TestGameDef() -{ - delete m_itemdef; - delete m_nodedef; - delete m_mod_storage_database; -} - - void TestGameDef::defineSomeNodes() { IWritableItemDefManager *idef = (IWritableItemDefManager *)m_itemdef; @@ -185,6 +139,8 @@ void TestGameDef::defineSomeNodes() f = ContentFeatures(); f.name = itemdef.name; f.alpha = ALPHAMODE_BLEND; + f.light_propagates = true; + f.param_type = CPT_LIGHT; f.liquid_type = LIQUID_SOURCE; f.liquid_viscosity = 4; f.is_ground_content = true; diff --git a/src/unittest/test_voxelalgorithms.cpp b/src/unittest/test_voxelalgorithms.cpp index 0ffd24b7d..abe48893f 100644 --- a/src/unittest/test_voxelalgorithms.cpp +++ b/src/unittest/test_voxelalgorithms.cpp @@ -22,6 +22,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "gamedef.h" #include "voxelalgorithms.h" #include "util/numeric.h" +#include "dummymap.h" class TestVoxelAlgorithms : public TestBase { public: @@ -30,21 +31,21 @@ public: void runTests(IGameDef *gamedef); - void testVoxelLineIterator(const NodeDefManager *ndef); + void testVoxelLineIterator(); + void testLighting(IGameDef *gamedef); }; static TestVoxelAlgorithms g_test_instance; void TestVoxelAlgorithms::runTests(IGameDef *gamedef) { - const NodeDefManager *ndef = gamedef->getNodeDefManager(); - - TEST(testVoxelLineIterator, ndef); + TEST(testVoxelLineIterator); + TEST(testLighting, gamedef); } //////////////////////////////////////////////////////////////////////////////// -void TestVoxelAlgorithms::testVoxelLineIterator(const NodeDefManager *ndef) +void TestVoxelAlgorithms::testVoxelLineIterator() { // Test some lines // Do not test lines that start or end on the border of @@ -99,3 +100,65 @@ void TestVoxelAlgorithms::testVoxelLineIterator(const NodeDefManager *ndef) UASSERTEQ(int, actual_nodecount, nodecount); } } + +void TestVoxelAlgorithms::testLighting(IGameDef *gamedef) +{ + v3s16 pmin(-32, -32, -32); + v3s16 pmax(31, 31, 31); + v3s16 bpmin = getNodeBlockPos(pmin), bpmax = getNodeBlockPos(pmax); + DummyMap map(gamedef, bpmin, bpmax); + + // Make a 21x21x21 hollow box centered at the origin. + { + std::map<v3s16, MapBlock*> modified_blocks; + MMVManip vm(&map); + vm.initialEmerge(bpmin, bpmax, false); + s32 volume = vm.m_area.getVolume(); + for (s32 i = 0; i < volume; i++) + vm.m_data[i] = MapNode(CONTENT_AIR); + for (s16 z = -10; z <= 10; z++) + for (s16 y = -10; y <= 10; y++) + for (s16 x = -10; x <= 10; x++) + vm.setNodeNoEmerge(v3s16(x, y, z), MapNode(t_CONTENT_STONE)); + for (s16 z = -9; z <= 9; z++) + for (s16 y = -9; y <= 9; y++) + for (s16 x = -9; x <= 9; x++) + vm.setNodeNoEmerge(v3s16(x, y, z), MapNode(CONTENT_AIR)); + voxalgo::blit_back_with_light(&map, &vm, &modified_blocks); + } + + // Place two holes on the edges a torch in the center. + { + std::map<v3s16, MapBlock*> modified_blocks; + map.addNodeAndUpdate(v3s16(-10, 0, 0), MapNode(CONTENT_AIR), modified_blocks); + map.addNodeAndUpdate(v3s16(9, 10, -9), MapNode(t_CONTENT_WATER), modified_blocks); + map.addNodeAndUpdate(v3s16(0, 0, 0), MapNode(t_CONTENT_TORCH), modified_blocks); + } + + const NodeDefManager *ndef = gamedef->ndef(); + { + MapNode n = map.getNode(v3s16(9, 9, -9)); + UASSERTEQ(int, n.getLight(LIGHTBANK_NIGHT, ndef), 0); + UASSERTEQ(int, n.getLight(LIGHTBANK_DAY, ndef), 13); + } + { + MapNode n = map.getNode(v3s16(0, 1, 0)); + UASSERTEQ(int, n.getLight(LIGHTBANK_NIGHT, ndef), 12); + UASSERTEQ(int, n.getLight(LIGHTBANK_DAY, ndef), 12); + } + { + MapNode n = map.getNode(v3s16(-9, -1, 0)); + UASSERTEQ(int, n.getLight(LIGHTBANK_NIGHT, ndef), 3); + UASSERTEQ(int, n.getLight(LIGHTBANK_DAY, ndef), 12); + } + { + MapNode n = map.getNode(v3s16(-10, 0, 0)); + UASSERTEQ(int, n.getLight(LIGHTBANK_NIGHT, ndef), 3); + UASSERTEQ(int, n.getLight(LIGHTBANK_DAY, ndef), 14); + } + { + MapNode n = map.getNode(v3s16(-11, 0, 0)); + UASSERTEQ(int, n.getLight(LIGHTBANK_NIGHT, ndef), 2); + UASSERTEQ(int, n.getLight(LIGHTBANK_DAY, ndef), 15); + } +} |
