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.
147 lines
4.3 KiB
C++
147 lines
4.3 KiB
C++
//Copyright (c) 2015 Ultimaker B.V.
|
|
//CuraEngine is released under the terms of the AGPLv3 or higher.
|
|
|
|
#ifndef POLYGON_UTILS_TEST_H
|
|
#define POLYGON_UTILS_TEST_H
|
|
|
|
#include <functional> // function
|
|
|
|
#include <cppunit/TestFixture.h>
|
|
#include <cppunit/extensions/HelperMacros.h>
|
|
|
|
#include "../src/utils/intpoint.h"
|
|
#include "../src/utils/polygon.h"
|
|
#include "../src/utils/polygonUtils.h"
|
|
|
|
namespace cura
|
|
{
|
|
|
|
class PolygonUtilsTest : public CppUnit::TestFixture
|
|
{
|
|
CPPUNIT_TEST_SUITE(PolygonUtilsTest);
|
|
CPPUNIT_TEST(cornerInsideTest);
|
|
CPPUNIT_TEST(edgeInsideTest);
|
|
CPPUNIT_TEST(cornerOutsideTest);
|
|
CPPUNIT_TEST(edgeOutsideTest);
|
|
CPPUNIT_TEST(cornerCrookedTest);
|
|
CPPUNIT_TEST(cornerEdgeTest);
|
|
CPPUNIT_TEST(onBorderTest);
|
|
CPPUNIT_TEST(insideTest);
|
|
CPPUNIT_TEST(middleTest);
|
|
CPPUNIT_TEST(middleTestPenalty);
|
|
CPPUNIT_TEST(noMoveTest);
|
|
CPPUNIT_TEST(farMoveTest);
|
|
CPPUNIT_TEST(cornerInsideTest2);
|
|
CPPUNIT_TEST(edgeInsideTest2);
|
|
CPPUNIT_TEST(cornerOutsideTest2);
|
|
CPPUNIT_TEST(edgeOutsideTest2);
|
|
CPPUNIT_TEST(cornerFindCloseTest);
|
|
CPPUNIT_TEST(edgeFindCloseTest);
|
|
CPPUNIT_TEST(middleEdgeFindCloseTest);
|
|
CPPUNIT_TEST(moveInsidePointyCornerTest);
|
|
CPPUNIT_TEST(moveOutsidePointyCornerTest);
|
|
CPPUNIT_TEST(moveInsidePointyCornerTestFail);
|
|
CPPUNIT_TEST(moveOutsidePointyCornerTestFail);
|
|
CPPUNIT_TEST(cornerCrookedTest2);
|
|
CPPUNIT_TEST(cornerEdgeTest2);
|
|
CPPUNIT_TEST(onBorderTest2);
|
|
CPPUNIT_TEST(insideTest2);
|
|
CPPUNIT_TEST(middleTest2);
|
|
CPPUNIT_TEST(noMoveTest2);
|
|
CPPUNIT_TEST(farMoveTest2);
|
|
CPPUNIT_TEST(spreadDotsTestSegment);
|
|
CPPUNIT_TEST(spreadDotsTestFull);
|
|
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 cornerInsideTest();
|
|
void edgeInsideTest();
|
|
void cornerOutsideTest();
|
|
void edgeOutsideTest();
|
|
void cornerCrookedTest();
|
|
void cornerEdgeTest();
|
|
void onBorderTest();
|
|
void insideTest();
|
|
void middleTest();
|
|
void middleTestPenalty();
|
|
void noMoveTest();
|
|
void farMoveTest();
|
|
void cornerInsideTest2();
|
|
void edgeInsideTest2();
|
|
void cornerOutsideTest2();
|
|
void edgeOutsideTest2();
|
|
void cornerCrookedTest2();
|
|
void cornerEdgeTest2();
|
|
void onBorderTest2();
|
|
void insideTest2();
|
|
void middleTest2();
|
|
void noMoveTest2();
|
|
void farMoveTest2();
|
|
|
|
void polygonOffsetTest();
|
|
|
|
void cornerFindCloseTest();
|
|
void edgeFindCloseTest();
|
|
void middleEdgeFindCloseTest();
|
|
|
|
void moveInsidePointyCornerTest();
|
|
void moveOutsidePointyCornerTest();
|
|
void moveInsidePointyCornerTestFail();
|
|
void moveOutsidePointyCornerTestFail();
|
|
|
|
void spreadDotsTestSegment();
|
|
void spreadDotsTestFull();
|
|
|
|
private:
|
|
/*!
|
|
* \brief The maximum allowed error in distance measurements.
|
|
*/
|
|
static const int64_t maximum_error = 10;
|
|
|
|
Polygon test_square;
|
|
Polygons test_squares; // same in a vector with one element
|
|
Polygon pointy_square;
|
|
|
|
/*!
|
|
* cppunit assert for PolygonUtils::moveInside(ClosestPolygonPoint, int)
|
|
*/
|
|
void moveInsideAssert(const PolygonRef poly, Point close_to, const int distance, Point supposed);
|
|
|
|
/*!
|
|
* cppunit assert for findSmallestConnection(ClosestPolygonPoint&, ClosestPolygonPoint&, int)
|
|
*/
|
|
void moveInside2Assert(const PolygonRef poly, Point close_to, const int distance, Point supposed);
|
|
|
|
/*!
|
|
* cppunit assert for PolygonUtils::findClose
|
|
*/
|
|
void findCloseAssert(const PolygonRef poly, Point close_to, Point supposed, int cell_size, const std::function<int(Point)>* penalty_function = nullptr);
|
|
|
|
/*!
|
|
* cppunit assert for PolygonUtils::spreadDots
|
|
*/
|
|
void spreadDotsAssert(PolygonsPointIndex start, PolygonsPointIndex end, unsigned int n_dots, const std::vector<ClosestPolygonPoint>& supposed);
|
|
};
|
|
|
|
}
|
|
|
|
#endif // POLYGON_UTILS_TEST_H
|
|
|