18#define BOOST_TEST_NO_MAIN
19#include <boost/test/unit_test.hpp>
40 size_t AnchorCount()
const {
return m_anchors.size(); }
43 std::vector<VECTOR2I> AnchorPositions()
const
45 std::vector<VECTOR2I> positions;
47 for(
const ANCHOR&
anchor : m_anchors )
48 positions.push_back(
anchor.pos );
63 BOOST_CHECK( helper.
GetSnap() );
83 TEST_GRID_HELPER helper;
88 helper.applySnapResultGuides( equalGap );
89 BOOST_REQUIRE_EQUAL( helper.DimensionBrackets().size(), 2 );
93 helper.applySnapResultGuides( alignment );
94 BOOST_CHECK( helper.DimensionBrackets().empty() );
108 input.presentation.emplace( rejectedId, 1 );
109 input.presentation.emplace( acceptedId, 2 );
111 [rejectedId](
const SNAP_SOURCE_CONTEXT& aContext,
const std::vector<SNAP_CANDIDATE>& aCandidates )
116 if( aCandidates.empty() )
119 if( aCandidates.back().id == rejectedId )
125 result.position = { 10, 10 };
275 BOOST_CHECK( helper.
GetSnap() );
278 BOOST_CHECK( !helper.
GetSnap() );
281 BOOST_CHECK( helper.
GetSnap() );
295 TEST_GRID_HELPER helper;
312 BOOST_REQUIRE_EQUAL( helper.AnchorCount(), 2 );
318 const std::vector<VECTOR2I> admitted = helper.AnchorPositions();
319 BOOST_CHECK( admitted == std::vector<VECTOR2I>( {
VECTOR2I( 10, 10 ),
VECTOR2I( 40, 40 ) } ) );
369 std::optional<VECTOR2I> snap =
451 BOOST_CHECK( !snappedPoint.has_value() );
456 BOOST_CHECK( !snappedPoint.has_value() );
486 std::vector<TestCase> cases = {
488 {
"1mm grid, origin at 47.3mm",
489 1.0, 47300000, 25300000,
494 {
"0.5mm grid, origin at 47.3mm",
495 0.5, 47300000, 25300000,
500 {
"0.1mm grid, origin at 47.3mm",
501 0.1, 47300000, 25300000,
506 {
"25mil grid, origin at 47.625mm",
507 0.635, 47625000, 25400000,
512 {
"10mil grid, origin at 47.752mm",
513 0.254, 47752000, 25400000,
518 {
"50mil grid, origin at 47.625mm",
519 1.27, 47625000, 25400000,
525 for(
auto& tc : cases )
529 tc.expectedX =
KiROUND(
double( tc.pointX - tc.gridOriginX ) / gridSizeIU )
530 * gridSizeIU + tc.gridOriginX;
531 tc.expectedY =
KiROUND(
double( tc.pointY - tc.gridOriginY ) / gridSizeIU )
532 * gridSizeIU + tc.gridOriginY;
535 for(
const auto& tc : cases )
543 VECTOR2D offsetD( tc.gridOriginX, tc.gridOriginY );
548 VECTOR2I point( tc.pointX, tc.pointY );
591 std::vector<TestCase> cases = {
593 {
"0.1mm grid, anchor at half-grid",
594 0.1, 50000, 50000, 300000, 300000 },
597 {
"10mil grid, anchor at half-grid",
598 0.254, 127000, 127000, 762000, 508000 },
601 {
"25mil grid, anchor at half-grid",
602 0.635, 317500, 317500, 1905000, 1270000 },
605 for(
const auto& tc : cases )
constexpr BOX2I KiROUND(const BOX2D &aBoxD)
KIGFX::CONSTRUCTION_GEOM & GetViewItem()
std::optional< VECTOR2I > SnapToConstructionLines(const VECTOR2I &aPoint, const VECTOR2I &aNearestGrid, const VECTOR2D &aGrid, double aSnapRange) const
void SetSnapLineDirections(const std::vector< VECTOR2I > &aDirections)
void addAnchor(const VECTOR2I &aPos, int aFlags, EDA_ITEM *aItem, int aPointTypes=POINT_TYPE::PT_NONE)
void SetSkipPoint(const VECTOR2I &aPoint)
void SetOrigin(const VECTOR2I &aOrigin)
void SetSnapLineOrigin(const VECTOR2I &aOrigin)
void SetVisibleGridSize(const VECTOR2D &aGrid)
void ClearSkipPoint()
Clear the skip point by setting it to an unreachable position, thereby preventing matching.
void SetGridSnapping(bool aEnable)
void SetUseGrid(bool aSnapToGrid)
std::optional< VECTOR2I > GetSnappedPoint() const
void SetAuxAxes(bool aEnable, const VECTOR2I &aOrigin=VECTOR2I(0, 0))
VECTOR2D GetVisibleGrid() const
virtual VECTOR2D GetGridSize(GRID_HELPER_GRIDS aGrid) const
Return the size of the specified grid.
VECTOR2I GetOrigin() const
void SetGridSize(const VECTOR2D &aGrid)
virtual VECTOR2I Align(const VECTOR2I &aPoint, GRID_HELPER_GRIDS aGrid) const
void applySnapResultGuides(const SNAP_RESULT &aResult)
std::vector< ANCHOR > m_anchors
virtual VECTOR2I AlignGrid(const VECTOR2I &aPoint, GRID_HELPER_GRIDS aGrid) const
const std::vector< SEG > & DimensionBrackets() const
SNAP_FRAME_OUTPUT< Payload > ResolveSnapFrame(SNAP_FRAME_INPUT< Payload > aInput)
SNAP_STABLE_ID MakePointSnapId(SNAP_ID_KIND aKind, const VECTOR2I &aPoint, int aFeatureIndex=0)
static SNAP_CANDIDATE Point(SNAP_STABLE_ID aId, SNAP_PRIORITY_TIER aPriority, SNAP_CANDIDATE_SUBTYPE aSubtype, const VECTOR2I &aPoint, double aResidual)
std::optional< SNAP_FRAME_PRESENTATION< Payload > > presentation
std::vector< SNAP_GUIDE > guides
std::vector< SNAP_STABLE_ID > accepted
BOOST_AUTO_TEST_CASE(HorizontalAlignment)
BOOST_AUTO_TEST_SUITE(CadstarPartParser)
void TEST_CLEAR_ANCHORS(GRID_HELPER &helper)
BOOST_AUTO_TEST_CASE(DefaultConstructor)
BOOST_REQUIRE(intersection.has_value()==c.ExpectedIntersection.has_value())
BOOST_AUTO_TEST_SUITE_END()
BOOST_TEST_CONTEXT("Test Clearance")
static constexpr double IU_PER_MM
Mock up a conversion function.
wxString result
Test unit parsing edge cases and error handling.
BOOST_CHECK_EQUAL(result, "25.4")
VECTOR2< int32_t > VECTOR2I
VECTOR2< double > VECTOR2D