43 const std::vector<wxString> fixtures = {
44 "NoConnectOnPin",
"NoConnectOnLine",
"NoConnectOnLineWithLabel",
45 "NoConnectPinsConnectedByLine",
"NoConnectPinsConnectedByLabel",
"ground_pin_test_ok",
46 "issue6588",
"netlists/multinetclasses/multinetclasses",
"issue23840/BusAndVectors"
49 for(
const wxString& fixture : fixtures )
55 std::unique_ptr<SCHEMATIC> schematic;
58 for(
auto& [code, severity] : schematic->ErcSettings().m_ERCSeverities )
62 schematic->ConnectionGraph()->RunERC();
64 if( fixture ==
"issue6588" )
69 static_cast<SCH_MARKER*
>( item )->SetExcluded(
true,
"Retained stacked-pin exclusion" );
72 schematic->RecordERCExclusions();
74 using DIAGNOSTICS = std::map<std::pair<KIID_PATH, KIID>,
VECTOR2I>;
75 const auto collect = [&]()
77 DIAGNOSTICS diagnostics;
78 std::set<SCH_SCREEN*> screens;
81 screens.insert(
path.LastScreen() );
85 std::vector<SCH_MARKER*> markers;
89 auto* marker =
static_cast<SCH_MARKER*
>( item );
90 markers.push_back( marker );
91 const auto error = std::static_pointer_cast<ERC_ITEM>( marker->GetRCItem() );
92 auto*
pin =
dynamic_cast<SCH_PIN*
>( schematic->ResolveItem( error->GetMainItemID(),
nullptr,
101 if( fixture ==
"issue6588" )
103 BOOST_CHECK( marker->IsExcluded() );
104 BOOST_CHECK_EQUAL( marker->GetComment(), wxString(
"Retained stacked-pin exclusion" ) );
108 BOOST_CHECK( error->MainItemHasSheetPath() );
109 BOOST_CHECK( !error->AuxItemHasSheetPath() );
111 const auto key = std::make_pair( error->GetSpecificSheetPath().PathRef(),
pin->m_Uuid );
112 BOOST_CHECK( diagnostics.emplace( key, marker->GetPosition() ).second );
116 screen->DeleteItem( marker );
122 const size_t expectedCount = fixture ==
"issue6588" ? 1
123 : fixture ==
"netlists/multinetclasses/multinetclasses" ? 12 : 0;
124 BOOST_REQUIRE_EQUAL(
expected.size(), expectedCount );
126 if( fixture ==
"issue6588" )
130 key.second =
KIID(
"c1301314-4db8-4c8f-a374-c89403debfd3" );
131 const auto* witness =
dynamic_cast<SCH_PIN*
>( schematic->ResolveItem( key.second,
nullptr,
true ) );
133 BOOST_CHECK( witness->IsVisible() );
134 BOOST_CHECK( witness->GetPosition() ==
expected.begin()->second );
136 expected.emplace( key, witness->GetPosition() );
140 schematic->RebuildConnectivity();
141 schematic->ConnectionGraph()->Reset();
143 schematic->ResolveERCExclusionsPostUpdate();
144 const auto actual = collect();
148 for(
const auto& [key, position] :
expected )
150 if( !
actual.contains( key ) )
152 <<
" on " << key.first.AsString().ToStdString() );
155 for(
const auto& [key, position] :
actual )
159 <<
" on " << key.first.AsString().ToStdString() );
166 BOOST_CHECK( collect().
empty() );
BOOST_CHECK_EQUAL(result, "25.4")