Initial commit

This commit is contained in:
torsten committed 2026-08-13 18:33:10 +02:00
commit b7d90b9afe
16245 files changed
+3396666

No files matched your search

@@ -0,0 +1,30 @@
#
# @RDE_HEADER@
# $Id$
# $HeadURL$
# $Author$
#
SET(UnitTestSources
../trajectory_splitter.cpp
../trajectory_splitter.h
trajectory_splitter_unit_test.cpp
trajectory_splitter_unit_test.h
)
SOURCE_GROUP( UnitTestSources FILES ${UnitTestSources} )
IF(BUILD_TESTING)
ADD_EXECUTABLE(aesUnitTestTrajectorySplitter ${LinkedSources} ${UnitTestSources} )
TARGET_LINK_LIBRARIES(aesUnitTestTrajectorySplitter
NGLLogger
nglcoreapplication
Qt5::Core
Qt5::Test
svcAesCommon
)
ADD_TEST(NAME aesUnitTestTrajectorySplitter COMMAND $<TARGET_FILE:aesUnitTestTrajectorySplitter>)
ENDIF()
@@ -0,0 +1,285 @@
/**
* @RDE_HEADER@
* Unittest
* $Id$
* $HeadURL$
* $Author$
*/
#include "trajectory_splitter_unit_test.h"
#include "../trajectory_splitter.h"
#include <nglapplication/nglcoreapplication.h>
#include <QtTest/QTest>
#include <iostream>
using namespace AreaEffectSimulation;
//
//
// This class is an UnitTest with values taken from the TNE.
// That was created while Michael Moetje was implementing that code at the TNE (PlayerUnit)
//
//
static TrajectoryType getExampleData()
{
TrajectoryType vector;
// trunk (size = 5)
vector.emplace_back(Core::GeoPositionRelativeTime(0.1, 0.2, 0.3, 1));
vector.emplace_back(Core::GeoPositionRelativeTime(0.1, 0.2, 0.3, 2));
vector.emplace_back(Core::GeoPositionRelativeTime(0.1, 0.2, 0.3, 3));
vector.emplace_back(Core::GeoPositionRelativeTime(0.1, 0.2, 0.3, 4));
vector.emplace_back(Core::GeoPositionRelativeTime(0.1, 0.2, 0.3, 5));
// branch 1 (size = 3)
vector.emplace_back(Core::GeoPositionRelativeTime(1.1, 0.2, 0.3, 6));
vector.emplace_back(Core::GeoPositionRelativeTime(1.1, 0.2, 0.3, 7));
vector.emplace_back(Core::GeoPositionRelativeTime(1.1, 0.2, 0.3, 8));
// branch 2 (size = 4)
vector.emplace_back(Core::GeoPositionRelativeTime(2.1, 0.2, 0.3, 6));
vector.emplace_back(Core::GeoPositionRelativeTime(2.1, 0.2, 0.3, 7));
vector.emplace_back(Core::GeoPositionRelativeTime(2.1, 0.2, 0.3, 8));
vector.emplace_back(Core::GeoPositionRelativeTime(2.1, 0.2, 0.3, 9));
return vector;
}
static TrajectoryType getRealTrunk()
{
TrajectoryType vector;
// trunk (size = 5)
vector.emplace_back(Core::GeoPositionRelativeTime(0.1, 0.2, 0.3, 1));
vector.emplace_back(Core::GeoPositionRelativeTime(0.1, 0.2, 0.3, 2));
vector.emplace_back(Core::GeoPositionRelativeTime(0.1, 0.2, 0.3, 3));
vector.emplace_back(Core::GeoPositionRelativeTime(0.1, 0.2, 0.3, 4));
vector.emplace_back(Core::GeoPositionRelativeTime(0.1, 0.2, 0.3, 5));
return vector;
}
static TrajectoryType getRealBranch1()
{
TrajectoryType vector;
// branch 1 (size = 3)
vector.emplace_back(Core::GeoPositionRelativeTime(1.1, 0.2, 0.3, 6));
vector.emplace_back(Core::GeoPositionRelativeTime(1.1, 0.2, 0.3, 7));
vector.emplace_back(Core::GeoPositionRelativeTime(1.1, 0.2, 0.3, 8));
return vector;
}
static TrajectoryType getRealBranch2()
{
TrajectoryType vector;
// branch 2 (size = 4)
vector.emplace_back(Core::GeoPositionRelativeTime(2.1, 0.2, 0.3, 6));
vector.emplace_back(Core::GeoPositionRelativeTime(2.1, 0.2, 0.3, 7));
vector.emplace_back(Core::GeoPositionRelativeTime(2.1, 0.2, 0.3, 8));
vector.emplace_back(Core::GeoPositionRelativeTime(2.1, 0.2, 0.3, 9));
return vector;
}
static TrajectoryType getRealTrajectory1()
{
TrajectoryType vector;
// trunk (size = 5)
vector.emplace_back(Core::GeoPositionRelativeTime(0.1, 0.2, 0.3, 1));
vector.emplace_back(Core::GeoPositionRelativeTime(0.1, 0.2, 0.3, 2));
vector.emplace_back(Core::GeoPositionRelativeTime(0.1, 0.2, 0.3, 3));
vector.emplace_back(Core::GeoPositionRelativeTime(0.1, 0.2, 0.3, 4));
vector.emplace_back(Core::GeoPositionRelativeTime(0.1, 0.2, 0.3, 5));
// branch 1 (size = 3)
vector.emplace_back(Core::GeoPositionRelativeTime(1.1, 0.2, 0.3, 6));
vector.emplace_back(Core::GeoPositionRelativeTime(1.1, 0.2, 0.3, 7));
vector.emplace_back(Core::GeoPositionRelativeTime(1.1, 0.2, 0.3, 8));
return vector;
}
static TrajectoryType getRealTrajectory2()
{
TrajectoryType vector;
// trunk (size = 5)
vector.emplace_back(Core::GeoPositionRelativeTime(0.1, 0.2, 0.3, 1));
vector.emplace_back(Core::GeoPositionRelativeTime(0.1, 0.2, 0.3, 2));
vector.emplace_back(Core::GeoPositionRelativeTime(0.1, 0.2, 0.3, 3));
vector.emplace_back(Core::GeoPositionRelativeTime(0.1, 0.2, 0.3, 4));
vector.emplace_back(Core::GeoPositionRelativeTime(0.1, 0.2, 0.3, 5));
// branch 2 (size = 4)
vector.emplace_back(Core::GeoPositionRelativeTime(2.1, 0.2, 0.3, 6));
vector.emplace_back(Core::GeoPositionRelativeTime(2.1, 0.2, 0.3, 7));
vector.emplace_back(Core::GeoPositionRelativeTime(2.1, 0.2, 0.3, 8));
vector.emplace_back(Core::GeoPositionRelativeTime(2.1, 0.2, 0.3, 9));
return vector;
}
// TrajectorySplitter::init is protected.
// To gain access, create a temporary class and enable access:
class MyLocalTrajectorySplitter : public TrajectorySplitter<std::vector<Core::GeoPositionRelativeTime>>
{
public:
using BaseClass = TrajectorySplitter;
explicit MyLocalTrajectorySplitter(const TrajectoryType &trajectory)
: BaseClass(trajectory)
{}
bool init() const
{
return BaseClass::init();
}
size_t rawTrajectorySize() const
{
return BaseClass::rawTrajectorySize();
}
static qint64 findDuplicateTimeInternal(const TrajectoryType &trajectory) { return BaseClass::findDuplicateTimeInternal(trajectory);}
static int findDuplicateBranchIndexInternal(const TrajectoryType &trajectory) { return BaseClass::findDuplicateBranchIndexInternal(trajectory);}
static int findIndexOfEndOfFirstBranchInternal(const TrajectoryType &trajectory) { return BaseClass::findIndexOfEndOfFirstBranchInternal(trajectory);}
};
void UnitTestTrajectorySplitter::init()
{
m_trajectory = getExampleData();
}
void UnitTestTrajectorySplitter::test_rawTrajectorySize()
{
QCOMPARE(m_trajectory.size(), 12);
MyLocalTrajectorySplitter splitter(m_trajectory);
QCOMPARE(splitter.rawTrajectorySize(), 12);
}
void UnitTestTrajectorySplitter::test_findDuplicateTimeInternal()
{
const int value = MyLocalTrajectorySplitter::findDuplicateTimeInternal(m_trajectory);
QCOMPARE(value, 6);
}
void UnitTestTrajectorySplitter::test_findDuplicateTimeInternalFailure()
{
const int value = MyLocalTrajectorySplitter::findDuplicateTimeInternal(getRealTrunk());
QCOMPARE(value, -1);
}
void UnitTestTrajectorySplitter::test_findDuplicateBranchIndexInternal()
{
const int idx = MyLocalTrajectorySplitter::findDuplicateBranchIndexInternal(m_trajectory);
QCOMPARE(idx, 5);
}
void UnitTestTrajectorySplitter::test_findDuplicateBranchIndexInternalFailure()
{
const int idx = MyLocalTrajectorySplitter::findDuplicateBranchIndexInternal(getRealTrunk());
QCOMPARE(idx, -1);
}
void UnitTestTrajectorySplitter::test_init()
{
{
MyLocalTrajectorySplitter splitter({});
QCOMPARE(splitter.init(), false);
}
{
MyLocalTrajectorySplitter splitter(m_trajectory);
QCOMPARE(splitter.rawTrajectorySize(), 12);
QCOMPARE(splitter.init(), true);
QCOMPARE(splitter.init(), true); // execute a second time
}
}
void UnitTestTrajectorySplitter::test_findIndexOfEndOfFirstBranchInternal()
{
const int idx = MyLocalTrajectorySplitter::findIndexOfEndOfFirstBranchInternal(m_trajectory);
QCOMPARE(idx, 7);
}
void UnitTestTrajectorySplitter::test_trunk()
{
MyLocalTrajectorySplitter splitter(m_trajectory);
QCOMPARE(splitter.rawTrajectorySize(), 12);
const auto trunk = splitter.getTrunk();
QCOMPARE(trunk.size(), 5);
const auto realTrunk = getRealTrunk();
QCOMPARE(trunk, realTrunk);
}
void UnitTestTrajectorySplitter::test_branch1()
{
MyLocalTrajectorySplitter splitter(m_trajectory);
QCOMPARE(splitter.rawTrajectorySize(), 12);
const auto br1 = splitter.getBranch1();
QCOMPARE(br1.size(), 3);
const auto &realBranch1 = getRealBranch1();
QCOMPARE(br1, realBranch1);
}
void UnitTestTrajectorySplitter::test_branch2()
{
MyLocalTrajectorySplitter splitter(m_trajectory);
QCOMPARE(splitter.rawTrajectorySize(), 12);
const auto br2 = splitter.getBranch2();
QCOMPARE(br2.size(), 4);
const auto &realBranch2 = getRealBranch2();
QCOMPARE(br2, realBranch2);
}
void UnitTestTrajectorySplitter::test_trajectory1()
{
MyLocalTrajectorySplitter splitter(m_trajectory);
QCOMPARE(splitter.rawTrajectorySize(), 12);
const auto traj1 = splitter.getTrajectory1();
QCOMPARE(traj1.size(), 8);
const auto &getRealTraj1 = getRealTrajectory1();
QCOMPARE(traj1, getRealTraj1);
}
void UnitTestTrajectorySplitter::test_trajectory2()
{
MyLocalTrajectorySplitter splitter(m_trajectory);
QCOMPARE(splitter.rawTrajectorySize(), 12);
const auto tra2 = splitter.getTrajectory2();
QCOMPARE(tra2.size(), 9);
const auto &getRealTraj2 = getRealTrajectory2();
QCOMPARE(tra2, getRealTraj2);
}
void UnitTestTrajectorySplitter::test_failure()
{
MyLocalTrajectorySplitter splitter(getRealTrunk());
QCOMPARE(splitter.rawTrajectorySize(), 5);
QCOMPARE(splitter.init(), false);
QCOMPARE(splitter.getTrunk().size(), 0);
QCOMPARE(splitter.getBranch1().size(), 0);
QCOMPARE(splitter.getBranch2().size(), 0);
QCOMPARE(splitter.getTrajectory1().size(), 0);
QCOMPARE(splitter.getTrajectory2().size(), 0);
}
int main(int argc, char *argv[])
{
NGLCoreApplication app(argc, argv);
app.createLogger("UnitTest_TrajectorySplitter", "log4cxxUnitTest.props");
UnitTestTrajectorySplitter tc;
return QTest::qExec(&tc, argc, argv);
}
@@ -0,0 +1,52 @@
/**
* @RDE_HEADER@
* Unittest
* $Id$
* $HeadURL$
* $Author$
*/
#pragma once
#include <QCoreApplication>
#include <QtTest/QTest>
#include <Core/core.hpp>
using TrajectoryType = std::vector<Core::GeoPositionRelativeTime>;
/**
* @brief This class is an UnitTest with values taken from the TNE.
* That was created while Michael Moetje was implementing that code at the TNE (PlayerUnit)
*/
class UnitTestTrajectorySplitter : public QObject
{
Q_OBJECT
private Q_SLOTS:
void init();
void test_rawTrajectorySize();
void test_findDuplicateTimeInternal();
void test_findDuplicateTimeInternalFailure();
void test_findDuplicateBranchIndexInternal();
void test_findDuplicateBranchIndexInternalFailure();
void test_init();
void test_findIndexOfEndOfFirstBranchInternal();
void test_trunk();
void test_branch1();
void test_branch2();
void test_trajectory1();
void test_trajectory2();
void test_failure();
// void cleanup();
private:
TrajectoryType m_trajectory;
};