Mercurial Hosting > traffic-intelligence
diff trajectorymanagement/test/TrajectoryTest.h @ 1159:e1e7acef8eab
moved trajectory management library into Traffic Intelligence
author | Nicolas Saunier <nicolas.saunier@polymtl.ca> |
---|---|
date | Mon, 22 Feb 2021 22:09:35 -0500 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/trajectorymanagement/test/TrajectoryTest.h Mon Feb 22 22:09:35 2021 -0500 @@ -0,0 +1,1604 @@ +#ifndef TRAJECTORYTEST_H_ +#define TRAJECTORYTEST_H_ + +#include "../src/Trajectory.h" + +#include <cppunit/extensions/HelperMacros.h> + +using namespace std; + +template<class T> +class TrajectoryTest: public CPPUNIT_NS::TestCase +{ +CPPUNIT_TEST_SUITE(TrajectoryTest); + CPPUNIT_TEST(testTrajectory1); + CPPUNIT_TEST(testTrajectory2); + CPPUNIT_TEST(testTrajectory3); + CPPUNIT_TEST(testSetId); + CPPUNIT_TEST(testGetTrajectoryElement); + CPPUNIT_TEST(testAdd1); + CPPUNIT_TEST(testAdd2); + CPPUNIT_TEST(testAdd3); + CPPUNIT_TEST(testAdd4); + CPPUNIT_TEST(testAdd5); + CPPUNIT_TEST(testAdd6); + CPPUNIT_TEST(testAdd7); + CPPUNIT_TEST(testAdd8); + CPPUNIT_TEST(testAdd9); + CPPUNIT_TEST(testAdd10); + CPPUNIT_TEST(testAdd11); + CPPUNIT_TEST(testAdd12); + CPPUNIT_TEST(testAdd13); + CPPUNIT_TEST(testAdd14); + CPPUNIT_TEST(testAdd15); + CPPUNIT_TEST(testAdd16); + CPPUNIT_TEST(testAdd17); + CPPUNIT_TEST(testAdd18); + CPPUNIT_TEST(testAdd19); + CPPUNIT_TEST(testAdd20); + CPPUNIT_TEST(testAdd21); + CPPUNIT_TEST(testAdd22); + CPPUNIT_TEST(testAdd23); + CPPUNIT_TEST(testAdd24); + CPPUNIT_TEST(testAdd25); + CPPUNIT_TEST(testAdd26); + CPPUNIT_TEST(testAdd27); + CPPUNIT_TEST(testAdd28); + CPPUNIT_TEST(testAdd29); + CPPUNIT_TEST(testAdd30); + CPPUNIT_TEST(testAdd31); + CPPUNIT_TEST(testAdd32); + CPPUNIT_TEST(testAdd33); + CPPUNIT_TEST(testAdd34); + CPPUNIT_TEST(testAdd35); + CPPUNIT_TEST(testAdd36); + CPPUNIT_TEST(testAdd37); + CPPUNIT_TEST(testAdd38); + CPPUNIT_TEST(testAdd39); + CPPUNIT_TEST(testGetFrameNumber); + CPPUNIT_TEST(testGetPoint); + CPPUNIT_TEST(testGetCheckAscFrameNumber1); + CPPUNIT_TEST(testGetCheckAscFrameNumber2); + CPPUNIT_TEST(testSetCheckAscFrameNumber1); + CPPUNIT_TEST(testSetCheckAscFrameNumber2); + CPPUNIT_TEST(testSetCheckAscFrameNumber3); + CPPUNIT_TEST(testSetCheckAscFrameNumber4); + CPPUNIT_TEST(testSetCheckAscFrameNumber5); + CPPUNIT_TEST(testSetCheckAscFrameNumber6); + CPPUNIT_TEST(testSetCheckAscFrameNumber7); + CPPUNIT_TEST(testSetCheckAscFrameNumber8); + CPPUNIT_TEST(testSetCheckAscFrameNumber9); + CPPUNIT_TEST(testSetCheckAscFrameNumber10); + CPPUNIT_TEST(testSize1); + CPPUNIT_TEST(testSize2); + CPPUNIT_TEST(testSizeInc); + CPPUNIT_TEST(testSizeDec); + CPPUNIT_TEST(testSizeClear); + CPPUNIT_TEST(testEmptySizeInc); + CPPUNIT_TEST(testEmptySizeDec); + CPPUNIT_TEST(testInsert1); + CPPUNIT_TEST(testInsert2); + CPPUNIT_TEST(testInsert3); + CPPUNIT_TEST(testInsert4); + CPPUNIT_TEST(testInsert5); + CPPUNIT_TEST(testInsert6); + CPPUNIT_TEST(testInsert7); + CPPUNIT_TEST(testInsert8); + CPPUNIT_TEST(testInsert9); + CPPUNIT_TEST(testErase1); + CPPUNIT_TEST(testErase2); + CPPUNIT_TEST(testErase3); + CPPUNIT_TEST(testErase4); + CPPUNIT_TEST(testErase5); + CPPUNIT_TEST(testErase6); + CPPUNIT_TEST(testErase7); + CPPUNIT_TEST(testErase8); + CPPUNIT_TEST(testErase9); + CPPUNIT_TEST(testErase10); + CPPUNIT_TEST(testErase11); + CPPUNIT_TEST(testErase12); + CPPUNIT_TEST(testErase13); + CPPUNIT_TEST(testErase14); + CPPUNIT_TEST(testPop_back1); + CPPUNIT_TEST(testPop_back2); + CPPUNIT_TEST(testPop_back3); + CPPUNIT_TEST(testPop_back4); + CPPUNIT_TEST(testOperatorGet); + CPPUNIT_TEST(testAt1); + CPPUNIT_TEST(testAt2); + CPPUNIT_TEST(testAt3); + CPPUNIT_TEST(testAt4); + CPPUNIT_TEST(testAt5); + CPPUNIT_TEST(testAt6); + CPPUNIT_TEST(testAt7); + CPPUNIT_TEST(testShift1); + CPPUNIT_TEST(testShift2); + CPPUNIT_TEST(testOperatorEq1); + CPPUNIT_TEST(testOperatorEq2); + CPPUNIT_TEST(testOperatorEq3); + CPPUNIT_TEST(testOperatorEq4); + CPPUNIT_TEST(testOperatorEq5); + CPPUNIT_TEST(testOperatorEq6); + CPPUNIT_TEST(testOperatorEq7); + CPPUNIT_TEST(testOperatorEq8); + CPPUNIT_TEST(testOperatorAdd1); + CPPUNIT_TEST(testOperatorAdd2); +// CPPUNIT_TEST(testOperatorIn1); +// CPPUNIT_TEST(testOperatorIn2); +// CPPUNIT_TEST(testOperatorIn3); +// CPPUNIT_TEST(testOperatorOut1); +// CPPUNIT_TEST(testOperatorOut2); +// CPPUNIT_TEST(testOperatorOut3); + CPPUNIT_TEST(testMin1); + CPPUNIT_TEST(testMin2); + CPPUNIT_TEST(testMin3); + CPPUNIT_TEST(testMin4); + CPPUNIT_TEST(testMax1); + CPPUNIT_TEST(testMax2); + CPPUNIT_TEST(testMax3); + CPPUNIT_TEST(testMax4); + CPPUNIT_TEST_SUITE_END(); + +public: + void setUp(void) + { + sampleTrajectory.setId(1); + + const unsigned int n = 100; + for (unsigned int i = 0; i < n; ++i) + { + T point; + initPoint(point, int(i), int(i + 10), int(i + 20)); + sampleTrajectory.add(i + 1, point); + } + } + + void tearDown(void) + { + sampleTrajectory.clear(); + } + +protected: + void testTrajectory1(void) + { + Trajectory<T> trajectory; + CPPUNIT_ASSERT_EQUAL(trajectory.getId(), (unsigned int) 0); + } + + void testTrajectory2(void) + { + Trajectory<T> trajectory; + CPPUNIT_ASSERT_EQUAL(trajectory.getCheckAscFrameNumber(), false); + } + + void testTrajectory3(void) + { + Trajectory<T> trajectory(sampleTrajectory); + CPPUNIT_ASSERT_EQUAL(trajectory, sampleTrajectory); + } + + void testSetId(void) + { + const unsigned int id = 123; + sampleTrajectory.setId(id); + CPPUNIT_ASSERT_EQUAL(sampleTrajectory.getId(), id); + } + + void testGetTrajectoryElement(void) + { + for (unsigned int i = 0; i < sampleTrajectory.size(); ++i) + { + TrajectoryElement<T> trajectoryElement1 = sampleTrajectory.getTrajectoryElement(i); + T point; + initPoint(point, int(i), int(i + 10), int(i + 20)); + TrajectoryElement<T> trajectoryElement2(i + 1, point); + CPPUNIT_ASSERT_EQUAL(trajectoryElement1, trajectoryElement2); + } + } + + void testAdd1(void) + { + Trajectory<T> trajectory; + trajectory.setId(1); + + for (unsigned int i = 0; i < sampleTrajectory.size(); ++i) + { + const unsigned int frameNumber = sampleTrajectory.getFrameNumber(i); + const T point = sampleTrajectory.getPoint(i); + + trajectory.add(frameNumber, point); + + TrajectoryElement<T> trajectoryElement1 = trajectory.getTrajectoryElement(i); + TrajectoryElement<T> trajectoryElement2(frameNumber, point); + + CPPUNIT_ASSERT_EQUAL(trajectoryElement1, trajectoryElement2); + } + + CPPUNIT_ASSERT_EQUAL(trajectory, sampleTrajectory); + } + + void testAdd2(void) + { + Trajectory<T> trajectory; + trajectory.setId(1); + + for (unsigned int i = 0; i < sampleTrajectory.size(); ++i) + { + const unsigned int frameNumber = sampleTrajectory.getFrameNumber(i); + const T point = sampleTrajectory.getPoint(i); + + //trajectory.add(point); + trajectory.add(frameNumber, point); + + const TrajectoryElement<T> trajectoryElement1(frameNumber, point); + const TrajectoryElement<T> trajectoryElement2 = trajectory.getTrajectoryElement(i); + + CPPUNIT_ASSERT_EQUAL(trajectoryElement1, trajectoryElement2); + } + + CPPUNIT_ASSERT_EQUAL(trajectory, sampleTrajectory); + } + + void testAdd3(void) + { + Trajectory<T> trajectory; + trajectory.setId(1); + + for (unsigned int i = 0; i < sampleTrajectory.size(); ++i) + { + const unsigned int frameNumber = sampleTrajectory.getFrameNumber(i); + const T point = sampleTrajectory.getPoint(i); + + const TrajectoryElement<T> trajectoryElement1(frameNumber, point); + + trajectory.add(trajectoryElement1); + + const TrajectoryElement<T> trajectoryElement2 = trajectory.getTrajectoryElement(i); + + CPPUNIT_ASSERT_EQUAL(trajectoryElement1, trajectoryElement2); + } + + CPPUNIT_ASSERT_EQUAL(trajectory, sampleTrajectory); + } + + void testAdd4(void) + { + const T point = sampleTrajectory.getPoint(0); + Trajectory<T> trajectory; + trajectory.setCheckAscFrameNumber(true); + CPPUNIT_ASSERT_NO_THROW(trajectory.add(0, point)); + } + + void testAdd5(void) + { + const T point = sampleTrajectory.getPoint(0); + Trajectory<T> trajectory; + trajectory.setCheckAscFrameNumber(false); + CPPUNIT_ASSERT_NO_THROW(trajectory.add(0, point)); + } + + void testAdd6(void) + { + const T point = sampleTrajectory.getPoint(0); + Trajectory<T> trajectory; + trajectory.setCheckAscFrameNumber(true); + CPPUNIT_ASSERT_NO_THROW(trajectory.add(0, point)); + CPPUNIT_ASSERT_THROW(trajectory.add(0, point), TrajectoryFrameNumberErrorException); + } + + void testAdd7(void) + { + const T point = sampleTrajectory.getPoint(0); + Trajectory<T> trajectory; + trajectory.setCheckAscFrameNumber(false); + CPPUNIT_ASSERT_NO_THROW(trajectory.add(0, point)); + CPPUNIT_ASSERT_NO_THROW(trajectory.add(0, point)); + } + + void testAdd8(void) + { + const T point = sampleTrajectory.getPoint(0); + Trajectory<T> trajectory; + trajectory.setCheckAscFrameNumber(true); + CPPUNIT_ASSERT_NO_THROW(trajectory.add(0, point)); + CPPUNIT_ASSERT_NO_THROW(trajectory.add(1, point)); + } + + void testAdd9(void) + { + const T point = sampleTrajectory.getPoint(0); + Trajectory<T> trajectory; + trajectory.setCheckAscFrameNumber(false); + CPPUNIT_ASSERT_NO_THROW(trajectory.add(0, point)); + CPPUNIT_ASSERT_NO_THROW(trajectory.add(1, point)); + } + + void testAdd10(void) + { + const T point = sampleTrajectory.getPoint(0); + Trajectory<T> trajectory; + trajectory.setCheckAscFrameNumber(true); + CPPUNIT_ASSERT_NO_THROW(trajectory.add(2, point)); + } + + void testAdd11(void) + { + const T point = sampleTrajectory.getPoint(0); + Trajectory<T> trajectory; + trajectory.setCheckAscFrameNumber(false); + CPPUNIT_ASSERT_NO_THROW(trajectory.add(2, point)); + } + + void testAdd12(void) + { + const T point = sampleTrajectory.getPoint(0); + Trajectory<T> trajectory; + trajectory.setCheckAscFrameNumber(true); + CPPUNIT_ASSERT_NO_THROW(trajectory.add(2, point)); + CPPUNIT_ASSERT_THROW(trajectory.add(2, point), TrajectoryFrameNumberErrorException); + } + + void testAdd13(void) + { + const T point = sampleTrajectory.getPoint(0); + Trajectory<T> trajectory; + trajectory.setCheckAscFrameNumber(false); + CPPUNIT_ASSERT_NO_THROW(trajectory.add(2, point)); + CPPUNIT_ASSERT_NO_THROW(trajectory.add(2, point)); + } + + void testAdd14(void) + { + const T point = sampleTrajectory.getPoint(0); + Trajectory<T> trajectory; + trajectory.setCheckAscFrameNumber(true); + CPPUNIT_ASSERT_NO_THROW(trajectory.add(2, point)); + CPPUNIT_ASSERT_NO_THROW(trajectory.add(3, point)); + } + + void testAdd15(void) + { + const T point = sampleTrajectory.getPoint(0); + Trajectory<T> trajectory; + trajectory.setCheckAscFrameNumber(false); + CPPUNIT_ASSERT_NO_THROW(trajectory.add(2, point)); + CPPUNIT_ASSERT_NO_THROW(trajectory.add(3, point)); + } + + void testAdd16(void) + { + const T point = sampleTrajectory.getPoint(0); + Trajectory<T> trajectory; + trajectory.setCheckAscFrameNumber(true); + CPPUNIT_ASSERT_NO_THROW(trajectory.add(2, point)); + CPPUNIT_ASSERT_NO_THROW(trajectory.add(4, point)); + } + + void testAdd17(void) + { + const T point = sampleTrajectory.getPoint(0); + Trajectory<T> trajectory; + trajectory.setCheckAscFrameNumber(false); + CPPUNIT_ASSERT_NO_THROW(trajectory.add(2, point)); + CPPUNIT_ASSERT_NO_THROW(trajectory.add(4, point)); + } + + void testAdd18(void) + { + const T point = sampleTrajectory.getPoint(0); + + Trajectory<T> trajectory; + trajectory.setCheckAscFrameNumber(true); + trajectory.add(10, point); + + for (unsigned int i = 0; i < sampleTrajectory.size(); ++i) + { + CPPUNIT_ASSERT_THROW(trajectory.add(10 + i - 1, point), TrajectoryFrameNumberErrorException); + CPPUNIT_ASSERT_THROW(trajectory.add(10 + i, point), TrajectoryFrameNumberErrorException); + CPPUNIT_ASSERT_NO_THROW(trajectory.add(10 + i + 1, point)); + } + + CPPUNIT_ASSERT_EQUAL(trajectory.size(), (unsigned int) (sampleTrajectory.size() + 1)); + } + + void testAdd19(void) + { + const T point = sampleTrajectory.getPoint(0); + + Trajectory<T> trajectory; + trajectory.setCheckAscFrameNumber(false); + trajectory.add(10, point); + + for (unsigned int i = 0; i < sampleTrajectory.size(); ++i) + { + CPPUNIT_ASSERT_NO_THROW(trajectory.add(10 + i - 1, point)); + CPPUNIT_ASSERT_NO_THROW(trajectory.add(10 + i, point)); + CPPUNIT_ASSERT_NO_THROW(trajectory.add(10 + i + 1, point)); + } + + CPPUNIT_ASSERT_EQUAL(trajectory.size(), (unsigned int) (3 * sampleTrajectory.size() + 1)); + } + + void testAdd20(void) + { + sampleTrajectory.setCheckAscFrameNumber(true); + const unsigned int frameNumber = sampleTrajectory.getFrameNumber(sampleTrajectory.size() - 1); + const T point = sampleTrajectory.getPoint(sampleTrajectory.size() - 1); + + for (unsigned int i = 0; i <= frameNumber; ++i) + { + CPPUNIT_ASSERT_THROW(sampleTrajectory.add(i, point), TrajectoryFrameNumberErrorException); + } + + CPPUNIT_ASSERT_NO_THROW(sampleTrajectory.add(frameNumber + 1, point)); + + CPPUNIT_ASSERT_EQUAL(sampleTrajectory.size(), (unsigned int) 101); + } + + void testAdd21(void) + { + sampleTrajectory.setCheckAscFrameNumber(false); + const unsigned int frameNumber = sampleTrajectory.getFrameNumber(sampleTrajectory.size() - 1); + const T point = sampleTrajectory.getPoint(sampleTrajectory.size() - 1); + + for (unsigned int i = 0; i <= frameNumber; ++i) + { + CPPUNIT_ASSERT_NO_THROW(sampleTrajectory.add(i, point)); + } + + CPPUNIT_ASSERT_NO_THROW(sampleTrajectory.add(frameNumber + 1, point)); + + CPPUNIT_ASSERT_EQUAL(sampleTrajectory.size(), (unsigned int) 202); + } + + void testAdd22(void) + { + const T point = sampleTrajectory.getPoint(0); + Trajectory<T> trajectory; + trajectory.setCheckAscFrameNumber(true); + const TrajectoryElement<T> trajectoryElement(0, point); + CPPUNIT_ASSERT_NO_THROW(trajectory.add(trajectoryElement)); + } + + void testAdd23(void) + { + const T point = sampleTrajectory.getPoint(0); + Trajectory<T> trajectory; + trajectory.setCheckAscFrameNumber(false); + const TrajectoryElement<T> trajectoryElement(0, point); + CPPUNIT_ASSERT_NO_THROW(trajectory.add(trajectoryElement)); + } + + void testAdd24(void) + { + const T point = sampleTrajectory.getPoint(0); + Trajectory<T> trajectory; + trajectory.setCheckAscFrameNumber(true); + const TrajectoryElement<T> trajectoryElement(0, point); + CPPUNIT_ASSERT_NO_THROW(trajectory.add(trajectoryElement)); + CPPUNIT_ASSERT_THROW(trajectory.add(trajectoryElement), TrajectoryFrameNumberErrorException); + } + + void testAdd25(void) + { + const T point = sampleTrajectory.getPoint(0); + Trajectory<T> trajectory; + trajectory.setCheckAscFrameNumber(false); + const TrajectoryElement<T> trajectoryElement(0, point); + CPPUNIT_ASSERT_NO_THROW(trajectory.add(trajectoryElement)); + CPPUNIT_ASSERT_NO_THROW(trajectory.add(trajectoryElement)); + } + + void testAdd26(void) + { + const T point = sampleTrajectory.getPoint(0); + Trajectory<T> trajectory; + trajectory.setCheckAscFrameNumber(true); + const TrajectoryElement<T> trajectoryElement1(0, point); + const TrajectoryElement<T> trajectoryElement2(1, point); + CPPUNIT_ASSERT_NO_THROW(trajectory.add(trajectoryElement1)); + CPPUNIT_ASSERT_NO_THROW(trajectory.add(trajectoryElement2)); + } + + void testAdd27(void) + { + const T point = sampleTrajectory.getPoint(0); + Trajectory<T> trajectory; + trajectory.setCheckAscFrameNumber(false); + const TrajectoryElement<T> trajectoryElement1(0, point); + const TrajectoryElement<T> trajectoryElement2(1, point); + CPPUNIT_ASSERT_NO_THROW(trajectory.add(trajectoryElement1)); + CPPUNIT_ASSERT_NO_THROW(trajectory.add(trajectoryElement2)); + } + + void testAdd28(void) + { + const T point = sampleTrajectory.getPoint(0); + Trajectory<T> trajectory; + trajectory.setCheckAscFrameNumber(true); + const TrajectoryElement<T> trajectoryElement(2, point); + CPPUNIT_ASSERT_NO_THROW(trajectory.add(trajectoryElement)); + } + + void testAdd29(void) + { + const T point = sampleTrajectory.getPoint(0); + Trajectory<T> trajectory; + trajectory.setCheckAscFrameNumber(false); + const TrajectoryElement<T> trajectoryElement(2, point); + CPPUNIT_ASSERT_NO_THROW(trajectory.add(trajectoryElement)); + } + + void testAdd30(void) + { + const T point = sampleTrajectory.getPoint(0); + Trajectory<T> trajectory; + trajectory.setCheckAscFrameNumber(true); + const TrajectoryElement<T> trajectoryElement(2, point); + CPPUNIT_ASSERT_NO_THROW(trajectory.add(trajectoryElement)); + CPPUNIT_ASSERT_THROW(trajectory.add(trajectoryElement), TrajectoryFrameNumberErrorException); + } + + void testAdd31(void) + { + const T point = sampleTrajectory.getPoint(0); + Trajectory<T> trajectory; + trajectory.setCheckAscFrameNumber(false); + const TrajectoryElement<T> trajectoryElement(2, point); + CPPUNIT_ASSERT_NO_THROW(trajectory.add(trajectoryElement)); + CPPUNIT_ASSERT_NO_THROW(trajectory.add(trajectoryElement)); + } + + void testAdd32(void) + { + const T point = sampleTrajectory.getPoint(0); + Trajectory<T> trajectory; + trajectory.setCheckAscFrameNumber(true); + const TrajectoryElement<T> trajectoryElement1(2, point); + const TrajectoryElement<T> trajectoryElement2(3, point); + CPPUNIT_ASSERT_NO_THROW(trajectory.add(trajectoryElement1) ); + CPPUNIT_ASSERT_NO_THROW(trajectory.add(trajectoryElement2)); + } + + void testAdd33(void) + { + const T point = sampleTrajectory.getPoint(0); + Trajectory<T> trajectory; + trajectory.setCheckAscFrameNumber(false); + const TrajectoryElement<T> trajectoryElement1(2, point); + const TrajectoryElement<T> trajectoryElement2(3, point); + CPPUNIT_ASSERT_NO_THROW(trajectory.add(trajectoryElement1)); + CPPUNIT_ASSERT_NO_THROW(trajectory.add(trajectoryElement2)); + } + + void testAdd34(void) + { + const T point = sampleTrajectory.getPoint(0); + Trajectory<T> trajectory; + trajectory.setCheckAscFrameNumber(true); + const TrajectoryElement<T> trajectoryElement1(2, point); + const TrajectoryElement<T> trajectoryElement2(4, point); + CPPUNIT_ASSERT_NO_THROW(trajectory.add(trajectoryElement1)); + CPPUNIT_ASSERT_NO_THROW(trajectory.add(trajectoryElement2)); + } + + void testAdd35(void) + { + const T point = sampleTrajectory.getPoint(0); + Trajectory<T> trajectory; + trajectory.setCheckAscFrameNumber(false); + const TrajectoryElement<T> trajectoryElement1(2, point); + const TrajectoryElement<T> trajectoryElement2(4, point); + CPPUNIT_ASSERT_NO_THROW(trajectory.add(trajectoryElement1)); + CPPUNIT_ASSERT_NO_THROW(trajectory.add(trajectoryElement2)); + } + + void testAdd36(void) + { + const T point = sampleTrajectory.getPoint(0); + + Trajectory<T> trajectory; + trajectory.setCheckAscFrameNumber(true); + const TrajectoryElement<T> trajectoryElement1(10, point); + CPPUNIT_ASSERT_NO_THROW(trajectory.add(trajectoryElement1)); + + for (unsigned int i = 0; i < sampleTrajectory.size(); ++i) + { + const TrajectoryElement<T> trajectoryElement2(10 + i - 1, point); + const TrajectoryElement<T> trajectoryElement3(10 + i, point); + const TrajectoryElement<T> trajectoryElement4(10 + i + 1, point); + CPPUNIT_ASSERT_THROW(trajectory.add(trajectoryElement2), TrajectoryFrameNumberErrorException); + CPPUNIT_ASSERT_THROW(trajectory.add(trajectoryElement3), TrajectoryFrameNumberErrorException); + CPPUNIT_ASSERT_NO_THROW(trajectory.add(trajectoryElement4)); + } + + CPPUNIT_ASSERT_EQUAL(trajectory.size(), (unsigned int) (sampleTrajectory.size() + 1)); + } + + void testAdd37(void) + { + const T point = sampleTrajectory.getPoint(0); + + Trajectory<T> trajectory; + trajectory.setCheckAscFrameNumber(false); + const TrajectoryElement<T> trajectoryElement1(10, point); + CPPUNIT_ASSERT_NO_THROW(trajectory.add(trajectoryElement1)); + + for (unsigned int i = 0; i < sampleTrajectory.size(); ++i) + { + const TrajectoryElement<T> trajectoryElement2(10 + i - 1, point); + const TrajectoryElement<T> trajectoryElement3(10 + i, point); + const TrajectoryElement<T> trajectoryElement4(10 + i + 1, point); + CPPUNIT_ASSERT_NO_THROW(trajectory.add(trajectoryElement2)); + CPPUNIT_ASSERT_NO_THROW(trajectory.add(trajectoryElement3)); + CPPUNIT_ASSERT_NO_THROW(trajectory.add(trajectoryElement4)); + } + + CPPUNIT_ASSERT_EQUAL(trajectory.size(), (unsigned int) (3 * sampleTrajectory.size() + 1)); + } + + void testAdd38(void) + { + sampleTrajectory.setCheckAscFrameNumber(true); + const unsigned int frameNumber = sampleTrajectory.getFrameNumber(sampleTrajectory.size() - 1); + const T point = sampleTrajectory.getPoint(sampleTrajectory.size() - 1); + + for (unsigned int i = 0; i <= frameNumber; ++i) + { + const TrajectoryElement<T> trajectoryElement(i, point); + CPPUNIT_ASSERT_THROW(sampleTrajectory.add(trajectoryElement), TrajectoryFrameNumberErrorException); + } + + const TrajectoryElement<T> trajectoryElement(frameNumber + 1, point); + CPPUNIT_ASSERT_NO_THROW(sampleTrajectory.add(trajectoryElement)); + + CPPUNIT_ASSERT_EQUAL(sampleTrajectory.size(), (unsigned int) 101); + } + + void testAdd39(void) + { + sampleTrajectory.setCheckAscFrameNumber(false); + const unsigned int frameNumber = sampleTrajectory.getFrameNumber(sampleTrajectory.size() - 1); + const T point = sampleTrajectory.getPoint(sampleTrajectory.size() - 1); + + for (unsigned int i = 0; i <= frameNumber; ++i) + { + const TrajectoryElement<T> trajectoryElement(i, point); + CPPUNIT_ASSERT_NO_THROW(sampleTrajectory.add(trajectoryElement)); + } + + const TrajectoryElement<T> trajectoryElement(frameNumber + 1, point); + CPPUNIT_ASSERT_NO_THROW(sampleTrajectory.add(trajectoryElement)); + + CPPUNIT_ASSERT_EQUAL(sampleTrajectory.size(), (unsigned int) 202); + } + + void testGetFrameNumber(void) + { + for (unsigned int i = 0; i < sampleTrajectory.size(); ++i) + { + unsigned int frameNumber = sampleTrajectory.getFrameNumber(i); + CPPUNIT_ASSERT_EQUAL(frameNumber, i + 1); + } + } + + void testGetPoint(void) + { + for (unsigned int i = 0; i < sampleTrajectory.size(); ++i) + { + T point1 = sampleTrajectory.getPoint(i); + T point2; + initPoint(point2, int(i), int(i + 10), int(i + 20)); + CPPUNIT_ASSERT_EQUAL(point1, point2); + } + } + + void testGetCheckAscFrameNumber1(void) + { + sampleTrajectory.setCheckAscFrameNumber(false); + CPPUNIT_ASSERT_EQUAL(sampleTrajectory.getCheckAscFrameNumber(), false); + } + + void testGetCheckAscFrameNumber2(void) + { + sampleTrajectory.setCheckAscFrameNumber(true); + CPPUNIT_ASSERT_EQUAL(sampleTrajectory.getCheckAscFrameNumber(), true); + } + + void testSetCheckAscFrameNumber1(void) + { + Trajectory<T> trajectory; + CPPUNIT_ASSERT_NO_THROW(trajectory.setCheckAscFrameNumber(false)); + CPPUNIT_ASSERT_NO_THROW(trajectory.setCheckAscFrameNumber(true)); + } + + void testSetCheckAscFrameNumber2(void) + { + T point; + initPoint(point, int(10), int(20), int(30)); + Trajectory<T> trajectory; + trajectory.add(0, point); + CPPUNIT_ASSERT_NO_THROW(trajectory.setCheckAscFrameNumber(false)); + CPPUNIT_ASSERT_NO_THROW(trajectory.setCheckAscFrameNumber(true)); + } + + void testSetCheckAscFrameNumber3(void) + { + T point; + initPoint(point, int(10), int(20), int(30)); + Trajectory<T> trajectory; + trajectory.add(1, point); + CPPUNIT_ASSERT_NO_THROW(trajectory.setCheckAscFrameNumber(false)); + CPPUNIT_ASSERT_NO_THROW(trajectory.setCheckAscFrameNumber(true)); + } + + void testSetCheckAscFrameNumber4(void) + { + T point; + initPoint(point, int(10), int(20), int(30)); + Trajectory<T> trajectory; + trajectory.add(1, point); + trajectory.add(2, point); + CPPUNIT_ASSERT_NO_THROW(trajectory.setCheckAscFrameNumber(false)); + CPPUNIT_ASSERT_NO_THROW(trajectory.setCheckAscFrameNumber(true)); + } + + void testSetCheckAscFrameNumber5(void) + { + T point; + initPoint(point, int(10), int(20), int(30)); + Trajectory<T> trajectory; + trajectory.add(1, point); + trajectory.add(1, point); + CPPUNIT_ASSERT_NO_THROW(trajectory.setCheckAscFrameNumber(false)); + CPPUNIT_ASSERT_THROW(trajectory.setCheckAscFrameNumber(true), TrajectoryFrameNumberErrorException); + } + + void testSetCheckAscFrameNumber6(void) + { + T point; + initPoint(point, int(10), int(20), int(30)); + Trajectory<T> trajectory; + trajectory.add(2, point); + trajectory.add(1, point); + CPPUNIT_ASSERT_NO_THROW(trajectory.setCheckAscFrameNumber(false)); + CPPUNIT_ASSERT_THROW(trajectory.setCheckAscFrameNumber(true), TrajectoryFrameNumberErrorException); + } + + void testSetCheckAscFrameNumber7(void) + { + T point; + initPoint(point, int(10), int(20), int(30)); + Trajectory<T> trajectory; + trajectory.add(1, point); + trajectory.add(2, point); + trajectory.add(2, point); + trajectory.add(3, point); + CPPUNIT_ASSERT_NO_THROW(trajectory.setCheckAscFrameNumber(false)); + CPPUNIT_ASSERT_THROW(trajectory.setCheckAscFrameNumber(true), TrajectoryFrameNumberErrorException); + } + + void testSetCheckAscFrameNumber8(void) + { + CPPUNIT_ASSERT_NO_THROW(sampleTrajectory.setCheckAscFrameNumber(false)); + CPPUNIT_ASSERT_NO_THROW(sampleTrajectory.setCheckAscFrameNumber(true)); + } + + void testSetCheckAscFrameNumber9(void) + { + T point; + initPoint(point, int(10), int(20), int(30)); + sampleTrajectory.add(100, point); + CPPUNIT_ASSERT_NO_THROW(sampleTrajectory.setCheckAscFrameNumber(false)); + CPPUNIT_ASSERT_THROW(sampleTrajectory.setCheckAscFrameNumber(true), TrajectoryFrameNumberErrorException); + } + + void testSetCheckAscFrameNumber10(void) + { + T point; + initPoint(point, int(10), int(20), int(30)); + sampleTrajectory.add(101, point); + CPPUNIT_ASSERT_NO_THROW(sampleTrajectory.setCheckAscFrameNumber(false)); + CPPUNIT_ASSERT_NO_THROW(sampleTrajectory.setCheckAscFrameNumber(true)); + } + + void testSize1(void) + { + Trajectory<T> trajectory; + CPPUNIT_ASSERT_EQUAL(trajectory.size(), (unsigned int) 0); + } + + void testSize2(void) + { + Trajectory<T> trajectory; + trajectory = sampleTrajectory; + CPPUNIT_ASSERT_EQUAL(trajectory.size(), (unsigned int) 100); + } + + void testSizeInc(void) + { + Trajectory<T> trajectory; + + for (unsigned int i = 0; i < sampleTrajectory.size(); ++i) + { + CPPUNIT_ASSERT_EQUAL(trajectory.size(), (unsigned int) i); + + T point = (sampleTrajectory)[i]; + trajectory.add(point); + } + + CPPUNIT_ASSERT_EQUAL(trajectory.size(), sampleTrajectory.size()); + } + + void testSizeDec(void) + { + unsigned int size = sampleTrajectory.size(); + + for (unsigned int i = 0; i < size; ++i) + { + CPPUNIT_ASSERT_EQUAL(sampleTrajectory.size(), (unsigned int)(size - i)); + + sampleTrajectory.pop_back(); + } + + CPPUNIT_ASSERT_EQUAL(sampleTrajectory.size(), (unsigned int) 0); + } + + void testSizeClear(void) + { + sampleTrajectory.clear(); + CPPUNIT_ASSERT_EQUAL(sampleTrajectory.size(), (unsigned int) 0); + } + + void testEmptySizeInc(void) + { + Trajectory<T> trajectory; + CPPUNIT_ASSERT_EQUAL(trajectory.empty(), true); + + for (unsigned int i = 0; i < sampleTrajectory.size(); ++i) + { + const TrajectoryElement<T> trajectoryElement = sampleTrajectory.getTrajectoryElement(i); + trajectory.add(trajectoryElement); + CPPUNIT_ASSERT_EQUAL(trajectory.empty(), false); + } + } + + void testEmptySizeDec(void) + { + Trajectory<T> trajectory; + CPPUNIT_ASSERT_EQUAL(trajectory.empty(), true); + + trajectory = sampleTrajectory; + + for (unsigned int i = 0; i < sampleTrajectory.size(); ++i) + { + CPPUNIT_ASSERT_EQUAL(trajectory.empty(), false); + trajectory.pop_back(); + } + + CPPUNIT_ASSERT_EQUAL(trajectory.empty(), true); + } + + void testInsert1(void) + { + T point; + initPoint(point, int(10), int(40), int(80)); + + Trajectory<T> trajectory; + CPPUNIT_ASSERT_THROW(trajectory.insert(1, 4, point), TrajectoryOutOfRangeErrorException); + } + + void testInsert2(void) + { + T point; + initPoint(point, int(10), int(40), int(80)); + + Trajectory<T> trajectory; + CPPUNIT_ASSERT_NO_THROW(trajectory.insert(0, 4, point)); + + CPPUNIT_ASSERT_EQUAL(trajectory.size(), (unsigned int) 1); + + const TrajectoryElement<T> trajectoryElement1 = trajectory.getTrajectoryElement(0); + const TrajectoryElement<T> trajectoryElement2(4, point); + CPPUNIT_ASSERT_EQUAL(trajectoryElement1, trajectoryElement2); + } + + void testInsert3(void) + { + T point; + initPoint(point, int(10), int(40), int(80)); + + Trajectory<T> trajectory; + CPPUNIT_ASSERT_NO_THROW(sampleTrajectory.insert(sampleTrajectory.size(), 4, point)); + } + + void testInsert4(void) + { + T point; + initPoint(point, int(10), int(40), int(80)); + + Trajectory<T> trajectory; + CPPUNIT_ASSERT_THROW(sampleTrajectory.insert(sampleTrajectory.size() + 1, 4, point), TrajectoryOutOfRangeErrorException); + } + + void testInsert5(void) + { + T point; + initPoint(point, int(10), int(40), int(80)); + + CPPUNIT_ASSERT_NO_THROW(sampleTrajectory.insert(sampleTrajectory.size() - 1, 20, point)); + + const TrajectoryElement<T> trajectoryElement1 = sampleTrajectory.getTrajectoryElement(sampleTrajectory.size() - 1); + const TrajectoryElement<T> trajectoryElement2(20, point); + CPPUNIT_ASSERT (trajectoryElement1 != trajectoryElement2); + } + + void testInsert6(void) + { + T point; + initPoint(point, int(10), int(40), int(80)); + + CPPUNIT_ASSERT_NO_THROW(sampleTrajectory.insert(sampleTrajectory.size(), 20, point)); + + const TrajectoryElement<T> trajectoryElement1 = sampleTrajectory.getTrajectoryElement(sampleTrajectory.size()); + const TrajectoryElement<T> trajectoryElement2(20, point); + CPPUNIT_ASSERT(trajectoryElement1 != trajectoryElement2); + } + + void testInsert7(void) + { + T point; + initPoint(point, int(10), int(40), int(80)); + + CPPUNIT_ASSERT_NO_THROW(sampleTrajectory.insert(10, 20, point)); + + const TrajectoryElement<T> trajectoryElement1 = sampleTrajectory.getTrajectoryElement(10); + const TrajectoryElement<T> trajectoryElement2(20, point); + CPPUNIT_ASSERT_EQUAL(trajectoryElement1, trajectoryElement2); + } + + void testInsert8(void) + { + sampleTrajectory.setCheckAscFrameNumber(true); + + T point; + initPoint(point, int(10), int(40), int(80)); + + CPPUNIT_ASSERT_THROW(sampleTrajectory.insert(sampleTrajectory.size() + 1, 100, point), TrajectoryOutOfRangeErrorException); + CPPUNIT_ASSERT_THROW(sampleTrajectory.insert(sampleTrajectory.size(), 100, point), TrajectoryFrameNumberErrorException); + CPPUNIT_ASSERT_NO_THROW(sampleTrajectory.insert(sampleTrajectory.size(), 101, point)); + } + + void testInsert9(void) + { + sampleTrajectory.setCheckAscFrameNumber(true); + + T point; + initPoint(point, int(10), int(40), int(80)); + + for (unsigned int i = 0; i < sampleTrajectory.size() - 1; ++i) + { + CPPUNIT_ASSERT_THROW(sampleTrajectory.insert(i, 20, point), TrajectoryFrameNumberErrorException); + CPPUNIT_ASSERT_THROW(sampleTrajectory.insert(i, 200, point), TrajectoryFrameNumberErrorException); + } + } + + void testErase1(void) + { + Trajectory<T> trajectory; + CPPUNIT_ASSERT_THROW(trajectory.erase(0), TrajectoryOutOfRangeErrorException); + } + + void testErase2(void) + { + Trajectory<T> trajectory; + CPPUNIT_ASSERT_THROW(trajectory.erase(1), TrajectoryOutOfRangeErrorException); + } + + void testErase3(void) + { + const T point = sampleTrajectory.getPoint(0); + Trajectory<T> trajectory; + trajectory.add(point); + CPPUNIT_ASSERT_NO_THROW(trajectory.erase(0)); + + Trajectory<T> emptyTrajectory; + CPPUNIT_ASSERT_EQUAL(trajectory, emptyTrajectory); + } + + void testErase4(void) + { + const T point = sampleTrajectory.getPoint(0); + Trajectory<T> trajectory; + trajectory.add(point); + CPPUNIT_ASSERT_THROW(trajectory.erase(1), TrajectoryOutOfRangeErrorException); + } + + void testErase5(void) + { + CPPUNIT_ASSERT_NO_THROW(sampleTrajectory.erase(0)); + CPPUNIT_ASSERT_EQUAL(sampleTrajectory.size(), (unsigned int) 99); + } + + void testErase6(void) + { + CPPUNIT_ASSERT_NO_THROW(sampleTrajectory.erase(1)); + CPPUNIT_ASSERT_EQUAL(sampleTrajectory.size(), (unsigned int) 99); + } + + void testErase7(void) + { + CPPUNIT_ASSERT_NO_THROW(sampleTrajectory.erase(0)); + CPPUNIT_ASSERT_NO_THROW(sampleTrajectory.erase(0)); + CPPUNIT_ASSERT_EQUAL(sampleTrajectory.size(), (unsigned int) 98); + } + + void testErase8(void) + { + CPPUNIT_ASSERT_NO_THROW(sampleTrajectory.erase(sampleTrajectory.size() - 1)); + CPPUNIT_ASSERT_NO_THROW(sampleTrajectory.erase(sampleTrajectory.size() - 1)); + CPPUNIT_ASSERT_EQUAL(sampleTrajectory.size(), (unsigned int) 98); + } + + void testErase9(void) + { + CPPUNIT_ASSERT_THROW(sampleTrajectory.erase(sampleTrajectory.size()), TrajectoryOutOfRangeErrorException); + } + + void testErase10(void) + { + CPPUNIT_ASSERT_THROW(sampleTrajectory.erase(sampleTrajectory.size() + 1), TrajectoryOutOfRangeErrorException); + } + + void testErase11(void) + { + for (unsigned int i = 0; i < 100; ++i) + { + CPPUNIT_ASSERT_NO_THROW(sampleTrajectory.erase(0)); + CPPUNIT_ASSERT_EQUAL(sampleTrajectory.size(), 100 - i - 1); + } + + CPPUNIT_ASSERT_EQUAL(sampleTrajectory.size(), (unsigned int) 0); + + CPPUNIT_ASSERT_THROW(sampleTrajectory.erase(0), TrajectoryOutOfRangeErrorException); + } + + void testErase12(void) + { + for (unsigned int i = 0; i < 100; ++i) + { + CPPUNIT_ASSERT_NO_THROW(sampleTrajectory.erase(sampleTrajectory.size() - 1)); + } + + CPPUNIT_ASSERT_EQUAL(sampleTrajectory.size(), (unsigned int) 0); + + CPPUNIT_ASSERT_THROW(sampleTrajectory.erase(0), TrajectoryOutOfRangeErrorException); + } + + void testErase13(void) + { + T point; + initPoint(point, int(10), int(40), int(80)); + + Trajectory<T> trajectory = sampleTrajectory; + CPPUNIT_ASSERT_EQUAL(trajectory, sampleTrajectory); + + trajectory.insert(20, 20, point); + CPPUNIT_ASSERT(trajectory != sampleTrajectory); + + trajectory.erase(20); + CPPUNIT_ASSERT_EQUAL(trajectory, sampleTrajectory); + } + + void testErase14(void) + { + T point; + initPoint(point, int(10), int(40), int(80)); + + Trajectory<T> trajectory = sampleTrajectory; + CPPUNIT_ASSERT_EQUAL(trajectory, sampleTrajectory); + + trajectory.insert(20, 20, point); + CPPUNIT_ASSERT(trajectory != sampleTrajectory); + + trajectory.erase(10); + CPPUNIT_ASSERT(trajectory != sampleTrajectory); + } + + void testPop_back1(void) + { + Trajectory<T> trajectory; + CPPUNIT_ASSERT_THROW(trajectory.pop_back(), TrajectoryLengthErrorException); + } + + void testPop_back2(void) + { + CPPUNIT_ASSERT_EQUAL(sampleTrajectory.size(), (unsigned int) 100); + + for (int i = 100; i > 0; --i) + { + CPPUNIT_ASSERT_NO_THROW(sampleTrajectory.pop_back()); + CPPUNIT_ASSERT_EQUAL(sampleTrajectory.size(), (unsigned int)(i - 1)); + } + + CPPUNIT_ASSERT_THROW(sampleTrajectory.pop_back(), TrajectoryLengthErrorException); + } + + void testPop_back3(void) + { + T point; + initPoint(point, int(10), int(40), int(80)); + + Trajectory<T> trajectory = sampleTrajectory; + CPPUNIT_ASSERT_EQUAL(trajectory, sampleTrajectory); + + trajectory.add(point); + CPPUNIT_ASSERT(trajectory != sampleTrajectory); + + trajectory.pop_back(); + CPPUNIT_ASSERT_EQUAL(trajectory, sampleTrajectory); + } + + void testPop_back4(void) + { + T point; + initPoint(point, int(10), int(40), int(80)); + + Trajectory<T> trajectory = sampleTrajectory; + CPPUNIT_ASSERT_EQUAL(trajectory, sampleTrajectory); + + trajectory.insert(trajectory.size(), 20, point); + CPPUNIT_ASSERT(trajectory != sampleTrajectory); + + trajectory.pop_back(); + CPPUNIT_ASSERT_EQUAL(trajectory, sampleTrajectory); + } + + void testOperatorGet(void) + { + for (unsigned int i = 0; i < sampleTrajectory.size(); ++i) + { + T point1 = sampleTrajectory[i]; + T point2; + initPoint(point2, int(i), int(i + 10), int(i + 20)); + CPPUNIT_ASSERT_EQUAL(point1, point2); + } + } + + void testAt1(void) + { + Trajectory<T> trajectory; + CPPUNIT_ASSERT_THROW(trajectory.at(0), TrajectoryOutOfRangeErrorException); + CPPUNIT_ASSERT_THROW(trajectory.at(1), TrajectoryOutOfRangeErrorException); + CPPUNIT_ASSERT_THROW(trajectory.at(2), TrajectoryOutOfRangeErrorException); + } + + void testAt2(void) + { + const T point = sampleTrajectory.getPoint(0); + Trajectory<T> trajectory; + trajectory.add(point); + CPPUNIT_ASSERT_NO_THROW(trajectory.at(0)); + CPPUNIT_ASSERT_THROW(trajectory.at(1), TrajectoryOutOfRangeErrorException); + CPPUNIT_ASSERT_THROW(trajectory.at(2), TrajectoryOutOfRangeErrorException); + } + + void testAt3(void) + { + const T point = sampleTrajectory.getPoint(0); + Trajectory<T> trajectory; + trajectory.add(point); + trajectory.add(point); + CPPUNIT_ASSERT_NO_THROW(trajectory.at(0)); + CPPUNIT_ASSERT_NO_THROW(trajectory.at(1)); + CPPUNIT_ASSERT_THROW(trajectory.at(2), TrajectoryOutOfRangeErrorException); + } + + void testAt4(void) + { + for (unsigned int i = 0; i < sampleTrajectory.size(); ++i) + { + T point1; + CPPUNIT_ASSERT_NO_THROW(point1 = sampleTrajectory.at(i)); + T point2; + initPoint(point2, int(i), int(i + 10), int(i + 20)); + CPPUNIT_ASSERT_EQUAL(point1, point2); + } + } + + void testAt5(void) + { + CPPUNIT_ASSERT_NO_THROW(sampleTrajectory.at(sampleTrajectory.size() - 1)); + } + + void testAt6(void) + { + CPPUNIT_ASSERT_THROW(sampleTrajectory.at(sampleTrajectory.size()), TrajectoryOutOfRangeErrorException); + } + + void testAt7(void) + { + CPPUNIT_ASSERT_THROW(sampleTrajectory.at(sampleTrajectory.size() + 1), TrajectoryOutOfRangeErrorException); + } + + void testShift1(void) + { + const int shiftX = 8; + const int shiftY = 4; + const int shiftZ = 2; + + T shiftPoint; + initPoint(shiftPoint, shiftX, shiftY, shiftZ); + sampleTrajectory.shift(shiftPoint); + + for (unsigned int i = 0; i < sampleTrajectory.size(); ++i) + { + const T p1 = sampleTrajectory.getPoint(i); + T p2; + initPoint(p2, int(i) + shiftX, int(i + 10) + shiftY, int(i + 20) + shiftZ); + CPPUNIT_ASSERT_EQUAL(p1, p2); + } + } + + void testShift2(void) + { + const int shiftX1 = 1; + const int shiftX2 = 10; + const int shiftY1 = 2; + const int shiftY2 = 20; + const int shiftZ1 = 3; + const int shiftZ2 = 30; + + T shiftPoint1; + T shiftPoint2; + T shiftPoint3; + initPoint(shiftPoint1, shiftX1, shiftY1, shiftZ1); + initPoint(shiftPoint2, shiftX2, shiftY2, shiftZ2); + initPoint(shiftPoint3, shiftX1 + shiftX2, shiftY1 + shiftY2, shiftZ1 + shiftZ2); + + Trajectory<T> trajectory = sampleTrajectory; + + trajectory.shift(shiftPoint1); + trajectory.shift(shiftPoint2); + + sampleTrajectory.shift(shiftPoint3); + + CPPUNIT_ASSERT_EQUAL(trajectory, sampleTrajectory); + } + + void testOperatorEq1(void) + { + CPPUNIT_ASSERT(sampleTrajectory == sampleTrajectory); + } + + void testOperatorEq2(void) + { + Trajectory<T> trajectory = sampleTrajectory; + CPPUNIT_ASSERT(trajectory == sampleTrajectory); + } + + void testOperatorEq3(void) + { + Trajectory<T> trajectory = sampleTrajectory; + trajectory.pop_back(); + CPPUNIT_ASSERT(trajectory != sampleTrajectory); + } + + void testOperatorEq4(void) + { + Trajectory<T> trajectory = sampleTrajectory; + trajectory.setId(2); + CPPUNIT_ASSERT(trajectory != sampleTrajectory); + } + + void testOperatorEq5(void) + { + Trajectory<T> trajectory = sampleTrajectory; + trajectory.setCheckAscFrameNumber(true); + CPPUNIT_ASSERT(trajectory != sampleTrajectory); + } + + void testOperatorEq6(void) + { + Trajectory<T> trajectory = sampleTrajectory; + trajectory.pop_back(); + const TrajectoryElement<T> trajectoryElement = sampleTrajectory.getTrajectoryElement(sampleTrajectory.size() - 1); + trajectory.add(trajectoryElement); + CPPUNIT_ASSERT(trajectory == sampleTrajectory); + } + + void testOperatorEq7(void) + { + Trajectory<T> trajectory = sampleTrajectory; + trajectory.pop_back(); + TrajectoryElement<T> trajectoryElement = sampleTrajectory.getTrajectoryElement(sampleTrajectory.size() - 1); + trajectoryElement.setFrameNumber(2); + trajectory.add(trajectoryElement); + CPPUNIT_ASSERT(trajectory != sampleTrajectory); + } + + void testOperatorEq8(void) + { + const Trajectory<T> trajectory = sampleTrajectory; + + T point; + + initPoint(point, int(99), int(99 + 10), int(99 + 20)); + sampleTrajectory.pop_back(); + sampleTrajectory.add(100, point); + CPPUNIT_ASSERT(sampleTrajectory == trajectory); + + initPoint(point, int(99 + 1), int(99 + 10), int(99 + 20)); + sampleTrajectory.pop_back(); + sampleTrajectory.add(100, point); + CPPUNIT_ASSERT(sampleTrajectory != trajectory); + + initPoint(point, int(99), int(99 + 10 + 1), int(99 + 20)); + sampleTrajectory.pop_back(); + sampleTrajectory.add(100, point); + CPPUNIT_ASSERT(sampleTrajectory != trajectory); + + initPoint(point, int(99), int(99 + 10), int(99 + 20 + 1)); + sampleTrajectory.pop_back(); + sampleTrajectory.add(100, point); + if (dim(point) == 2) + { + CPPUNIT_ASSERT(sampleTrajectory == trajectory); + } + else if (dim(point) == 3) + { + CPPUNIT_ASSERT(sampleTrajectory != trajectory); + } + } + + void testOperatorAdd1(void) + { + Trajectory<T> trajectory; + trajectory.setId(1); + + for (unsigned int i = 0; i < sampleTrajectory.size(); ++i) + { + const unsigned int frameNumber = sampleTrajectory.getFrameNumber(i); + const T point = sampleTrajectory.getPoint(i); + + trajectory += point; + + const TrajectoryElement<T> trajectoryElement1(frameNumber, point); + const TrajectoryElement<T> trajectoryElement2 = trajectory.getTrajectoryElement(i); + + CPPUNIT_ASSERT_EQUAL(trajectoryElement1, trajectoryElement2); + } + + CPPUNIT_ASSERT_EQUAL(trajectory, sampleTrajectory); + } + + void testOperatorAdd2(void) + { + Trajectory<T> trajectory; + trajectory.setId(1); + + for (unsigned int i = 0; i < sampleTrajectory.size(); ++i) + { + const unsigned int frameNumber = sampleTrajectory.getFrameNumber(i); + const T point = sampleTrajectory.getPoint(i); + + const TrajectoryElement<T> trajectoryElement1(frameNumber, point); + + trajectory += trajectoryElement1; + + const TrajectoryElement<T> trajectoryElement2 = trajectory.getTrajectoryElement(i); + + CPPUNIT_ASSERT_EQUAL(trajectoryElement1, trajectoryElement2); + } + + CPPUNIT_ASSERT_EQUAL(trajectory, sampleTrajectory); + } + + void testOperatorIn1(void) + { + Trajectory<T> trajectory; + stringstream ss; + ss << trajectory; + CPPUNIT_ASSERT_EQUAL(ss.str(), string("0")); + } + + void testOperatorIn2(void) + { + T point; + initPoint(point, int(10), int(20), int(30)); + + Trajectory<T> trajectory; + trajectory.setId(2); + trajectory.add(4, point); + + string s("2 4 10 20"); + if (dim(point) == 3) + { + s += string(" 30"); + } + + stringstream ss; + ss << trajectory; + + CPPUNIT_ASSERT_EQUAL(ss.str(), s); + } + + void testOperatorIn3(void) + { + sampleTrajectory.setId(20); + + string s("20"); + + for (unsigned int i = 0; i < sampleTrajectory.size(); ++i) + { + stringstream ss; + ss << string(" ") << i + 1 << string(" ") << i << string(" ") << i + 10; + if (dim(sampleTrajectory.getPoint(0)) == 3) + { + ss << string(" ") << i + 20; + } + s += ss.str(); + } + + stringstream ss; + ss << sampleTrajectory; + + CPPUNIT_ASSERT_EQUAL(ss.str(), s); + } + + void testOperatorOut1(void) + { + Trajectory<T> trajectory1; + stringstream ss; + ss << trajectory1; + + Trajectory<T> trajectory2; + istringstream is(ss.str()); + is >> trajectory2; + + CPPUNIT_ASSERT_EQUAL(trajectory1, trajectory2); + } + + void testOperatorOut2(void) + { + T point; + initPoint(point, int(10), int(20), int(30)); + + Trajectory<T> trajectory1; + trajectory1.setId(2); + trajectory1.add(4, point); + + string s("2 4 10 20"); + if (dim(point) == 3) + { + s += " 30"; + } + + stringstream ss; + ss << trajectory1; + + Trajectory<T> trajectory2; + istringstream is(ss.str()); + is >> trajectory2; + + CPPUNIT_ASSERT_EQUAL(trajectory1, trajectory2); + } + + void testOperatorOut3(void) + { + sampleTrajectory.setId(20); + + string s("20"); + + for (unsigned int i = 0; i < sampleTrajectory.size(); ++i) + { + stringstream ss; + ss << " " << i + 1 << " " << i << " " << i + 10; + if (dim(sampleTrajectory.getPoint(0)) == 3) + { + ss << " " << i + 20; + } + s += ss.str(); + } + + stringstream ss; + ss << sampleTrajectory; + + Trajectory<T> trajectory; + istringstream is(ss.str()); + is >> trajectory; + + CPPUNIT_ASSERT_EQUAL(trajectory, sampleTrajectory); + } + + void testMin1(void) + { + T point1; + initPoint(point1, 0, 10, 20); + T point2; + CPPUNIT_ASSERT_NO_THROW(point2 = min(sampleTrajectory)); + CPPUNIT_ASSERT_EQUAL(point1, point2); + } + + void testMin2(void) + { + Trajectory<T> trajectory; + T point1; + for (unsigned int i = 0; i < 100; ++i) + { + initPoint(point1, i + 4, 104 - i, i % 24 + 1); + trajectory += point1; + } + + initPoint(point1, 4, 5, 1); + + T point2; + CPPUNIT_ASSERT_NO_THROW(point2 = min(trajectory)); + + CPPUNIT_ASSERT_EQUAL(point1, point2); + } + + void testMin3(void) + { + Trajectory<T> trajectory; + CPPUNIT_ASSERT_THROW(min(trajectory), TrajectoryLengthErrorException); + } + + void testMin4(void) + { + Trajectory<T> trajectory; + T point1, point2; + initPoint(point1, 8, 4, 2); + trajectory.add(point1); + CPPUNIT_ASSERT_NO_THROW(point2 = min(trajectory)); + CPPUNIT_ASSERT_EQUAL(point1, point2); + } + + void testMax1(void) + { + T point1; + initPoint(point1, int(99), int(109), int(119)); + T point2; + CPPUNIT_ASSERT_NO_THROW(point2 = max(sampleTrajectory)); + CPPUNIT_ASSERT_EQUAL(point1, point2); + } + + void testMax2(void) + { + Trajectory<T> trajectory; + T point1; + for (unsigned int i = 0; i < 100; ++i) + { + initPoint(point1, int(i + 4), int(104 - i), int(i % 24 + 1)); + trajectory += point1; + } + + initPoint(point1, 103, 104, 24); + + T point2; + CPPUNIT_ASSERT_NO_THROW(point2 = max(trajectory)); + + CPPUNIT_ASSERT_EQUAL(point1, point2); + } + + void testMax3(void) + { + Trajectory<T> trajectory; + CPPUNIT_ASSERT_THROW(max(trajectory), TrajectoryLengthErrorException); + } + + void testMax4(void) + { + Trajectory<T> trajectory; + T point1, point2; + initPoint(point1, 8, 4, 2); + trajectory.add(point1); + CPPUNIT_ASSERT_NO_THROW(point2 = max(trajectory)); + CPPUNIT_ASSERT_EQUAL(point1, point2); + } + +private: + Trajectory<T> sampleTrajectory; +}; + +#endif /* TRAJECTORYTEST_H_ */