60 for(
RULE_AREA& ra : aTool->GetData()->m_areas )
62 if( ra.m_ruleName.Contains( ( aName ) ) )
74 std::vector<wxString> tests = {
"vme-wren" };
76 for(
const wxString& relPath : tests )
83 toolMgr.
SetEnvironment( m_board.get(),
nullptr,
nullptr,
nullptr, toolsHolder );
92 auto ruleData = mtTool->
GetData();
95 static_cast<int>( ruleData->m_areas.size() ) ) );
101 ruleData->m_replaceExisting =
true;
106 || ra.
m_sheetName == wxT(
"pp_driver_2x.kicad_sch" ) )
120 int n_areas_io = 0, n_areas_pp = 0, n_areas_other = 0;
123 static_cast<int>(ruleData->m_areas.size() ) ) );
125 for(
const RULE_AREA& ra : ruleData->m_areas )
129 if( ra.
m_ruleName.Contains( wxT(
"io_drivers_fp" ) ) )
134 else if( ra.
m_ruleName.Contains( wxT(
"io_drivers_pp" ) ) )
146 n_areas_io, n_areas_pp, n_areas_other ) );
152 const std::vector<wxString> rulesToTest = { wxT(
"io_drivers_fp" ),
153 wxT(
"io_drivers_pp" ) };
155 for(
const wxString& ruleName : rulesToTest )
157 for(
const RULE_AREA& refArea : ruleData->m_areas )
159 if( !refArea.
m_ruleName.Contains( ruleName ) )
164 for(
const RULE_AREA& targetArea : ruleData->m_areas )
169 if( !targetArea.
m_ruleName.Contains( ruleName ) )
172 auto cgRef = CONNECTION_GRAPH::BuildFromFootprintSet( refArea.
m_components );
174 CONNECTION_GRAPH::BuildFromFootprintSet( targetArea.
m_components );
178 std::vector<TMATCH::TOPOLOGY_MISMATCH_REASON> details;
179 bool status = cgRef->FindIsomorphism( cgTarget.get(),
result, details );
182 "topo match: '%s' [%d] -> '%s' [%d] result %d", refArea.
m_ruleName.c_str().AsChar(),
184 static_cast<int>( targetArea.
m_components.size() ), status ? 1 : 0 ) );
186 for(
const auto& iter :
result )
189 iter.second->GetReference(),
190 iter.first->GetReference() ) );
193 BOOST_CHECK( status );
194 BOOST_CHECK( details.empty() );
201 BOOST_ASSERT( refArea );
203 const std::vector<wxString> targetAreaNames( { wxT(
"io_drivers_fp/bank2/io78/" ),
204 wxT(
"io_drivers_fp/bank1/io78/" ),
205 wxT(
"io_drivers_fp/bank0/io01/" ) } );
207 for(
const wxString& targetRaName : targetAreaNames )
211 BOOST_ASSERT( targetRA !=
nullptr );
215 ruleData->m_compatMap[targetRA].m_doCopy =
true;
220 BOOST_ASSERT(
result >= 0 );
236 toolMgr.
SetEnvironment( m_board.get(),
nullptr,
nullptr,
nullptr, toolsHolder );
243 auto ruleData = mtTool->
GetData();
246 static_cast<int>( ruleData->m_areas.size() ) ) );
248 BOOST_CHECK( ruleData->m_areas.size() >= 2 );
250 if( ruleData->m_areas.size() < 2 )
258 if( ra.
m_ruleName.Contains( wxT(
"Untitled Sheet/" ) ) )
260 else if( ra.
m_ruleName.Contains( wxT(
"Untitled Sheet1/" ) ) )
264 if( !refArea || !targetArea )
266 BOOST_TEST_MESSAGE(
"Could not find Untitled Sheet and Untitled Sheet1 rule areas, skipping test" );
294 if( !refFP || !targetFP )
296 BOOST_TEST_MESSAGE(
"Could not find matching footprints in the rule areas, skipping test" );
301 bool refValueVisible = refValueField ? refValueField->
IsVisible() :
true;
303 std::vector<FP_3DMODEL> refModels = refFP->
Models();
307 ruleData->m_compatMap[targetArea].m_doCopy =
true;
308 ruleData->m_options.m_copyPlacement =
true;
312 BOOST_CHECK(
result >= 0 );
316 if( targetValueField && refValueField )
320 refValueVisible, targetValueField->
IsVisible() ) );
325 if( !refModels.empty() )
328 static_cast<int>( refModels.size() ),
329 static_cast<int>( targetFP->
Models().size() ) ) );
348 toolMgr.
SetEnvironment( m_board.get(),
nullptr,
nullptr,
nullptr, toolsHolder );
355 auto ruleData = mtTool->
GetData();
358 static_cast<int>( ruleData->m_areas.size() ) ) );
362 if( ruleData->m_areas.size() < 2 )
379 int refViaCountBefore = 0;
381 for(
PCB_TRACK* track : m_board->Tracks() )
393 BOOST_TEST_MESSAGE( wxString::Format(
"Reference area vias before repeat: %d", refViaCountBefore ) );
394 BOOST_CHECK( refViaCountBefore > 0 );
398 ruleData->m_compatMap[targetArea].m_doCopy =
true;
399 ruleData->m_options.m_copyPlacement =
true;
400 ruleData->m_options.m_copyRouting =
true;
404 BOOST_CHECK(
result >= 0 );
406 int refViaCountAfter = 0;
408 for(
PCB_TRACK* track : m_board->Tracks() )
420 BOOST_TEST_MESSAGE( wxString::Format(
"Reference area vias after repeat: %d", refViaCountAfter ) );
virtual bool IsVisible() const
bool Contains(const VECTOR2I &aP, int aSubpolyIndex=-1, int aAccuracy=0, bool aUseBBoxCaches=false) const
Return true if a given subpolygon contains the point aP.
SHAPE_POLY_SET * Outline()
void LoadBoard(SETTINGS_MANAGER &aSettingsManager, const wxString &aRelPath, std::unique_ptr< BOARD > &aBoard)
std::map< FOOTPRINT *, FOOTPRINT * > COMPONENT_MATCHES
MULTICHANNEL_TEST_FIXTURE()
SETTINGS_MANAGER m_settingsManager
std::unique_ptr< BOARD > m_board
std::set< FOOTPRINT * > m_components
@ VALUE
Field Value of part, i.e. "3.3K".
BOOST_REQUIRE(intersection.has_value()==c.ExpectedIntersection.has_value())
BOOST_AUTO_TEST_SUITE_END()
RULE_AREA * findRuleAreaByPartialName(MULTICHANNEL_TOOL *aTool, const wxString &aName)
BOOST_FIXTURE_TEST_CASE(MultichannelToolRegressions, MULTICHANNEL_TEST_FIXTURE)
BOOST_TEST_MESSAGE("Polyline has "<< chain.PointCount()<< " points")
wxString result
Test unit parsing edge cases and error handling.
BOOST_CHECK_EQUAL(result, "25.4")
@ PCB_VIA_T
class PCB_VIA, a via (like a track segment on a copper layer)
VECTOR2< int32_t > VECTOR2I