Mercurial Hosting > traffic-intelligence
diff trajectorymanagement/test/PointOperationsTest.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/PointOperationsTest.h Mon Feb 22 22:09:35 2021 -0500 @@ -0,0 +1,160 @@ +#ifndef POINTOPERATIONSTEST_H_ +#define POINTOPERATIONSTEST_H_ + +#include "../src/Trajectory.h" + +#include <cppunit/extensions/HelperMacros.h> + +using namespace std; + +class PointOperationsTest: public CPPUNIT_NS::TestCase +{ + CPPUNIT_TEST_SUITE(PointOperationsTest); + CPPUNIT_TEST(testInitPoint); + CPPUNIT_TEST(testNorm); + CPPUNIT_TEST(testDim); + CPPUNIT_TEST(testMinMax); + CPPUNIT_TEST(testOperatorEqNotEq); + CPPUNIT_TEST(testOperatorMi1); + CPPUNIT_TEST(testOperatorPl); + CPPUNIT_TEST(testOperatorMi2); + //CPPUNIT_TEST(testOperatorInOut); + CPPUNIT_TEST_SUITE_END(); + +protected: + void testInitPoint(void); + void testNorm(void); + void testDim(void); + void testMinMax(void); + void testOperatorEqNotEq(void); + void testOperatorMi1(void); + void testOperatorPl(void); + void testOperatorMi2(void); + void testOperatorInOut(void); + +private: + template<typename Tclass, typename Tparam> + void testInitPoint2D(const Tclass &correctPoint, const Tparam x, const Tparam y, const Tparam z) + { + Tclass point; + initPoint(point, x, y); + CPPUNIT_ASSERT_EQUAL(point, correctPoint); + + testInitPoint3D(correctPoint, x, y, z); + } + + template<typename Tclass, typename Tparam> + void testInitPoint3D(const Tclass &correctPoint, const Tparam x, const Tparam y, const Tparam z) + { + Tclass point; + initPoint(point, x, y, z); + CPPUNIT_ASSERT_EQUAL(point, correctPoint); + } + + template<typename Tclass, typename Tparam> + void testMinMax(Tparam x1, Tparam y1, Tparam z1, Tparam x2, Tparam y2, Tparam z2) + { + Tclass point1, point2, pointMin, pointMax; + initPoint(point1, x1, y1, z1); + initPoint(point2, x2, y2, z2); + initPoint(pointMin, min(x1, x2), min(y1, y2), min(z1, z2)); + initPoint(pointMax, max(x1, x2), max(y1, y2), max(z1, z2)); + CPPUNIT_ASSERT_EQUAL(min(point1, point2), pointMin); + CPPUNIT_ASSERT_EQUAL(min(point2, point1), pointMin); + CPPUNIT_ASSERT_EQUAL(max(point1, point2), pointMax); + CPPUNIT_ASSERT_EQUAL(max(point2, point1), pointMax); + } + + template<typename Tclass, typename Tparam> + void testOperatorEqNotEq(const Tparam x1, const Tparam y1, const Tparam z1, const Tparam delta) + { + Tclass point1; + initPoint(point1, x1, y1, z1); + + const Tclass point2 = point1; + + initPoint(point1, x1, y1, z1); + CPPUNIT_ASSERT(point2 == point1); + CPPUNIT_ASSERT(!(point2 != point1)); + + initPoint(point1, (Tparam) (x1 + delta), y1, z1); + CPPUNIT_ASSERT(point2 != point1); + CPPUNIT_ASSERT(!(point2 == point1)); + + initPoint(point1, (Tparam) (x1 - delta), y1, z1); + CPPUNIT_ASSERT(point2 != point1); + CPPUNIT_ASSERT(!(point2 == point1)); + + initPoint(point1, x1, (Tparam) (y1 + delta), z1); + CPPUNIT_ASSERT(point2 != point1); + CPPUNIT_ASSERT(!(point2 == point1)); + + initPoint(point1, x1, (Tparam) (y1 - delta), z1); + CPPUNIT_ASSERT(point2 != point1); + CPPUNIT_ASSERT(!(point2 == point1)); + + initPoint(point1, x1, y1, (Tparam) (z1 + delta)); + if (dim(point1) == 2) + { + CPPUNIT_ASSERT(point2 == point1); + CPPUNIT_ASSERT(!(point2 != point1)); + } + else if (dim(point1) == 3) + { + CPPUNIT_ASSERT(point2 != point1); + CPPUNIT_ASSERT(!(point2 == point1)); + } + + initPoint(point1, x1, y1, (Tparam) (z1 - delta)); + if (dim(point1) == 2) + { + CPPUNIT_ASSERT(point2 == point1); + CPPUNIT_ASSERT(!(point2 != point1)); + } + else if (dim(point1) == 3) + { + CPPUNIT_ASSERT(point2 != point1); + CPPUNIT_ASSERT(!(point2 == point1)); + } + } + + template<typename T> + void testOperatorPl(const T point1, const T point2, const T point3) + { + const T point4 = point1 + point2; + CPPUNIT_ASSERT_EQUAL(point3, point4); + + T point5 = point1; + point5 += point2; + + CPPUNIT_ASSERT_EQUAL(point3, point5); + } + + template<typename T> + void testOperatorMi(const T point3, const T point2, const T point1) + { + const T point4 = point1 - point2; + CPPUNIT_ASSERT_EQUAL(point3, point4); + + T point5 = point1; + point5 -= point2; + + CPPUNIT_ASSERT_EQUAL(point3, point5); + } + + // problem: different format using the opencv Point to string with the proposed one for CvPoint + template<typename T> + void testOperatorInOut(const T point1, string s) + { + stringstream ss; + ss << point1; + CPPUNIT_ASSERT_EQUAL(ss.str(), s); + + T point2; + istringstream is(s); + is >> point2; + CPPUNIT_ASSERT_EQUAL(point1, point2); + } +}; + +#endif /* POINTOPERATIONSTEST_H_ */