From 96fdd72d45221c03d9369c1edcddc83f27656fd4 Mon Sep 17 00:00:00 2001 From: Mattes D Date: Sun, 26 Feb 2017 23:03:24 +0100 Subject: Gen: Moved tests to a separate folder, unified shared sources. --- tests/CMakeLists.txt | 3 +- tests/Generating/Bindings.h | 15 ++ tests/Generating/CMakeLists.txt | 121 +++++++++++ tests/Generating/LoadablePieces.cpp | 179 ++++++++++++++++ tests/Generating/LuaState_Declaration.inc | 4 + tests/Generating/LuaState_Typedefs.inc | 19 ++ tests/Generating/PieceRotationTest.cpp | 170 +++++++++++++++ tests/Generating/Stubs.cpp | 290 ++++++++++++++++++++++++++ tests/Generating/Test.cubeset | 155 ++++++++++++++ tests/Generating/Test1.schematic | Bin 0 -> 184 bytes tests/LoadablePieces/Bindings.h | 15 -- tests/LoadablePieces/LoadablePieces.cpp | 179 ---------------- tests/LoadablePieces/LuaState_Declaration.inc | 4 - tests/LoadablePieces/LuaState_Typedefs.inc | 19 -- tests/LoadablePieces/Stubs.cpp | 290 -------------------------- tests/LoadablePieces/Test.cubeset | 155 -------------- tests/LoadablePieces/Test1.schematic | Bin 184 -> 0 bytes tests/PieceRotation/Bindings.h | 15 -- tests/PieceRotation/CMakeLists.txt | 102 --------- tests/PieceRotation/LuaState_Declaration.inc | 4 - tests/PieceRotation/LuaState_Typedefs.inc | 19 -- tests/PieceRotation/PieceRotationTest.cpp | 170 --------------- tests/PieceRotation/Stubs.cpp | 290 -------------------------- 23 files changed, 954 insertions(+), 1264 deletions(-) create mode 100644 tests/Generating/Bindings.h create mode 100644 tests/Generating/CMakeLists.txt create mode 100644 tests/Generating/LoadablePieces.cpp create mode 100644 tests/Generating/LuaState_Declaration.inc create mode 100644 tests/Generating/LuaState_Typedefs.inc create mode 100644 tests/Generating/PieceRotationTest.cpp create mode 100644 tests/Generating/Stubs.cpp create mode 100644 tests/Generating/Test.cubeset create mode 100644 tests/Generating/Test1.schematic delete mode 100644 tests/LoadablePieces/Bindings.h delete mode 100644 tests/LoadablePieces/LoadablePieces.cpp delete mode 100644 tests/LoadablePieces/LuaState_Declaration.inc delete mode 100644 tests/LoadablePieces/LuaState_Typedefs.inc delete mode 100644 tests/LoadablePieces/Stubs.cpp delete mode 100644 tests/LoadablePieces/Test.cubeset delete mode 100644 tests/LoadablePieces/Test1.schematic delete mode 100644 tests/PieceRotation/Bindings.h delete mode 100644 tests/PieceRotation/CMakeLists.txt delete mode 100644 tests/PieceRotation/LuaState_Declaration.inc delete mode 100644 tests/PieceRotation/LuaState_Typedefs.inc delete mode 100644 tests/PieceRotation/PieceRotationTest.cpp delete mode 100644 tests/PieceRotation/Stubs.cpp (limited to 'tests') diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 4b6e64a23..59a62e1bb 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -9,10 +9,9 @@ add_subdirectory(ByteBuffer) add_subdirectory(ChunkData) add_subdirectory(CompositeChat) add_subdirectory(FastRandom) +add_subdirectory(Generating) add_subdirectory(HTTP) -add_subdirectory(LoadablePieces) add_subdirectory(LuaThreadStress) add_subdirectory(Network) add_subdirectory(OSSupport) -add_subdirectory(PieceRotation) add_subdirectory(SchematicFileSerializer) diff --git a/tests/Generating/Bindings.h b/tests/Generating/Bindings.h new file mode 100644 index 000000000..490830ac3 --- /dev/null +++ b/tests/Generating/Bindings.h @@ -0,0 +1,15 @@ + +// Bindings.h + +// Dummy include file needed for LuaState to compile successfully + + + + +struct lua_State; + +int tolua_AllToLua_open(lua_State * a_LuaState); + + + + diff --git a/tests/Generating/CMakeLists.txt b/tests/Generating/CMakeLists.txt new file mode 100644 index 000000000..4efb9dbe2 --- /dev/null +++ b/tests/Generating/CMakeLists.txt @@ -0,0 +1,121 @@ +enable_testing() + +include_directories(${CMAKE_SOURCE_DIR}/src/) +include_directories(SYSTEM ${CMAKE_SOURCE_DIR}/lib/) +include_directories(${CMAKE_CURRENT_SOURCE_DIR}) + +add_definitions(-DTEST_GLOBALS=1) + +set (SHARED_SRCS + ${CMAKE_SOURCE_DIR}/src/BiomeDef.cpp + ${CMAKE_SOURCE_DIR}/src/BlockArea.cpp + ${CMAKE_SOURCE_DIR}/src/Cuboid.cpp + ${CMAKE_SOURCE_DIR}/src/ChunkData.cpp + ${CMAKE_SOURCE_DIR}/src/StringCompression.cpp + ${CMAKE_SOURCE_DIR}/src/StringUtils.cpp + + ${CMAKE_SOURCE_DIR}/src/Bindings/LuaState.cpp + + ${CMAKE_SOURCE_DIR}/src/Generating/ChunkDesc.cpp + ${CMAKE_SOURCE_DIR}/src/Generating/PiecePool.cpp + ${CMAKE_SOURCE_DIR}/src/Generating/Prefab.cpp + ${CMAKE_SOURCE_DIR}/src/Generating/PrefabPiecePool.cpp + ${CMAKE_SOURCE_DIR}/src/Generating/VerticalLimit.cpp + ${CMAKE_SOURCE_DIR}/src/Generating/VerticalStrategy.cpp + + ${CMAKE_SOURCE_DIR}/src/Noise/Noise.cpp + + ${CMAKE_SOURCE_DIR}/src/OSSupport/CriticalSection.cpp + ${CMAKE_SOURCE_DIR}/src/OSSupport/Event.cpp + ${CMAKE_SOURCE_DIR}/src/OSSupport/File.cpp + ${CMAKE_SOURCE_DIR}/src/OSSupport/GZipFile.cpp + ${CMAKE_SOURCE_DIR}/src/OSSupport/StackTrace.cpp + + ${CMAKE_SOURCE_DIR}/src/WorldStorage/FastNBT.cpp + ${CMAKE_SOURCE_DIR}/src/WorldStorage/SchematicFileSerializer.cpp +) + +set (SHARED_HDRS + ${CMAKE_SOURCE_DIR}/src/BiomeDef.h + ${CMAKE_SOURCE_DIR}/src/BlockArea.h + ${CMAKE_SOURCE_DIR}/src/Cuboid.h + ${CMAKE_SOURCE_DIR}/src/ChunkData.h + ${CMAKE_SOURCE_DIR}/src/Globals.h + ${CMAKE_SOURCE_DIR}/src/StringCompression.h + ${CMAKE_SOURCE_DIR}/src/StringUtils.h + + ${CMAKE_SOURCE_DIR}/src/Bindings/LuaState.h + + ${CMAKE_SOURCE_DIR}/src/Generating/ChunkDesc.h + ${CMAKE_SOURCE_DIR}/src/Generating/PiecePool.h + ${CMAKE_SOURCE_DIR}/src/Generating/Prefab.h + ${CMAKE_SOURCE_DIR}/src/Generating/PrefabPiecePool.h + ${CMAKE_SOURCE_DIR}/src/Generating/VerticalLimit.h + ${CMAKE_SOURCE_DIR}/src/Generating/VerticalStrategy.h + + ${CMAKE_SOURCE_DIR}/src/Noise/Noise.h + + ${CMAKE_SOURCE_DIR}/src/OSSupport/CriticalSection.h + ${CMAKE_SOURCE_DIR}/src/OSSupport/Event.h + ${CMAKE_SOURCE_DIR}/src/OSSupport/File.h + ${CMAKE_SOURCE_DIR}/src/OSSupport/GZipFile.h + ${CMAKE_SOURCE_DIR}/src/OSSupport/StackTrace.h + + ${CMAKE_SOURCE_DIR}/src/WorldStorage/FastNBT.h + ${CMAKE_SOURCE_DIR}/src/WorldStorage/SchematicFileSerializer.h +) + +set (STUBS + Stubs.cpp + LuaState_Typedefs.inc + LuaState_Declaration.inc + Bindings.h +) + + +if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") + add_flags_cxx("-Wno-error=global-constructors") + add_flags_cxx("-Wno-error=switch-enum") +endif() + + +if (MSVC) + # Add the MSVC-specific LeakFinder sources: + list (APPEND SHARED_SRCS ${CMAKE_SOURCE_DIR}/src/LeakFinder.cpp ${CMAKE_SOURCE_DIR}/src/StackWalker.cpp) + list (APPEND SHARED_HDRS ${CMAKE_SOURCE_DIR}/src/LeakFinder.h ${CMAKE_SOURCE_DIR}/src/StackWalker.h) +endif() + +add_library(GeneratorTestingSupport STATIC ${SHARED_SRCS} ${SHARED_HDRS} ${STUBS}) +target_link_libraries(GeneratorTestingSupport tolualib zlib) +source_group("Stubs" FILES ${STUBS}) + + + + + +# LoadablePieces test: +source_group("Data files" FILES Test.cubeset Test1.schematic) +add_executable(LoadablePieces LoadablePieces.cpp Test.cubeset Test1.schematic) +target_link_libraries(LoadablePieces GeneratorTestingSupport) +add_test(NAME LoadablePieces-test WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} COMMAND LoadablePieces) + + + + + +# PieceRotation test: +add_executable(PieceRotation PieceRotationTest.cpp) +target_link_libraries(PieceRotation GeneratorTestingSupport) +add_test(NAME PieceRotation-test WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} COMMAND PieceRotation) + + + + + +# Put the projects into solution folders (MSVC): +set_target_properties( + GeneratorTestingSupport + LoadablePieces + PieceRotation + PROPERTIES FOLDER Tests/Generating +) diff --git a/tests/Generating/LoadablePieces.cpp b/tests/Generating/LoadablePieces.cpp new file mode 100644 index 000000000..58b65464d --- /dev/null +++ b/tests/Generating/LoadablePieces.cpp @@ -0,0 +1,179 @@ + +// LoadablePieces.cpp + +// Implements the LoadablePieces test main entrypoint + +#include "Globals.h" +#ifdef _WIN32 + #include + #define GetCurrentFolder _getcwd +#else + #include + #define GetCurrentFolder getcwd +#endif +#include "Generating/PrefabPiecePool.h" + + + + + +static int DoLoaderTest(void) +{ + cPrefabPiecePool test; + auto res = test.LoadFromFile("Test.cubeset", true); + if (!res) + { + LOGWARNING("Loading from file \"Test.cubeset\" failed."); + return 1; + } + LOG("Loaded %u regular pieces and %u starting pieces", static_cast(test.GetAllPiecesCount()), static_cast(test.GetStartingPiecesCount())); + + // Check that we loaded all the pieces: + testassert(test.GetAllPiecesCount() == 1); + testassert(test.GetStartingPiecesCount() == 1); + + return 0; +} + + + + + +static int DoParserTest(void) +{ + // Create one static prefab to test the parser: + static const cPrefab::sDef testPrefabDef = + { + // Size: + 7, 6, 7, // SizeX = 7, SizeY = 6, SizeZ = 7 + + // Hitbox (relative to bounding box): + 0, 0, 0, // MinX, MinY, MinZ + 6, 5, 6, // MaxX, MaxY, MaxZ + + // Block definitions: + ".: 0: 0\n" /* 0 */ + "a:112: 0\n" /* netherbrick */ + "b:113: 0\n" /* netherbrickfence */, + + // Block data: + // Level 1 + "aaaaaaa" + "aaaaaaa" + "aaaaaaa" + "aaaaaaa" + "aaaaaaa" + "aaaaaaa" + "aaaaaaa" + + // Level 2 + "aa...aa" + "a.....a" + "......." + "......." + "......." + "a.....a" + "aa...aa" + + // Level 3 + "aa...aa" + "a.....a" + "......." + "......." + "......." + "a.....a" + "aa...aa" + + // Level 4 + "aa...aa" + "a.....a" + "......." + "......." + "......." + "a.....a" + "aa...aa" + + // Level 5 + "aabbbaa" + "a.....a" + "b.....b" + "b.....b" + "b.....b" + "a.....a" + "aabbbaa" + + // Level 6 + "aaaaaaa" + "a.....a" + "a.....a" + "a.....a" + "a.....a" + "a.....a" + "aaaaaaa", + + // Connections: + "0: 0, 3, 2: 4\n" + "0: 2, 3, 0: 2\n", + + // AllowedRotations: + 7, /* 1, 2, 3 CCW rotations */ + + // Merge strategy: + cBlockArea::msImprint, + + // ExtendFloorStrategy: + cPrefab::efsNone, + + // DefaultWeight: + 10, + + // DepthWeight: + "", + + // AddWeightIfSame: + 1000, + + // MoveToGround: + false, + }; + + cPrefab testPrefab(testPrefabDef); + cPiece & prefabAsPiece(testPrefab); // GetConnectors() is private in cPrefab, need to cast to parent cPiece where it is public + if (prefabAsPiece.GetConnectors().size() != 2) + { + LOGWARNING("Piece parsing failed, connectors not parsed properly. Expected 2 connectors, got %u", static_cast(prefabAsPiece.GetConnectors().size())); + } + return 0; +} + + + + + +int main(int argc, char * argv[]) +{ + LOGD("Test started"); + + // Print the current directory for reference: + char folder[FILENAME_MAX]; + GetCurrentFolder(folder, sizeof(folder)); + LOG("Running cPrefabPiecePool test from folder \"%s\".", folder); + + // Run the Loader test: + int res = DoLoaderTest(); + LOG("cPrefabPiecePool loading test done: %s", (res == 0) ? "success" : "failure"); + if (res != 0) + { + return res; + } + + // Run the Parser test: + res = DoParserTest(); + LOG("cPrefab parser test done: %s", (res == 0) ? "success" : "failure"); + + return res; +} + + + + diff --git a/tests/Generating/LuaState_Declaration.inc b/tests/Generating/LuaState_Declaration.inc new file mode 100644 index 000000000..4019b26c6 --- /dev/null +++ b/tests/Generating/LuaState_Declaration.inc @@ -0,0 +1,4 @@ + +// LuaState_Declaration.inc + +// Dummy include file needed for LuaState to compile successfully diff --git a/tests/Generating/LuaState_Typedefs.inc b/tests/Generating/LuaState_Typedefs.inc new file mode 100644 index 000000000..5eba7c6f8 --- /dev/null +++ b/tests/Generating/LuaState_Typedefs.inc @@ -0,0 +1,19 @@ + +// LuaState_Typedefs.inc + +// Dummy include file needed for LuaState to compile successfully + + + + + +// Forward-declare classes that are used in the API but never called: +struct HTTPRequest; +struct HTTPTemplateRequest; +class cPluginLua; +class cBoundingBox; +template class cItemCallback; +class cEntity; + + + diff --git a/tests/Generating/PieceRotationTest.cpp b/tests/Generating/PieceRotationTest.cpp new file mode 100644 index 000000000..ace3bd489 --- /dev/null +++ b/tests/Generating/PieceRotationTest.cpp @@ -0,0 +1,170 @@ +// PieceRotation.cpp + +// Implements the tests for cPiece::cConnector::eDirection rotations + +#include "Globals.h" +#include +#include +#include "Generating/PiecePool.h" + + + + + +static cPiece::cConnector::eDirection g_AllDirections[] = +{ + cPiece::cConnector::dirXM, + cPiece::cConnector::dirXP, + cPiece::cConnector::dirYM, + cPiece::cConnector::dirYP, + cPiece::cConnector::dirZM, + cPiece::cConnector::dirZP, + cPiece::cConnector::dirYM_XM_ZM, + cPiece::cConnector::dirYM_XM_ZP, + cPiece::cConnector::dirYM_XP_ZM, + cPiece::cConnector::dirYM_XP_ZP, + cPiece::cConnector::dirYP_XM_ZM, + cPiece::cConnector::dirYP_XM_ZP, + cPiece::cConnector::dirYP_XP_ZM, + cPiece::cConnector::dirYP_XP_ZP, +}; + + + + + +class cTestFailure: public std::exception +{ +public: + cTestFailure(const char * a_Expression, const char * a_FileName, const int a_Line): + std::exception(), + m_Expression(a_Expression), + m_FileName(a_FileName), + m_Line(a_Line) + { + } + + const std::string m_Expression; + const std::string m_FileName; + const int m_Line; +}; + + + + + +#define EXPECT(X) if (!(X)) \ + { \ + ASSERT(X); \ + throw cTestFailure(#X, __FILE__, __LINE__); \ + } + + + + + +/** Tests that rotating a direction in one way and then the opposite way produces the original direction. */ +static void testBackAndForth() +{ + for (size_t i = 0; i < ARRAYCOUNT(g_AllDirections); ++i) + { + auto rotated = cPiece::cConnector::RotateDirectionCW(g_AllDirections[i]); + auto back = cPiece::cConnector::RotateDirectionCCW(rotated); + EXPECT(back == g_AllDirections[i]); + } + for (size_t i = 0; i < ARRAYCOUNT(g_AllDirections); ++i) + { + auto rotated = cPiece::cConnector::RotateDirectionCCW(g_AllDirections[i]); + auto back = cPiece::cConnector::RotateDirectionCW(rotated); + EXPECT(back == g_AllDirections[i]); + } +} + + + + + +/** Tests rotating the direction 360 degrees. */ +static void testFullRotation() +{ + // Rotate 90 degrees CCW four times: + for (size_t i = 0; i < ARRAYCOUNT(g_AllDirections); ++i) + { + auto d = g_AllDirections[i]; + for (int j = 0; j < 4; ++j) + { + d = cPiece::cConnector::RotateDirectionCCW(d); + } + EXPECT(d == g_AllDirections[i]); + } + + // Rotate 90 degrees CW four times: + for (size_t i = 0; i < ARRAYCOUNT(g_AllDirections); ++i) + { + auto d = g_AllDirections[i]; + for (int j = 0; j < 4; ++j) + { + d = cPiece::cConnector::RotateDirectionCW(d); + } + EXPECT(d == g_AllDirections[i]); + } + + // Rotate 180 degrees twice: + for (size_t i = 0; i < ARRAYCOUNT(g_AllDirections); ++i) + { + auto d = g_AllDirections[i]; + d = cPiece::cConnector::RotateDirection(d); + d = cPiece::cConnector::RotateDirection(d); + EXPECT(d == g_AllDirections[i]); + } +} + + + + + +/** Tests that no two values are rotated onto the same destination value. */ +template +static void testPermutation(Fn & a_Fn) +{ + std::map numDest; + for (size_t i = 0; i < ARRAYCOUNT(g_AllDirections); ++i) + { + auto d = a_Fn(g_AllDirections[i]); + EXPECT(numDest[d] == 0); + numDest[d] = 1; + } +} + + + + + +int main(void) +{ + LOG("PieceRotation test starting."); + try + { + testBackAndForth(); + testFullRotation(); + testPermutation(cPiece::cConnector::RotateDirection); + testPermutation(cPiece::cConnector::RotateDirectionCW); + testPermutation(cPiece::cConnector::RotateDirectionCCW); + } + catch (const cTestFailure & f) + { + LOGERROR("Test failed:\tExpression: %s\n\tFile: %s (%d)", f.m_Expression.c_str(), f.m_FileName.c_str(), f.m_Line); + return 1; + } + catch (const std::exception & exc) + { + LOGERROR("Exception caught: %s", exc.what()); + return 2; + } + LOG("PieceRotation test succeeded."); + return 0; +} + + + + diff --git a/tests/Generating/Stubs.cpp b/tests/Generating/Stubs.cpp new file mode 100644 index 000000000..0ad3eb365 --- /dev/null +++ b/tests/Generating/Stubs.cpp @@ -0,0 +1,290 @@ + +// Stubs.cpp + +// Implements stubs of various Cuberite methods that are needed for linking but not for runtime +// This is required so that we don't bring in the entire Cuberite via dependencies + +#include "Globals.h" +#include "BlockInfo.h" +#include "Bindings.h" +#include "Bindings/DeprecatedBindings.h" +#include "Bindings/LuaJson.h" +#include "Bindings/ManualBindings.h" +#include "BlockEntities/BlockEntity.h" +#include "Blocks/BlockHandler.h" +#include "Generating/ChunkDesc.h" +#include "DeadlockDetect.h" + + + + + +// fwd: +struct lua_State; + + + + + +// Prototypes, needed by clang: +extern "C" int luaopen_lsqlite3(lua_State * a_LuaState); +extern "C" int luaopen_lxp(lua_State * a_LuaState); + + + + + +void cManualBindings::Bind(lua_State * a_LuaState) +{ +} + + + + + +void DeprecatedBindings::Bind(lua_State * a_LuaState) +{ +} + + + + + +void cLuaJson::Bind(cLuaState & a_LuaState) +{ +} + + + + + +int tolua_AllToLua_open(lua_State * a_LuaState) +{ + return 0; +} + + + + + +extern "C" int luaopen_lsqlite3(lua_State * a_LuaState) +{ + return 0; +} + + + + + +extern "C" int luaopen_lxp(lua_State * a_LuaState) +{ + return 0; +} + + + + + +cBlockInfo::~cBlockInfo() +{ +} + + + + + +void cBlockInfo::Initialize(cBlockInfo::cBlockInfoArray & a_BlockInfos) +{ + // The piece-loading code uses the handlers for rotations, so we need valid handlers + // Insert dummy handlers: + for (size_t i = 0; i < ARRAYCOUNT(a_BlockInfos); i++) + { + a_BlockInfos[i].m_Handler = new cBlockHandler(static_cast(i)); + } +} + + + + + +cBlockHandler::cBlockHandler(BLOCKTYPE a_BlockType) +{ +} + + + + + +bool cBlockHandler::GetPlacementBlockTypeMeta( + cChunkInterface & a_ChunkInterface, cPlayer * a_Player, + int a_BlockX, int a_BlockY, int a_BlockZ, eBlockFace a_BlockFace, + int a_CursorX, int a_CursorY, int a_CursorZ, + BLOCKTYPE & a_BlockType, NIBBLETYPE & a_BlockMeta +) +{ + return true; +} + + + + + +void cBlockHandler::OnUpdate(cChunkInterface & cChunkInterface, cWorldInterface & a_WorldInterface, cBlockPluginInterface & a_PluginInterface, cChunk & a_Chunk, int a_BlockX, int a_BlockY, int a_BlockZ) +{ +} + + + + + +void cBlockHandler::OnPlacedByPlayer(cChunkInterface & a_ChunkInterface, cWorldInterface & a_WorldInterface, cPlayer * a_Player, const sSetBlock & a_BlockChange) +{ +} + + + + + +void cBlockHandler::OnDestroyedByPlayer(cChunkInterface & a_ChunkInterface, cWorldInterface & a_WorldInterface, cPlayer * a_Player, int a_BlockX, int a_BlockY, int a_BlockZ) +{ +} + + + + + +void cBlockHandler::OnPlaced(cChunkInterface & a_ChunkInterface, cWorldInterface & a_WorldInterface, int a_BlockX, int a_BlockY, int a_BlockZ, BLOCKTYPE a_BlockType, NIBBLETYPE a_BlockMeta) +{ +} + + + + + +void cBlockHandler::OnDestroyed(cChunkInterface & a_ChunkInterface, cWorldInterface & a_WorldInterface, int a_BlockX, int a_BlockY, int a_BlockZ) +{ +} + + + + + +void cBlockHandler::NeighborChanged(cChunkInterface & a_ChunkInterface, int a_BlockX, int a_BlockY, int a_BlockZ, eBlockFace a_WhichNeighbor) +{ +} + + + + + +void cBlockHandler::ConvertToPickups(cItems & a_Pickups, NIBBLETYPE a_BlockMeta) +{ +} + + + + + +void cBlockHandler::DropBlock(cChunkInterface & a_ChunkInterface, cWorldInterface & a_WorldInterface, cBlockPluginInterface & a_BlockPluginInterface, cEntity * a_Digger, int a_BlockX, int a_BlockY, int a_BlockZ, bool a_CanDrop) +{ +} + + + + + +bool cBlockHandler::CanBeAt(cChunkInterface & a_ChunkInterface, int a_BlockX, int a_BlockY, int a_BlockZ, const cChunk & a_Chunk) +{ + return true; +} + + + + + +bool cBlockHandler::IsUseable() +{ + return false; +} + + + + + +bool cBlockHandler::IsClickedThrough(void) +{ + return false; +} + + + + + +bool cBlockHandler::DoesIgnoreBuildCollision(void) +{ + return (m_BlockType == E_BLOCK_AIR); +} + + + + + +bool cBlockHandler::DoesDropOnUnsuitable(void) +{ + return true; +} + + + + + +void cBlockHandler::Check(cChunkInterface & a_ChunkInterface, cBlockPluginInterface & a_PluginInterface, int a_RelX, int a_RelY, int a_RelZ, cChunk & a_Chunk) +{ +} + + + + + +ColourID cBlockHandler::GetMapBaseColourID(NIBBLETYPE a_Meta) +{ + return 0; +} + + + + + +bool cBlockHandler::IsInsideBlock(const Vector3d & a_Position, const BLOCKTYPE a_BlockType, const NIBBLETYPE a_BlockMeta) +{ + return true; +} + + + + + +cBlockEntity * cBlockEntity::CreateByBlockType(BLOCKTYPE a_BlockType, NIBBLETYPE a_BlockMeta, int a_BlockX, int a_BlockY, int a_BlockZ, cWorld * a_World) +{ + return nullptr; +} + + + + + +void cDeadlockDetect::TrackCriticalSection(cCriticalSection & a_CS, const AString & a_Name) +{ +} + + + + + +void cDeadlockDetect::UntrackCriticalSection(cCriticalSection & a_CS) +{ +} + + + + diff --git a/tests/Generating/Test.cubeset b/tests/Generating/Test.cubeset new file mode 100644 index 000000000..956e6684e --- /dev/null +++ b/tests/Generating/Test.cubeset @@ -0,0 +1,155 @@ + +-- Test.cubeset + +-- This simple cubeset file is used for testing the cPrefabPiecePool loader. + + + + + +Cubeset = +{ + Metadata = + { + CubesetFormatVersion = 1, + }, + + Pieces = + { + -- One piece with inline definition: + { + Size = + { + x = 4, + y = 4, + z = 4, + }, + Hitbox = + { + MinX = 0, + MinY = 0, + MinZ = 0, + MaxX = 3, + MaxY = 3, + MaxZ = 3, + }, + BlockDefinitions = + { + ".: 0: 0", -- air + "a: 1: 0", -- stone + "b: 24: 0", -- sandstone + "c: 8: 0", -- water + "d: 85: 0", -- fence + "m: 19: 0", -- sponge + }, + BlockData = + { + -- Level 0 + "aaaa", -- 0 + "aaaa", -- 1 + "aaaa", -- 2 + "aaaa", -- 3 + + -- Level 1 + "bbbb", -- 0 + "bccb", -- 1 + "bccb", -- 2 + "bbbb", -- 3 + + -- Level 2 + "bbbb", -- 0 + "bccb", -- 1 + "bccb", -- 2 + "bbbb", -- 3 + + -- Level 3 + "bbbb", -- 0 + "bccb", -- 1 + "bccb", -- 2 + "bbbb", -- 3 + }, + Connectors = + { + { + Type = 2, + RelX = 2, + RelY = 2, + RelZ = 0, + Direction = 2, -- Z- + }, + { + Type = 2, + RelX = 0, + RelY = 2, + RelZ = 1, + Direction = 4, -- X- + }, + { + Type = 2, + RelX = 1, + RelY = 2, + RelZ = 3, + Direction = 3, -- Z+ + }, + { + Type = 2, + RelX = 3, + RelY = 2, + RelZ = 2, + Direction = 5, -- X+ + }, + }, + Metadata = + { + ["DefaultWeight"] = "100", + ["AllowedRotations"] = "7", + ["MergeStrategy"] = "msSpongePrint", + ["IsStarting"] = "1", + ["DepthWeight"] = "", + ["ExpandFloorStrategy"] = "None", + ["MoveToGround"] = "1", + ["AddWeightIfSame"] = "0", + ["VerticalStrategy"] = "Fixed|150", + }, + }, + + -- One piece with external definition: + { + Hitbox = + { + MinX = 0, + MinY = 0, + MinZ = 0, + MaxX = 3, + MaxY = 3, + MaxZ = 3, + }, + SchematicFileName = "Test1.schematic", + Connectors = + { + { + Type = 2, + RelX = 2, + RelY = 2, + RelZ = 0, + Direction = 2, -- Z- + }, + }, + Metadata = + { + ["DefaultWeight"] = "100", + ["AllowedRotations"] = "7", + ["MergeStrategy"] = "msSpongePrint", + ["IsStarting"] = "0", + ["DepthWeight"] = "", + ["ExpandFloorStrategy"] = "None", + ["MoveToGround"] = "0", + ["AddWeightIfSame"] = "0", + }, + }, + }, -- Pieces +} + + + + diff --git a/tests/Generating/Test1.schematic b/tests/Generating/Test1.schematic new file mode 100644 index 000000000..6fe19e9db Binary files /dev/null and b/tests/Generating/Test1.schematic differ diff --git a/tests/LoadablePieces/Bindings.h b/tests/LoadablePieces/Bindings.h deleted file mode 100644 index 490830ac3..000000000 --- a/tests/LoadablePieces/Bindings.h +++ /dev/null @@ -1,15 +0,0 @@ - -// Bindings.h - -// Dummy include file needed for LuaState to compile successfully - - - - -struct lua_State; - -int tolua_AllToLua_open(lua_State * a_LuaState); - - - - diff --git a/tests/LoadablePieces/LoadablePieces.cpp b/tests/LoadablePieces/LoadablePieces.cpp deleted file mode 100644 index 58b65464d..000000000 --- a/tests/LoadablePieces/LoadablePieces.cpp +++ /dev/null @@ -1,179 +0,0 @@ - -// LoadablePieces.cpp - -// Implements the LoadablePieces test main entrypoint - -#include "Globals.h" -#ifdef _WIN32 - #include - #define GetCurrentFolder _getcwd -#else - #include - #define GetCurrentFolder getcwd -#endif -#include "Generating/PrefabPiecePool.h" - - - - - -static int DoLoaderTest(void) -{ - cPrefabPiecePool test; - auto res = test.LoadFromFile("Test.cubeset", true); - if (!res) - { - LOGWARNING("Loading from file \"Test.cubeset\" failed."); - return 1; - } - LOG("Loaded %u regular pieces and %u starting pieces", static_cast(test.GetAllPiecesCount()), static_cast(test.GetStartingPiecesCount())); - - // Check that we loaded all the pieces: - testassert(test.GetAllPiecesCount() == 1); - testassert(test.GetStartingPiecesCount() == 1); - - return 0; -} - - - - - -static int DoParserTest(void) -{ - // Create one static prefab to test the parser: - static const cPrefab::sDef testPrefabDef = - { - // Size: - 7, 6, 7, // SizeX = 7, SizeY = 6, SizeZ = 7 - - // Hitbox (relative to bounding box): - 0, 0, 0, // MinX, MinY, MinZ - 6, 5, 6, // MaxX, MaxY, MaxZ - - // Block definitions: - ".: 0: 0\n" /* 0 */ - "a:112: 0\n" /* netherbrick */ - "b:113: 0\n" /* netherbrickfence */, - - // Block data: - // Level 1 - "aaaaaaa" - "aaaaaaa" - "aaaaaaa" - "aaaaaaa" - "aaaaaaa" - "aaaaaaa" - "aaaaaaa" - - // Level 2 - "aa...aa" - "a.....a" - "......." - "......." - "......." - "a.....a" - "aa...aa" - - // Level 3 - "aa...aa" - "a.....a" - "......." - "......." - "......." - "a.....a" - "aa...aa" - - // Level 4 - "aa...aa" - "a.....a" - "......." - "......." - "......." - "a.....a" - "aa...aa" - - // Level 5 - "aabbbaa" - "a.....a" - "b.....b" - "b.....b" - "b.....b" - "a.....a" - "aabbbaa" - - // Level 6 - "aaaaaaa" - "a.....a" - "a.....a" - "a.....a" - "a.....a" - "a.....a" - "aaaaaaa", - - // Connections: - "0: 0, 3, 2: 4\n" - "0: 2, 3, 0: 2\n", - - // AllowedRotations: - 7, /* 1, 2, 3 CCW rotations */ - - // Merge strategy: - cBlockArea::msImprint, - - // ExtendFloorStrategy: - cPrefab::efsNone, - - // DefaultWeight: - 10, - - // DepthWeight: - "", - - // AddWeightIfSame: - 1000, - - // MoveToGround: - false, - }; - - cPrefab testPrefab(testPrefabDef); - cPiece & prefabAsPiece(testPrefab); // GetConnectors() is private in cPrefab, need to cast to parent cPiece where it is public - if (prefabAsPiece.GetConnectors().size() != 2) - { - LOGWARNING("Piece parsing failed, connectors not parsed properly. Expected 2 connectors, got %u", static_cast(prefabAsPiece.GetConnectors().size())); - } - return 0; -} - - - - - -int main(int argc, char * argv[]) -{ - LOGD("Test started"); - - // Print the current directory for reference: - char folder[FILENAME_MAX]; - GetCurrentFolder(folder, sizeof(folder)); - LOG("Running cPrefabPiecePool test from folder \"%s\".", folder); - - // Run the Loader test: - int res = DoLoaderTest(); - LOG("cPrefabPiecePool loading test done: %s", (res == 0) ? "success" : "failure"); - if (res != 0) - { - return res; - } - - // Run the Parser test: - res = DoParserTest(); - LOG("cPrefab parser test done: %s", (res == 0) ? "success" : "failure"); - - return res; -} - - - - diff --git a/tests/LoadablePieces/LuaState_Declaration.inc b/tests/LoadablePieces/LuaState_Declaration.inc deleted file mode 100644 index 4019b26c6..000000000 --- a/tests/LoadablePieces/LuaState_Declaration.inc +++ /dev/null @@ -1,4 +0,0 @@ - -// LuaState_Declaration.inc - -// Dummy include file needed for LuaState to compile successfully diff --git a/tests/LoadablePieces/LuaState_Typedefs.inc b/tests/LoadablePieces/LuaState_Typedefs.inc deleted file mode 100644 index 5eba7c6f8..000000000 --- a/tests/LoadablePieces/LuaState_Typedefs.inc +++ /dev/null @@ -1,19 +0,0 @@ - -// LuaState_Typedefs.inc - -// Dummy include file needed for LuaState to compile successfully - - - - - -// Forward-declare classes that are used in the API but never called: -struct HTTPRequest; -struct HTTPTemplateRequest; -class cPluginLua; -class cBoundingBox; -template class cItemCallback; -class cEntity; - - - diff --git a/tests/LoadablePieces/Stubs.cpp b/tests/LoadablePieces/Stubs.cpp deleted file mode 100644 index 0ad3eb365..000000000 --- a/tests/LoadablePieces/Stubs.cpp +++ /dev/null @@ -1,290 +0,0 @@ - -// Stubs.cpp - -// Implements stubs of various Cuberite methods that are needed for linking but not for runtime -// This is required so that we don't bring in the entire Cuberite via dependencies - -#include "Globals.h" -#include "BlockInfo.h" -#include "Bindings.h" -#include "Bindings/DeprecatedBindings.h" -#include "Bindings/LuaJson.h" -#include "Bindings/ManualBindings.h" -#include "BlockEntities/BlockEntity.h" -#include "Blocks/BlockHandler.h" -#include "Generating/ChunkDesc.h" -#include "DeadlockDetect.h" - - - - - -// fwd: -struct lua_State; - - - - - -// Prototypes, needed by clang: -extern "C" int luaopen_lsqlite3(lua_State * a_LuaState); -extern "C" int luaopen_lxp(lua_State * a_LuaState); - - - - - -void cManualBindings::Bind(lua_State * a_LuaState) -{ -} - - - - - -void DeprecatedBindings::Bind(lua_State * a_LuaState) -{ -} - - - - - -void cLuaJson::Bind(cLuaState & a_LuaState) -{ -} - - - - - -int tolua_AllToLua_open(lua_State * a_LuaState) -{ - return 0; -} - - - - - -extern "C" int luaopen_lsqlite3(lua_State * a_LuaState) -{ - return 0; -} - - - - - -extern "C" int luaopen_lxp(lua_State * a_LuaState) -{ - return 0; -} - - - - - -cBlockInfo::~cBlockInfo() -{ -} - - - - - -void cBlockInfo::Initialize(cBlockInfo::cBlockInfoArray & a_BlockInfos) -{ - // The piece-loading code uses the handlers for rotations, so we need valid handlers - // Insert dummy handlers: - for (size_t i = 0; i < ARRAYCOUNT(a_BlockInfos); i++) - { - a_BlockInfos[i].m_Handler = new cBlockHandler(static_cast(i)); - } -} - - - - - -cBlockHandler::cBlockHandler(BLOCKTYPE a_BlockType) -{ -} - - - - - -bool cBlockHandler::GetPlacementBlockTypeMeta( - cChunkInterface & a_ChunkInterface, cPlayer * a_Player, - int a_BlockX, int a_BlockY, int a_BlockZ, eBlockFace a_BlockFace, - int a_CursorX, int a_CursorY, int a_CursorZ, - BLOCKTYPE & a_BlockType, NIBBLETYPE & a_BlockMeta -) -{ - return true; -} - - - - - -void cBlockHandler::OnUpdate(cChunkInterface & cChunkInterface, cWorldInterface & a_WorldInterface, cBlockPluginInterface & a_PluginInterface, cChunk & a_Chunk, int a_BlockX, int a_BlockY, int a_BlockZ) -{ -} - - - - - -void cBlockHandler::OnPlacedByPlayer(cChunkInterface & a_ChunkInterface, cWorldInterface & a_WorldInterface, cPlayer * a_Player, const sSetBlock & a_BlockChange) -{ -} - - - - - -void cBlockHandler::OnDestroyedByPlayer(cChunkInterface & a_ChunkInterface, cWorldInterface & a_WorldInterface, cPlayer * a_Player, int a_BlockX, int a_BlockY, int a_BlockZ) -{ -} - - - - - -void cBlockHandler::OnPlaced(cChunkInterface & a_ChunkInterface, cWorldInterface & a_WorldInterface, int a_BlockX, int a_BlockY, int a_BlockZ, BLOCKTYPE a_BlockType, NIBBLETYPE a_BlockMeta) -{ -} - - - - - -void cBlockHandler::OnDestroyed(cChunkInterface & a_ChunkInterface, cWorldInterface & a_WorldInterface, int a_BlockX, int a_BlockY, int a_BlockZ) -{ -} - - - - - -void cBlockHandler::NeighborChanged(cChunkInterface & a_ChunkInterface, int a_BlockX, int a_BlockY, int a_BlockZ, eBlockFace a_WhichNeighbor) -{ -} - - - - - -void cBlockHandler::ConvertToPickups(cItems & a_Pickups, NIBBLETYPE a_BlockMeta) -{ -} - - - - - -void cBlockHandler::DropBlock(cChunkInterface & a_ChunkInterface, cWorldInterface & a_WorldInterface, cBlockPluginInterface & a_BlockPluginInterface, cEntity * a_Digger, int a_BlockX, int a_BlockY, int a_BlockZ, bool a_CanDrop) -{ -} - - - - - -bool cBlockHandler::CanBeAt(cChunkInterface & a_ChunkInterface, int a_BlockX, int a_BlockY, int a_BlockZ, const cChunk & a_Chunk) -{ - return true; -} - - - - - -bool cBlockHandler::IsUseable() -{ - return false; -} - - - - - -bool cBlockHandler::IsClickedThrough(void) -{ - return false; -} - - - - - -bool cBlockHandler::DoesIgnoreBuildCollision(void) -{ - return (m_BlockType == E_BLOCK_AIR); -} - - - - - -bool cBlockHandler::DoesDropOnUnsuitable(void) -{ - return true; -} - - - - - -void cBlockHandler::Check(cChunkInterface & a_ChunkInterface, cBlockPluginInterface & a_PluginInterface, int a_RelX, int a_RelY, int a_RelZ, cChunk & a_Chunk) -{ -} - - - - - -ColourID cBlockHandler::GetMapBaseColourID(NIBBLETYPE a_Meta) -{ - return 0; -} - - - - - -bool cBlockHandler::IsInsideBlock(const Vector3d & a_Position, const BLOCKTYPE a_BlockType, const NIBBLETYPE a_BlockMeta) -{ - return true; -} - - - - - -cBlockEntity * cBlockEntity::CreateByBlockType(BLOCKTYPE a_BlockType, NIBBLETYPE a_BlockMeta, int a_BlockX, int a_BlockY, int a_BlockZ, cWorld * a_World) -{ - return nullptr; -} - - - - - -void cDeadlockDetect::TrackCriticalSection(cCriticalSection & a_CS, const AString & a_Name) -{ -} - - - - - -void cDeadlockDetect::UntrackCriticalSection(cCriticalSection & a_CS) -{ -} - - - - diff --git a/tests/LoadablePieces/Test.cubeset b/tests/LoadablePieces/Test.cubeset deleted file mode 100644 index 956e6684e..000000000 --- a/tests/LoadablePieces/Test.cubeset +++ /dev/null @@ -1,155 +0,0 @@ - --- Test.cubeset - --- This simple cubeset file is used for testing the cPrefabPiecePool loader. - - - - - -Cubeset = -{ - Metadata = - { - CubesetFormatVersion = 1, - }, - - Pieces = - { - -- One piece with inline definition: - { - Size = - { - x = 4, - y = 4, - z = 4, - }, - Hitbox = - { - MinX = 0, - MinY = 0, - MinZ = 0, - MaxX = 3, - MaxY = 3, - MaxZ = 3, - }, - BlockDefinitions = - { - ".: 0: 0", -- air - "a: 1: 0", -- stone - "b: 24: 0", -- sandstone - "c: 8: 0", -- water - "d: 85: 0", -- fence - "m: 19: 0", -- sponge - }, - BlockData = - { - -- Level 0 - "aaaa", -- 0 - "aaaa", -- 1 - "aaaa", -- 2 - "aaaa", -- 3 - - -- Level 1 - "bbbb", -- 0 - "bccb", -- 1 - "bccb", -- 2 - "bbbb", -- 3 - - -- Level 2 - "bbbb", -- 0 - "bccb", -- 1 - "bccb", -- 2 - "bbbb", -- 3 - - -- Level 3 - "bbbb", -- 0 - "bccb", -- 1 - "bccb", -- 2 - "bbbb", -- 3 - }, - Connectors = - { - { - Type = 2, - RelX = 2, - RelY = 2, - RelZ = 0, - Direction = 2, -- Z- - }, - { - Type = 2, - RelX = 0, - RelY = 2, - RelZ = 1, - Direction = 4, -- X- - }, - { - Type = 2, - RelX = 1, - RelY = 2, - RelZ = 3, - Direction = 3, -- Z+ - }, - { - Type = 2, - RelX = 3, - RelY = 2, - RelZ = 2, - Direction = 5, -- X+ - }, - }, - Metadata = - { - ["DefaultWeight"] = "100", - ["AllowedRotations"] = "7", - ["MergeStrategy"] = "msSpongePrint", - ["IsStarting"] = "1", - ["DepthWeight"] = "", - ["ExpandFloorStrategy"] = "None", - ["MoveToGround"] = "1", - ["AddWeightIfSame"] = "0", - ["VerticalStrategy"] = "Fixed|150", - }, - }, - - -- One piece with external definition: - { - Hitbox = - { - MinX = 0, - MinY = 0, - MinZ = 0, - MaxX = 3, - MaxY = 3, - MaxZ = 3, - }, - SchematicFileName = "Test1.schematic", - Connectors = - { - { - Type = 2, - RelX = 2, - RelY = 2, - RelZ = 0, - Direction = 2, -- Z- - }, - }, - Metadata = - { - ["DefaultWeight"] = "100", - ["AllowedRotations"] = "7", - ["MergeStrategy"] = "msSpongePrint", - ["IsStarting"] = "0", - ["DepthWeight"] = "", - ["ExpandFloorStrategy"] = "None", - ["MoveToGround"] = "0", - ["AddWeightIfSame"] = "0", - }, - }, - }, -- Pieces -} - - - - diff --git a/tests/LoadablePieces/Test1.schematic b/tests/LoadablePieces/Test1.schematic deleted file mode 100644 index 6fe19e9db..000000000 Binary files a/tests/LoadablePieces/Test1.schematic and /dev/null differ diff --git a/tests/PieceRotation/Bindings.h b/tests/PieceRotation/Bindings.h deleted file mode 100644 index 490830ac3..000000000 --- a/tests/PieceRotation/Bindings.h +++ /dev/null @@ -1,15 +0,0 @@ - -// Bindings.h - -// Dummy include file needed for LuaState to compile successfully - - - - -struct lua_State; - -int tolua_AllToLua_open(lua_State * a_LuaState); - - - - diff --git a/tests/PieceRotation/CMakeLists.txt b/tests/PieceRotation/CMakeLists.txt deleted file mode 100644 index bb1b37a53..000000000 --- a/tests/PieceRotation/CMakeLists.txt +++ /dev/null @@ -1,102 +0,0 @@ -enable_testing() - -include_directories(${CMAKE_SOURCE_DIR}/src/) -include_directories(SYSTEM ${CMAKE_SOURCE_DIR}/lib/) -include_directories(${CMAKE_CURRENT_SOURCE_DIR}) - -add_definitions(-DTEST_GLOBALS=1) - -set (SHARED_SRCS - ${CMAKE_SOURCE_DIR}/src/BiomeDef.cpp - ${CMAKE_SOURCE_DIR}/src/BlockArea.cpp - ${CMAKE_SOURCE_DIR}/src/Cuboid.cpp - ${CMAKE_SOURCE_DIR}/src/ChunkData.cpp - ${CMAKE_SOURCE_DIR}/src/StringCompression.cpp - ${CMAKE_SOURCE_DIR}/src/StringUtils.cpp - - ${CMAKE_SOURCE_DIR}/src/Bindings/LuaState.cpp - - ${CMAKE_SOURCE_DIR}/src/Generating/ChunkDesc.cpp - ${CMAKE_SOURCE_DIR}/src/Generating/PiecePool.cpp - ${CMAKE_SOURCE_DIR}/src/Generating/Prefab.cpp - ${CMAKE_SOURCE_DIR}/src/Generating/PrefabPiecePool.cpp - ${CMAKE_SOURCE_DIR}/src/Generating/VerticalLimit.cpp - ${CMAKE_SOURCE_DIR}/src/Generating/VerticalStrategy.cpp - - ${CMAKE_SOURCE_DIR}/src/Noise/Noise.cpp - - ${CMAKE_SOURCE_DIR}/src/OSSupport/CriticalSection.cpp - ${CMAKE_SOURCE_DIR}/src/OSSupport/Event.cpp - ${CMAKE_SOURCE_DIR}/src/OSSupport/File.cpp - ${CMAKE_SOURCE_DIR}/src/OSSupport/GZipFile.cpp - ${CMAKE_SOURCE_DIR}/src/OSSupport/StackTrace.cpp - - ${CMAKE_SOURCE_DIR}/src/WorldStorage/FastNBT.cpp - ${CMAKE_SOURCE_DIR}/src/WorldStorage/SchematicFileSerializer.cpp -) - -set (SHARED_HDRS - ${CMAKE_SOURCE_DIR}/src/BiomeDef.h - ${CMAKE_SOURCE_DIR}/src/BlockArea.h - ${CMAKE_SOURCE_DIR}/src/Cuboid.h - ${CMAKE_SOURCE_DIR}/src/ChunkData.h - ${CMAKE_SOURCE_DIR}/src/Globals.h - ${CMAKE_SOURCE_DIR}/src/StringCompression.h - ${CMAKE_SOURCE_DIR}/src/StringUtils.h - - ${CMAKE_SOURCE_DIR}/src/Bindings/LuaState.h - - ${CMAKE_SOURCE_DIR}/src/Generating/ChunkDesc.h - ${CMAKE_SOURCE_DIR}/src/Generating/PiecePool.h - ${CMAKE_SOURCE_DIR}/src/Generating/Prefab.h - ${CMAKE_SOURCE_DIR}/src/Generating/PrefabPiecePool.h - ${CMAKE_SOURCE_DIR}/src/Generating/VerticalLimit.h - ${CMAKE_SOURCE_DIR}/src/Generating/VerticalStrategy.h - - ${CMAKE_SOURCE_DIR}/src/Noise/Noise.h - - ${CMAKE_SOURCE_DIR}/src/OSSupport/CriticalSection.h - ${CMAKE_SOURCE_DIR}/src/OSSupport/Event.h - ${CMAKE_SOURCE_DIR}/src/OSSupport/File.h - ${CMAKE_SOURCE_DIR}/src/OSSupport/GZipFile.h - ${CMAKE_SOURCE_DIR}/src/OSSupport/StackTrace.h - - ${CMAKE_SOURCE_DIR}/src/WorldStorage/FastNBT.h - ${CMAKE_SOURCE_DIR}/src/WorldStorage/SchematicFileSerializer.h -) - -set (SRCS - PieceRotationTest.cpp - Stubs.cpp - LuaState_Typedefs.inc - LuaState_Declaration.inc - Bindings.h -) - - -if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") - add_flags_cxx("-Wno-error=global-constructors") - add_flags_cxx("-Wno-error=switch-enum") -endif() - - -if (MSVC) - # Add the MSVC-specific LeakFinder sources: - list (APPEND SHARED_SRCS ${CMAKE_SOURCE_DIR}/src/LeakFinder.cpp ${CMAKE_SOURCE_DIR}/src/StackWalker.cpp) - list (APPEND SHARED_HDRS ${CMAKE_SOURCE_DIR}/src/LeakFinder.h ${CMAKE_SOURCE_DIR}/src/StackWalker.h) -endif() - -source_group("Shared" FILES ${SHARED_SRCS} ${SHARED_HDRS}) -source_group("Sources" FILES ${SRCS}) -add_executable(PieceRotation ${SRCS} ${SHARED_SRCS} ${SHARED_HDRS}) -target_link_libraries(PieceRotation tolualib zlib) -add_test(NAME PieceRotation-test WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} COMMAND PieceRotation) - - - - -# Put the projects into solution folders (MSVC): -set_target_properties( - PieceRotation - PROPERTIES FOLDER Tests -) diff --git a/tests/PieceRotation/LuaState_Declaration.inc b/tests/PieceRotation/LuaState_Declaration.inc deleted file mode 100644 index 4019b26c6..000000000 --- a/tests/PieceRotation/LuaState_Declaration.inc +++ /dev/null @@ -1,4 +0,0 @@ - -// LuaState_Declaration.inc - -// Dummy include file needed for LuaState to compile successfully diff --git a/tests/PieceRotation/LuaState_Typedefs.inc b/tests/PieceRotation/LuaState_Typedefs.inc deleted file mode 100644 index 5eba7c6f8..000000000 --- a/tests/PieceRotation/LuaState_Typedefs.inc +++ /dev/null @@ -1,19 +0,0 @@ - -// LuaState_Typedefs.inc - -// Dummy include file needed for LuaState to compile successfully - - - - - -// Forward-declare classes that are used in the API but never called: -struct HTTPRequest; -struct HTTPTemplateRequest; -class cPluginLua; -class cBoundingBox; -template class cItemCallback; -class cEntity; - - - diff --git a/tests/PieceRotation/PieceRotationTest.cpp b/tests/PieceRotation/PieceRotationTest.cpp deleted file mode 100644 index ace3bd489..000000000 --- a/tests/PieceRotation/PieceRotationTest.cpp +++ /dev/null @@ -1,170 +0,0 @@ -// PieceRotation.cpp - -// Implements the tests for cPiece::cConnector::eDirection rotations - -#include "Globals.h" -#include -#include -#include "Generating/PiecePool.h" - - - - - -static cPiece::cConnector::eDirection g_AllDirections[] = -{ - cPiece::cConnector::dirXM, - cPiece::cConnector::dirXP, - cPiece::cConnector::dirYM, - cPiece::cConnector::dirYP, - cPiece::cConnector::dirZM, - cPiece::cConnector::dirZP, - cPiece::cConnector::dirYM_XM_ZM, - cPiece::cConnector::dirYM_XM_ZP, - cPiece::cConnector::dirYM_XP_ZM, - cPiece::cConnector::dirYM_XP_ZP, - cPiece::cConnector::dirYP_XM_ZM, - cPiece::cConnector::dirYP_XM_ZP, - cPiece::cConnector::dirYP_XP_ZM, - cPiece::cConnector::dirYP_XP_ZP, -}; - - - - - -class cTestFailure: public std::exception -{ -public: - cTestFailure(const char * a_Expression, const char * a_FileName, const int a_Line): - std::exception(), - m_Expression(a_Expression), - m_FileName(a_FileName), - m_Line(a_Line) - { - } - - const std::string m_Expression; - const std::string m_FileName; - const int m_Line; -}; - - - - - -#define EXPECT(X) if (!(X)) \ - { \ - ASSERT(X); \ - throw cTestFailure(#X, __FILE__, __LINE__); \ - } - - - - - -/** Tests that rotating a direction in one way and then the opposite way produces the original direction. */ -static void testBackAndForth() -{ - for (size_t i = 0; i < ARRAYCOUNT(g_AllDirections); ++i) - { - auto rotated = cPiece::cConnector::RotateDirectionCW(g_AllDirections[i]); - auto back = cPiece::cConnector::RotateDirectionCCW(rotated); - EXPECT(back == g_AllDirections[i]); - } - for (size_t i = 0; i < ARRAYCOUNT(g_AllDirections); ++i) - { - auto rotated = cPiece::cConnector::RotateDirectionCCW(g_AllDirections[i]); - auto back = cPiece::cConnector::RotateDirectionCW(rotated); - EXPECT(back == g_AllDirections[i]); - } -} - - - - - -/** Tests rotating the direction 360 degrees. */ -static void testFullRotation() -{ - // Rotate 90 degrees CCW four times: - for (size_t i = 0; i < ARRAYCOUNT(g_AllDirections); ++i) - { - auto d = g_AllDirections[i]; - for (int j = 0; j < 4; ++j) - { - d = cPiece::cConnector::RotateDirectionCCW(d); - } - EXPECT(d == g_AllDirections[i]); - } - - // Rotate 90 degrees CW four times: - for (size_t i = 0; i < ARRAYCOUNT(g_AllDirections); ++i) - { - auto d = g_AllDirections[i]; - for (int j = 0; j < 4; ++j) - { - d = cPiece::cConnector::RotateDirectionCW(d); - } - EXPECT(d == g_AllDirections[i]); - } - - // Rotate 180 degrees twice: - for (size_t i = 0; i < ARRAYCOUNT(g_AllDirections); ++i) - { - auto d = g_AllDirections[i]; - d = cPiece::cConnector::RotateDirection(d); - d = cPiece::cConnector::RotateDirection(d); - EXPECT(d == g_AllDirections[i]); - } -} - - - - - -/** Tests that no two values are rotated onto the same destination value. */ -template -static void testPermutation(Fn & a_Fn) -{ - std::map numDest; - for (size_t i = 0; i < ARRAYCOUNT(g_AllDirections); ++i) - { - auto d = a_Fn(g_AllDirections[i]); - EXPECT(numDest[d] == 0); - numDest[d] = 1; - } -} - - - - - -int main(void) -{ - LOG("PieceRotation test starting."); - try - { - testBackAndForth(); - testFullRotation(); - testPermutation(cPiece::cConnector::RotateDirection); - testPermutation(cPiece::cConnector::RotateDirectionCW); - testPermutation(cPiece::cConnector::RotateDirectionCCW); - } - catch (const cTestFailure & f) - { - LOGERROR("Test failed:\tExpression: %s\n\tFile: %s (%d)", f.m_Expression.c_str(), f.m_FileName.c_str(), f.m_Line); - return 1; - } - catch (const std::exception & exc) - { - LOGERROR("Exception caught: %s", exc.what()); - return 2; - } - LOG("PieceRotation test succeeded."); - return 0; -} - - - - diff --git a/tests/PieceRotation/Stubs.cpp b/tests/PieceRotation/Stubs.cpp deleted file mode 100644 index 0ad3eb365..000000000 --- a/tests/PieceRotation/Stubs.cpp +++ /dev/null @@ -1,290 +0,0 @@ - -// Stubs.cpp - -// Implements stubs of various Cuberite methods that are needed for linking but not for runtime -// This is required so that we don't bring in the entire Cuberite via dependencies - -#include "Globals.h" -#include "BlockInfo.h" -#include "Bindings.h" -#include "Bindings/DeprecatedBindings.h" -#include "Bindings/LuaJson.h" -#include "Bindings/ManualBindings.h" -#include "BlockEntities/BlockEntity.h" -#include "Blocks/BlockHandler.h" -#include "Generating/ChunkDesc.h" -#include "DeadlockDetect.h" - - - - - -// fwd: -struct lua_State; - - - - - -// Prototypes, needed by clang: -extern "C" int luaopen_lsqlite3(lua_State * a_LuaState); -extern "C" int luaopen_lxp(lua_State * a_LuaState); - - - - - -void cManualBindings::Bind(lua_State * a_LuaState) -{ -} - - - - - -void DeprecatedBindings::Bind(lua_State * a_LuaState) -{ -} - - - - - -void cLuaJson::Bind(cLuaState & a_LuaState) -{ -} - - - - - -int tolua_AllToLua_open(lua_State * a_LuaState) -{ - return 0; -} - - - - - -extern "C" int luaopen_lsqlite3(lua_State * a_LuaState) -{ - return 0; -} - - - - - -extern "C" int luaopen_lxp(lua_State * a_LuaState) -{ - return 0; -} - - - - - -cBlockInfo::~cBlockInfo() -{ -} - - - - - -void cBlockInfo::Initialize(cBlockInfo::cBlockInfoArray & a_BlockInfos) -{ - // The piece-loading code uses the handlers for rotations, so we need valid handlers - // Insert dummy handlers: - for (size_t i = 0; i < ARRAYCOUNT(a_BlockInfos); i++) - { - a_BlockInfos[i].m_Handler = new cBlockHandler(static_cast(i)); - } -} - - - - - -cBlockHandler::cBlockHandler(BLOCKTYPE a_BlockType) -{ -} - - - - - -bool cBlockHandler::GetPlacementBlockTypeMeta( - cChunkInterface & a_ChunkInterface, cPlayer * a_Player, - int a_BlockX, int a_BlockY, int a_BlockZ, eBlockFace a_BlockFace, - int a_CursorX, int a_CursorY, int a_CursorZ, - BLOCKTYPE & a_BlockType, NIBBLETYPE & a_BlockMeta -) -{ - return true; -} - - - - - -void cBlockHandler::OnUpdate(cChunkInterface & cChunkInterface, cWorldInterface & a_WorldInterface, cBlockPluginInterface & a_PluginInterface, cChunk & a_Chunk, int a_BlockX, int a_BlockY, int a_BlockZ) -{ -} - - - - - -void cBlockHandler::OnPlacedByPlayer(cChunkInterface & a_ChunkInterface, cWorldInterface & a_WorldInterface, cPlayer * a_Player, const sSetBlock & a_BlockChange) -{ -} - - - - - -void cBlockHandler::OnDestroyedByPlayer(cChunkInterface & a_ChunkInterface, cWorldInterface & a_WorldInterface, cPlayer * a_Player, int a_BlockX, int a_BlockY, int a_BlockZ) -{ -} - - - - - -void cBlockHandler::OnPlaced(cChunkInterface & a_ChunkInterface, cWorldInterface & a_WorldInterface, int a_BlockX, int a_BlockY, int a_BlockZ, BLOCKTYPE a_BlockType, NIBBLETYPE a_BlockMeta) -{ -} - - - - - -void cBlockHandler::OnDestroyed(cChunkInterface & a_ChunkInterface, cWorldInterface & a_WorldInterface, int a_BlockX, int a_BlockY, int a_BlockZ) -{ -} - - - - - -void cBlockHandler::NeighborChanged(cChunkInterface & a_ChunkInterface, int a_BlockX, int a_BlockY, int a_BlockZ, eBlockFace a_WhichNeighbor) -{ -} - - - - - -void cBlockHandler::ConvertToPickups(cItems & a_Pickups, NIBBLETYPE a_BlockMeta) -{ -} - - - - - -void cBlockHandler::DropBlock(cChunkInterface & a_ChunkInterface, cWorldInterface & a_WorldInterface, cBlockPluginInterface & a_BlockPluginInterface, cEntity * a_Digger, int a_BlockX, int a_BlockY, int a_BlockZ, bool a_CanDrop) -{ -} - - - - - -bool cBlockHandler::CanBeAt(cChunkInterface & a_ChunkInterface, int a_BlockX, int a_BlockY, int a_BlockZ, const cChunk & a_Chunk) -{ - return true; -} - - - - - -bool cBlockHandler::IsUseable() -{ - return false; -} - - - - - -bool cBlockHandler::IsClickedThrough(void) -{ - return false; -} - - - - - -bool cBlockHandler::DoesIgnoreBuildCollision(void) -{ - return (m_BlockType == E_BLOCK_AIR); -} - - - - - -bool cBlockHandler::DoesDropOnUnsuitable(void) -{ - return true; -} - - - - - -void cBlockHandler::Check(cChunkInterface & a_ChunkInterface, cBlockPluginInterface & a_PluginInterface, int a_RelX, int a_RelY, int a_RelZ, cChunk & a_Chunk) -{ -} - - - - - -ColourID cBlockHandler::GetMapBaseColourID(NIBBLETYPE a_Meta) -{ - return 0; -} - - - - - -bool cBlockHandler::IsInsideBlock(const Vector3d & a_Position, const BLOCKTYPE a_BlockType, const NIBBLETYPE a_BlockMeta) -{ - return true; -} - - - - - -cBlockEntity * cBlockEntity::CreateByBlockType(BLOCKTYPE a_BlockType, NIBBLETYPE a_BlockMeta, int a_BlockX, int a_BlockY, int a_BlockZ, cWorld * a_World) -{ - return nullptr; -} - - - - - -void cDeadlockDetect::TrackCriticalSection(cCriticalSection & a_CS, const AString & a_Name) -{ -} - - - - - -void cDeadlockDetect::UntrackCriticalSection(cCriticalSection & a_CS) -{ -} - - - - -- cgit v1.2.3