From a591dbfe9cedbb28c4f671d7dbb5a8015c212137 Mon Sep 17 00:00:00 2001 From: Xiphoseer Date: Mon, 3 Jan 2022 16:00:21 +0100 Subject: [PATCH] Basic tests infrastructure --- CMakeLists.txt | 6 +++++- dCommon/NiPoint3.cpp | 9 ++------- tests/CMakeLists.txt | 21 +++++++++++++++++++++ tests/CommonCxxTests.cpp | 0 tests/CommonCxxTests.h | 4 ++++ tests/TestLDFFormat.cpp | 31 +++++++++++++++++++++++++++++++ tests/TestNiPoint3.cpp | 13 +++++++++++++ 7 files changed, 76 insertions(+), 8 deletions(-) create mode 100644 tests/CMakeLists.txt create mode 100644 tests/CommonCxxTests.cpp create mode 100644 tests/CommonCxxTests.h create mode 100644 tests/TestLDFFormat.cpp create mode 100644 tests/TestNiPoint3.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index a8395c8..cb94a2d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,5 +1,6 @@ cmake_minimum_required(VERSION 3.12) project(Darkflame) +include(CTest) # Read variables from file FILE(READ "${CMAKE_SOURCE_DIR}/CMakeVariables.txt" variables) @@ -492,4 +493,7 @@ if(WIN32) add_dependencies(MasterServer WorldServer) add_dependencies(MasterServer AuthServer) add_dependencies(MasterServer ChatServer) -endif() \ No newline at end of file +endif() + +# Finally, add the tests +add_subdirectory(tests) \ No newline at end of file diff --git a/dCommon/NiPoint3.cpp b/dCommon/NiPoint3.cpp index d74be90..4baefa1 100644 --- a/dCommon/NiPoint3.cpp +++ b/dCommon/NiPoint3.cpp @@ -93,14 +93,9 @@ Vector3 NiPoint3::CrossProduct(const Vector3& vec) const { //! Unitize the vector NiPoint3 NiPoint3::Unitize(void) const { - NiPoint3 unitVec; float length = this->Length(); - - unitVec.x = length != 0 ? this->x / length : 0; - unitVec.y = length != 0 ? this->y / length : 0; - unitVec.z = length != 0 ? this->z / length : 0; - - return unitVec; + + return length != 0 ? *this / length : NiPoint3::ZERO; } diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt new file mode 100644 index 0000000..eab4bbc --- /dev/null +++ b/tests/CMakeLists.txt @@ -0,0 +1,21 @@ +# create the testing file and list of tests +create_test_sourcelist (Tests + CommonCxxTests.cpp + TestNiPoint3.cpp + TestLDFFormat.cpp +) + +# add the executable +add_executable (CommonCxxTests ${Tests}) +target_link_libraries(CommonCxxTests dCommon raknet) + +# remove the test driver source file +set (TestsToRun ${Tests}) +remove (TestsToRun CommonCxxTests.cpp) + +# Add all the ADD_TEST for each test +foreach (test ${TestsToRun}) + get_filename_component (TName ${test} NAME_WE) + add_test (NAME ${TName} COMMAND CommonCxxTests ${TName}) + set_property(TEST ${TName} PROPERTY ENVIRONMENT CTEST_OUTPUT_ON_FAILURE=1) +endforeach () diff --git a/tests/CommonCxxTests.cpp b/tests/CommonCxxTests.cpp new file mode 100644 index 0000000..e69de29 diff --git a/tests/CommonCxxTests.h b/tests/CommonCxxTests.h new file mode 100644 index 0000000..8d2dbba --- /dev/null +++ b/tests/CommonCxxTests.h @@ -0,0 +1,4 @@ +#include + +#define ASSERT_EQ(a,b) { if (!(a == b)) { printf("Failed assertion: " #a " == " #b " \n in %s:%d\n", __FILE__, __LINE__); return 1; }} +#define ASSERT_NE(a,b) { if (!(a != b)) { printf("Failed assertion: " #a " != " #b " \n in %s:%d\n", __FILE__, __LINE__); return 1; }} \ No newline at end of file diff --git a/tests/TestLDFFormat.cpp b/tests/TestLDFFormat.cpp new file mode 100644 index 0000000..276a817 --- /dev/null +++ b/tests/TestLDFFormat.cpp @@ -0,0 +1,31 @@ +#include "LDFFormat.h" +#include "CommonCxxTests.h" + +/** + * @brief Test parsing an LDF value + * + * @param argc Number of command line arguments for this test + * @param argv Command line arguments + * @return 0 on success, non-zero on failure + */ +int TestLDFFormat(int argc, char** argv) { + // Create + auto* data = LDFBaseData::DataFromString("KEY=0:VALUE"); + + // Check that the data type is correct + ASSERT_EQ(data->GetValueType(), eLDFType::LDF_TYPE_UTF_16); + + // Check that the key is correct + ASSERT_EQ(data->GetKey(), u"KEY"); + + // Check that the value is correct + ASSERT_EQ(((LDFData* )data)->GetValue(), u"VALUE"); + + // Check that the serialization is correct + ASSERT_EQ(data->GetString(), "KEY=0:VALUE"); + + // Cleanup the object + delete data; + + return 0; +} diff --git a/tests/TestNiPoint3.cpp b/tests/TestNiPoint3.cpp new file mode 100644 index 0000000..68da457 --- /dev/null +++ b/tests/TestNiPoint3.cpp @@ -0,0 +1,13 @@ +#include + +#include "NiPoint3.h" +#include "CommonCxxTests.h" + +int TestNiPoint3(int argc, char** argv) { + // Check that Unitize works + ASSERT_EQ(NiPoint3(3,0,0).Unitize(), NiPoint3::UNIT_X); + // Check what unitize does to a vector of length 0 + ASSERT_EQ(NiPoint3::ZERO.Unitize(), NiPoint3::ZERO); + // If we get here, all was successful + return 0; +}