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_ */