From 2f069c0b19ed365125919763cddec2554b7b2949 Mon Sep 17 00:00:00 2001 From: Roberto Fernandez Bautista Date: Fri, 14 May 2021 18:36:29 +0100 Subject: [PATCH] Add test for detecting arcs post clipper --- .../geometry/test_shape_poly_set_arcs.cpp | 51 +++++++++++++++---- 1 file changed, 40 insertions(+), 11 deletions(-) diff --git a/qa/libs/kimath/geometry/test_shape_poly_set_arcs.cpp b/qa/libs/kimath/geometry/test_shape_poly_set_arcs.cpp index 1c9ce909ed..8f9e8d798b 100644 --- a/qa/libs/kimath/geometry/test_shape_poly_set_arcs.cpp +++ b/qa/libs/kimath/geometry/test_shape_poly_set_arcs.cpp @@ -18,6 +18,7 @@ * with this program. If not, see . */ +#include #include #include @@ -29,25 +30,53 @@ BOOST_AUTO_TEST_SUITE( CurvedPolys ) + /** * Simplify the polygon a large number of times and check that the area - * does not change. + * does not change and also that the arcs are the same before and after */ BOOST_AUTO_TEST_CASE( TestSimplify ) { - KI_TEST::CommonTestData testData; - SHAPE_POLY_SET testPoly = testData.holeyCurvedPolySingle; + KI_TEST::CommonTestData testData; - double originalArea = testData.holeyCurvedPolySingle.Area(); - - for( int i = 1; i < 20; i++ ) + std::map polysToTest = { - BOOST_TEST_CONTEXT( "Simplify Iteration " << i ) - { - testPoly.Simplify( SHAPE_POLY_SET::POLYGON_MODE::PM_FAST ); + { "Case 1: Single polygon", testData.holeyCurvedPolySingle }, + { "Case 2: Multi polygon", testData.holeyCurvedPolyMulti } + }; - BOOST_CHECK_EQUAL( testPoly.Area(), originalArea ); - } + for( std::pair testCase : polysToTest ) + { + BOOST_TEST_CONTEXT( testCase.first ) + { + SHAPE_POLY_SET testPoly = testCase.second; + + double originalArea = testPoly.Area(); + + std::vector originalArcs; + testPoly.GetArcs( originalArcs ); + + for( int i = 1; i <= 3; i++ ) + { + BOOST_TEST_CONTEXT( "Simplify Iteration " << i ) + { + testPoly.Simplify( SHAPE_POLY_SET::POLYGON_MODE::PM_FAST ); + + std::vector foundArcs; + testPoly.GetArcs( foundArcs ); + + BOOST_CHECK_EQUAL( testPoly.Area(), originalArea ); + BOOST_CHECK_EQUAL( originalArcs.size(), foundArcs.size() ); + KI_TEST::CheckUnorderedMatches( originalArcs, foundArcs, + []( const SHAPE_ARC& aA, const SHAPE_ARC& aB ) -> bool + { + // We accept that the arcs could be reversed after Simplify + return aA == aB || aA.Reversed() == aB; + } ); + + } + } + } } }