You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
177 lines
7.0 KiB
C
177 lines
7.0 KiB
C
4 months ago
|
//Copyright (c) 2015 Ultimaker B.V.
|
||
|
//CuraEngine is released under the terms of the AGPLv3 or higher.
|
||
|
|
||
|
#ifndef LINEARALG2DTEST_H
|
||
|
#define LINEARALG2DTEST_H
|
||
|
|
||
|
#include <cppunit/TestFixture.h>
|
||
|
#include <cppunit/extensions/HelperMacros.h>
|
||
|
#include <../src/utils/intpoint.h>
|
||
|
|
||
|
namespace cura
|
||
|
{
|
||
|
|
||
|
class LinearAlg2DTest : public CppUnit::TestFixture
|
||
|
{
|
||
|
CPPUNIT_TEST_SUITE(LinearAlg2DTest);
|
||
|
CPPUNIT_TEST(getDist2FromLineSegmentHorizontalNearTest);
|
||
|
CPPUNIT_TEST(getDist2FromLineSegmentHorizontalOnTest);
|
||
|
CPPUNIT_TEST(getDist2FromLineSegmentHorizontalBeyondTest);
|
||
|
CPPUNIT_TEST(getDist2FromLineSegmentHorizontalBeforeTest);
|
||
|
CPPUNIT_TEST(getDist2FromLineSegmentHorizontalCornerTest);
|
||
|
CPPUNIT_TEST(getDist2FromLineSegmentHorizontalPerpendicularTest);
|
||
|
CPPUNIT_TEST(getDist2FromLineSegmentVerticalNearTest);
|
||
|
CPPUNIT_TEST(getDist2FromLineSegmentVerticalOnTest);
|
||
|
CPPUNIT_TEST(getDist2FromLineSegmentVerticalBeyondTest);
|
||
|
CPPUNIT_TEST(getDist2FromLineSegmentVerticalBeforeTest);
|
||
|
CPPUNIT_TEST(getDist2FromLineSegmentVerticalCornerTest);
|
||
|
CPPUNIT_TEST(getDist2FromLineSegmentVerticalPerpendicularTest);
|
||
|
CPPUNIT_TEST(getDist2FromLineSegmentDiagonalNearTest);
|
||
|
CPPUNIT_TEST(getDist2FromLineSegmentDiagonalOnTest);
|
||
|
CPPUNIT_TEST(getDist2FromLineSegmentDiagonalBeyondTest);
|
||
|
CPPUNIT_TEST(getDist2FromLineSegmentDiagonalBeforeTest);
|
||
|
CPPUNIT_TEST(getDist2FromLineSegmentDiagonalCornerTest);
|
||
|
CPPUNIT_TEST(getDist2FromLineSegmentDiagonalPerpendicularTest);
|
||
|
CPPUNIT_TEST(getDist2FromLineSegmentDiagonal2NearTest);
|
||
|
CPPUNIT_TEST(getDist2FromLineSegmentDiagonal2OnTest);
|
||
|
CPPUNIT_TEST(getDist2FromLineSegmentDiagonal2PointTest);
|
||
|
CPPUNIT_TEST(getDist2FromLineSegmentDiagonal2BeyondTest);
|
||
|
CPPUNIT_TEST(getDist2FromLineSegmentDiagonal2BeforeTest);
|
||
|
CPPUNIT_TEST(getDist2FromLineSegmentDiagonal2CornerTest);
|
||
|
CPPUNIT_TEST(getDist2FromLineSegmentDiagonal2PerpendicularTest);
|
||
|
CPPUNIT_TEST(getDist2FromLineSegmentDiagonal2LargeTest);
|
||
|
CPPUNIT_TEST(getDist2FromLineSegmentZeroNearTest);
|
||
|
CPPUNIT_TEST(getDist2FromLineSegmentZeroOnTest);
|
||
|
|
||
|
CPPUNIT_TEST(getAngleStraightTest);
|
||
|
CPPUNIT_TEST(getAngle90CcwTest);
|
||
|
CPPUNIT_TEST(getAngle90CwTest);
|
||
|
CPPUNIT_TEST(getAngle45CcwTest);
|
||
|
CPPUNIT_TEST(getAngleStraightBackTest);
|
||
|
CPPUNIT_TEST(getAngleLeftAABTest);
|
||
|
CPPUNIT_TEST(getAngleLeftABBTest);
|
||
|
CPPUNIT_TEST(getAngleLeftAAATest);
|
||
|
|
||
|
CPPUNIT_TEST(pointIsLeftOfLineTest);
|
||
|
CPPUNIT_TEST(pointIsLeftOfLineSharpTest);
|
||
|
|
||
|
CPPUNIT_TEST(getPointOnLineWithDistTest1);
|
||
|
CPPUNIT_TEST(getPointOnLineWithDistTest2);
|
||
|
CPPUNIT_TEST(getPointOnLineWithDistTest3);
|
||
|
CPPUNIT_TEST(getPointOnLineWithDistTest4);
|
||
|
CPPUNIT_TEST(getPointOnLineWithDistTest5);
|
||
|
CPPUNIT_TEST(getPointOnLineWithDistTest6);
|
||
|
CPPUNIT_TEST(getPointOnLineWithDistTest7);
|
||
|
CPPUNIT_TEST_SUITE_END();
|
||
|
|
||
|
public:
|
||
|
/*!
|
||
|
* \brief Sets up the test suite to prepare for testing.
|
||
|
*
|
||
|
* Since <em>LinearAlg2DTest</em> only has static functions, no instance
|
||
|
* needs to be created here.
|
||
|
*/
|
||
|
void setUp();
|
||
|
|
||
|
/*!
|
||
|
* \brief Tears down the test suite when testing is done.
|
||
|
*
|
||
|
* Since <em>LinearAlg2DTest</em> only has static functions, no instance
|
||
|
* exists that needs to be destroyed.
|
||
|
*/
|
||
|
void tearDown();
|
||
|
|
||
|
//These are the actual test cases. The name of the function sort of describes what it tests but I refuse to document all of these, sorry.
|
||
|
void getDist2FromLineSegmentHorizontalNearTest();
|
||
|
void getDist2FromLineSegmentHorizontalOnTest();
|
||
|
void getDist2FromLineSegmentHorizontalBeyondTest();
|
||
|
void getDist2FromLineSegmentHorizontalBeforeTest();
|
||
|
void getDist2FromLineSegmentHorizontalCornerTest();
|
||
|
void getDist2FromLineSegmentHorizontalPerpendicularTest();
|
||
|
void getDist2FromLineSegmentVerticalNearTest();
|
||
|
void getDist2FromLineSegmentVerticalOnTest();
|
||
|
void getDist2FromLineSegmentVerticalBeyondTest();
|
||
|
void getDist2FromLineSegmentVerticalBeforeTest();
|
||
|
void getDist2FromLineSegmentVerticalCornerTest();
|
||
|
void getDist2FromLineSegmentVerticalPerpendicularTest();
|
||
|
void getDist2FromLineSegmentDiagonalNearTest();
|
||
|
void getDist2FromLineSegmentDiagonalOnTest();
|
||
|
void getDist2FromLineSegmentDiagonalBeyondTest();
|
||
|
void getDist2FromLineSegmentDiagonalBeforeTest();
|
||
|
void getDist2FromLineSegmentDiagonalCornerTest();
|
||
|
void getDist2FromLineSegmentDiagonalPerpendicularTest();
|
||
|
void getDist2FromLineSegmentDiagonal2NearTest();
|
||
|
void getDist2FromLineSegmentDiagonal2OnTest();
|
||
|
void getDist2FromLineSegmentDiagonal2PointTest();
|
||
|
void getDist2FromLineSegmentDiagonal2BeyondTest();
|
||
|
void getDist2FromLineSegmentDiagonal2BeforeTest();
|
||
|
void getDist2FromLineSegmentDiagonal2CornerTest();
|
||
|
void getDist2FromLineSegmentDiagonal2PerpendicularTest();
|
||
|
void getDist2FromLineSegmentDiagonal2LargeTest();
|
||
|
void getDist2FromLineSegmentZeroNearTest();
|
||
|
void getDist2FromLineSegmentZeroOnTest();
|
||
|
|
||
|
void getAngleStraightTest();
|
||
|
void getAngle90CcwTest();
|
||
|
void getAngle90CwTest();
|
||
|
void getAngle45CcwTest();
|
||
|
void getAngleStraightBackTest();
|
||
|
void getAngleLeftAABTest();
|
||
|
void getAngleLeftABBTest();
|
||
|
void getAngleLeftAAATest();
|
||
|
|
||
|
void pointIsLeftOfLineTest();
|
||
|
void pointIsLeftOfLineSharpTest();
|
||
|
|
||
|
void getPointOnLineWithDistTest1();
|
||
|
void getPointOnLineWithDistTest2();
|
||
|
void getPointOnLineWithDistTest3();
|
||
|
void getPointOnLineWithDistTest4();
|
||
|
void getPointOnLineWithDistTest5();
|
||
|
void getPointOnLineWithDistTest6();
|
||
|
void getPointOnLineWithDistTest7();
|
||
|
|
||
|
private:
|
||
|
/*!
|
||
|
* \brief The maximum allowed error in distance measurements.
|
||
|
*/
|
||
|
static const int64_t maximum_error = 10;
|
||
|
|
||
|
/*!
|
||
|
* \brief Performs the actual assertion for the getDist2FromLineSegmentTest.
|
||
|
*
|
||
|
* This is essentially a parameterised version of all unit tests pertaining
|
||
|
* to the getDist2FromLineSegment tests.
|
||
|
*
|
||
|
* \param line_start The start of the line to check the distance to.
|
||
|
* \param line_end The end of the line to check the distance to.
|
||
|
* \param point The point to check the distance to the line with.
|
||
|
* \param actual_distance2 The correct distance from the point to the line,
|
||
|
* squared.
|
||
|
* \param actual_is_beyond Whether the point is actually beyond the line.
|
||
|
*/
|
||
|
void getDist2FromLineSegmentAssert(Point line_start,Point line_end,Point point,int64_t actual_distance2,char actual_is_beyond);
|
||
|
|
||
|
/*!
|
||
|
* \brief The maximum allowed error in angle measurements.
|
||
|
*/
|
||
|
static constexpr float maximum_error_angle = 1.0;
|
||
|
|
||
|
/*!
|
||
|
* Performs the assertion of the getAngle tests
|
||
|
*
|
||
|
* \param a the a parameter of getAngle
|
||
|
* \param b the b parameter of getAngle
|
||
|
* \param c the c parameter of getAngle
|
||
|
* \param actual_angle_in_half_rounds the actual angle where 0.5 equals ???
|
||
|
*/
|
||
|
void getAngleAssert(Point a, Point b, Point c, float actual_angle_in_half_rounds);
|
||
|
|
||
|
void getPointOnLineWithDistAssert(const Point p, const Point a, const Point b, int64_t dist, Point actual_result, bool actual_returned);
|
||
|
};
|
||
|
|
||
|
}
|
||
|
|
||
|
#endif //LINEARALG2DTEST_H
|
||
|
|