33make_candidate(
const char* aRef,
int aUnit,
const std::vector<const char*>& aPins,
34 const std::initializer_list<std::pair<const char*, const char*>>& aNets )
37 candidate.
m_ref = wxString::FromUTF8( aRef );
40 for(
const char*
pin : aPins )
43 for(
const auto& [
pin, net] : aNets )
50static std::map<wxString, wxString>
51make_pin_map(
const std::initializer_list<std::pair<const char*, const char*>>& aNets )
53 std::map<wxString, wxString> pinMap;
55 for(
const auto& [
pin, net] : aNets )
56 pinMap[wxString::FromUTF8(
pin )] = wxString::FromUTF8( net );
67 std::initializer_list<size_t> aExpectedSwappedCandidateIndices )
73 for(
size_t candidateIdx : aExpectedSwappedCandidateIndices )
81static void check_final_units(
const std::vector<BACKANNOTATE_UNIT_SWAP_CANDIDATE>& aCandidates,
83 std::initializer_list<int> aExpectedUnits )
85 std::vector<int> finalUnits;
88 finalUnits.push_back( candidate.m_currentUnit );
93 BOOST_REQUIRE_EQUAL( finalUnits.size(), aExpectedUnits.size() );
97 for(
int expectedUnit : aExpectedUnits )
107 std::vector<BACKANNOTATE_UNIT_SWAP_CANDIDATE> candidates =
110 { {
"1",
"Aout" }, {
"2",
"Net-(U1A--)" }, {
"3",
"A+" } } ),
112 { {
"5",
"B+" }, {
"6",
"B-" }, {
"7",
"Bout" } } )
117 make_pin_map( { {
"1",
"Aout" }, {
"2",
"Net-(U1A--)" }, {
"3",
"A+" },
118 {
"5",
"B+" }, {
"6",
"B-" }, {
"7",
"Bout" } } ) );
127 std::vector<BACKANNOTATE_UNIT_SWAP_CANDIDATE> candidates =
130 { {
"1",
"A1" }, {
"2",
"A2" }, {
"3",
"A3" } } ),
132 { {
"4",
"B1" }, {
"5",
"B2" }, {
"6",
"B3" } } )
137 make_pin_map( { {
"1",
"B1" }, {
"2",
"B2" }, {
"3",
"B3" },
138 {
"4",
"A1" }, {
"5",
"A2" }, {
"6",
"A3" } } ) );
147 std::vector<BACKANNOTATE_UNIT_SWAP_CANDIDATE> candidates = {
148 make_candidate(
"D1", 1, {
"6",
"1" }, { {
"6",
"K1" }, {
"1",
"A1" } } ),
149 make_candidate(
"D1", 2, {
"5",
"2" }, { {
"5",
"K2" }, {
"2",
"A2" } } ),
150 make_candidate(
"D1", 3, {
"4",
"3" }, { {
"4",
"K3" }, {
"3",
"A3" } } )
156 { {
"6",
"K2" }, {
"1",
"A2" }, {
"5",
"K3" }, {
"2",
"A3" }, {
"4",
"K1" }, {
"3",
"A1" } } ) );
165 std::vector<BACKANNOTATE_UNIT_SWAP_CANDIDATE> candidates = {
166 make_candidate(
"RN1", 1, {
"1",
"2" }, { {
"1",
"R1" }, {
"2",
"R1.2" } } ),
167 make_candidate(
"RN1", 2, {
"1",
"3" }, { {
"1",
"R1" }, {
"3",
"R2.2" } } ),
168 make_candidate(
"RN1", 3, {
"1",
"4" }, { {
"1",
"R1" }, {
"4",
"R3.2" } } )
174 { {
"1",
"R1" }, {
"2",
"R2.2" }, {
"3",
"R3.2" }, {
"4",
"R1.2" } } ) );
183 std::vector<BACKANNOTATE_UNIT_SWAP_CANDIDATE> candidates = {
184 make_candidate(
"D1", 1, {
"6",
"1" }, { {
"6",
"K1" }, {
"1",
"A1" } } ),
185 make_candidate(
"D1", 2, {
"5",
"2" }, { {
"5",
"K2" }, {
"2",
"A2" } } ),
186 make_candidate(
"D1", 3, {
"4",
"3" }, { {
"4",
"K3" }, {
"3",
"A3" } } )
207 { {
"1",
"A1" }, {
"2",
"K3" }, {
"3",
"A2" }, {
"4",
"K2" }, {
"5",
"A3" }, {
"6",
"K1" } } ) );
210 BOOST_CHECK( plan.
m_steps.empty() );
BACKANNOTATE_UNIT_SWAP_PLAN PlanBackannotateUnitSwaps(const std::vector< BACKANNOTATE_UNIT_SWAP_CANDIDATE > &aCandidates, const std::map< wxString, wxString > &aPcbPinMap)
Compute a pure unit-swap plan from schematic-side unit definitions and the final PCB pin map.
std::vector< wxString > m_unitPinNumbers
std::map< wxString, wxString > m_schNetsByPin
std::vector< BACKANNOTATE_UNIT_SWAP_STEP > m_steps
std::set< size_t > m_swappedCandidateIndices
BOOST_AUTO_TEST_CASE(HorizontalAlignment)
BOOST_AUTO_TEST_CASE(BackannotateUnitSwapPlanner_DetectsIdentityMapping)
static void check_final_units(const std::vector< BACKANNOTATE_UNIT_SWAP_CANDIDATE > &aCandidates, const BACKANNOTATE_UNIT_SWAP_PLAN &aPlan, std::initializer_list< int > aExpectedUnits)
static BACKANNOTATE_UNIT_SWAP_CANDIDATE make_candidate(const char *aRef, int aUnit, const std::vector< const char * > &aPins, const std::initializer_list< std::pair< const char *, const char * > > &aNets)
static std::map< wxString, wxString > make_pin_map(const std::initializer_list< std::pair< const char *, const char * > > &aNets)
static void check_plan(const BACKANNOTATE_UNIT_SWAP_PLAN &aPlan, bool aMappingOk, bool aIdentity, std::initializer_list< size_t > aExpectedSwappedCandidateIndices)
BOOST_AUTO_TEST_SUITE(CadstarPartParser)
BOOST_AUTO_TEST_SUITE_END()
BOOST_CHECK_EQUAL(result, "25.4")