forked from cuberite/cuberite
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Gen: Added a simple PieceGeneratorBFSTree test.
- Loading branch information
Showing
2 changed files
with
103 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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; | ||
} | ||
|
||
|
||
|
||
|