summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--tests/Generating/CMakeLists.txt14
-rw-r--r--tests/Generating/PieceGeneratorBFSTreeTest.cpp89
2 files changed, 103 insertions, 0 deletions
diff --git a/tests/Generating/CMakeLists.txt b/tests/Generating/CMakeLists.txt
index 4efb9dbe2..269ab50ab 100644
--- a/tests/Generating/CMakeLists.txt
+++ b/tests/Generating/CMakeLists.txt
@@ -112,10 +112,24 @@ add_test(NAME PieceRotation-test WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} C
+# PieceGeneratorBFSTree test:
+add_executable(PieceGeneratorBFSTree
+ PieceGeneratorBFSTreeTest.cpp
+ ${CMAKE_SOURCE_DIR}/src/Generating/PieceGeneratorBFSTree.cpp
+ ${CMAKE_SOURCE_DIR}/src/Generating/PieceGeneratorBFSTree.h
+)
+target_link_libraries(PieceGeneratorBFSTree GeneratorTestingSupport)
+add_test(NAME PieceGeneratorBFSTree-test WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/Server/Prefabs/PieceStructures COMMAND PieceGeneratorBFSTree)
+
+
+
+
+
# Put the projects into solution folders (MSVC):
set_target_properties(
GeneratorTestingSupport
LoadablePieces
+ PieceGeneratorBFSTree
PieceRotation
PROPERTIES FOLDER Tests/Generating
)
diff --git a/tests/Generating/PieceGeneratorBFSTreeTest.cpp b/tests/Generating/PieceGeneratorBFSTreeTest.cpp
new file mode 100644
index 000000000..d302b1ad6
--- /dev/null
+++ b/tests/Generating/PieceGeneratorBFSTreeTest.cpp
@@ -0,0 +1,89 @@
+// PieceGeneratorBFSTreeTest.cpp
+
+// Implements the test for the cPieceGeneratorBFSTree class
+
+/*
+Unlike most tests, this is actually not meant as much for unit-testing, but more like performance-testing.
+Compile this project in Release mode, then run it in folder that has NetherFort.cubeset prefabs, too, using
+a higher number of repetitions (each repetition takes time on the order of a second); investigate the
+runtime performance with a profiler.
+
+The syntax to execute this test:
+PieceGeneratorBFSTreeTest [<numRepetitions>]
+numRepetitions is the number of NetherFort structures to be generated (default = 1)
+*/
+
+
+
+
+
+#include "Globals.h"
+#include "Generating/PrefabPiecePool.h"
+#include "Generating/PieceGeneratorBFSTree.h"
+
+
+
+
+
+static int test(int a_NumRepetitions)
+{
+ // Load the piece pool:
+ cPrefabPiecePool pool;
+ if (!pool.LoadFromFile("NetherFort.cubeset", true))
+ {
+ LOGERROR("Cannot load the NetherFort cubeset. Please make sure that the NetherFort.cubeset file is present in the current dir and that it is a valid .cubeset file.");
+ return -1;
+ }
+ auto & generatorParams = pool.GetAllMetadata();
+ auto maxDepth = GetStringMapInteger<int>(generatorParams, "MaxDepth", 5);
+
+ // Perform repeated test of the generator:
+ auto start = std::chrono::high_resolution_clock::now();
+ cPieceGeneratorBFSTree pg(pool, 1);
+ for (int i = 0; i < a_NumRepetitions; ++i)
+ {
+ cPlacedPieces placedPieces;
+ pg.PlacePieces(i * 512, 0, maxDepth, placedPieces);
+ placedPieces.clear();
+ } // for i - numRepetitions
+ auto end = std::chrono::high_resolution_clock::now();
+
+ auto dur = std::chrono::duration_cast<std::chrono::milliseconds>(end - start).count();
+ LOG("Performed %d repetition(s), took %.3f seconds", a_NumRepetitions, static_cast<double>(dur) / 1000);
+ return 0;
+}
+
+
+
+
+
+int main(int argc, char * argv[])
+{
+ LOGD("Starting the PieceGeneratorBFSTree test.");
+
+ // Parse the cmdline parameters:
+ int numRepetitions = 1;
+ for (int i = 1; i < argc; ++i)
+ {
+ int rep = atoi(argv[i]);
+ if (rep > 0)
+ {
+ numRepetitions = rep;
+ }
+ }
+ LOGD("Performing %d repetitions", numRepetitions);
+
+ auto res = test(numRepetitions);
+ if (res != 0)
+ {
+ LOGD("Test failed.");
+ return res;
+ }
+
+ LOGD("The PieceGeneratorBFSTree test competed successfully.");
+ return 0;
+}
+
+
+
+