29make_candidate(
const char* aRef,
int aUnit,
const std::vector<const char*>& aPins,
30 const std::initializer_list<std::pair<const char*, const char*>>& aNets )
33 candidate.
m_ref = wxString::FromUTF8( aRef );
36 for(
const char*
pin : aPins )
39 for(
const auto& [
pin, net] : aNets )
46static std::map<wxString, wxString>
47make_pin_map(
const std::initializer_list<std::pair<const char*, const char*>>& aNets )
49 std::map<wxString, wxString> pinMap;
51 for(
const auto& [
pin, net] : aNets )
52 pinMap[wxString::FromUTF8(
pin )] = wxString::FromUTF8( net );
63 std::initializer_list<size_t> aExpectedSwappedCandidateIndices )
69 for(
size_t candidateIdx : aExpectedSwappedCandidateIndices )
77static void check_final_units(
const std::vector<BACKANNOTATE_UNIT_SWAP_CANDIDATE>& aCandidates,
79 std::initializer_list<int> aExpectedUnits )
81 std::vector<int> finalUnits;
84 finalUnits.push_back( candidate.m_currentUnit );
89 BOOST_REQUIRE_EQUAL( finalUnits.size(), aExpectedUnits.size() );
93 for(
int expectedUnit : aExpectedUnits )
103 std::vector<BACKANNOTATE_UNIT_SWAP_CANDIDATE> candidates =
106 { {
"1",
"Aout" }, {
"2",
"Net-(U1A--)" }, {
"3",
"A+" } } ),
108 { {
"5",
"B+" }, {
"6",
"B-" }, {
"7",
"Bout" } } )
113 make_pin_map( { {
"1",
"Aout" }, {
"2",
"Net-(U1A--)" }, {
"3",
"A+" },
114 {
"5",
"B+" }, {
"6",
"B-" }, {
"7",
"Bout" } } ) );
123 std::vector<BACKANNOTATE_UNIT_SWAP_CANDIDATE> candidates =
126 { {
"1",
"A1" }, {
"2",
"A2" }, {
"3",
"A3" } } ),
128 { {
"4",
"B1" }, {
"5",
"B2" }, {
"6",
"B3" } } )
133 make_pin_map( { {
"1",
"B1" }, {
"2",
"B2" }, {
"3",
"B3" },
134 {
"4",
"A1" }, {
"5",
"A2" }, {
"6",
"A3" } } ) );
143 std::vector<BACKANNOTATE_UNIT_SWAP_CANDIDATE> candidates = {
144 make_candidate(
"D1", 1, {
"6",
"1" }, { {
"6",
"K1" }, {
"1",
"A1" } } ),
145 make_candidate(
"D1", 2, {
"5",
"2" }, { {
"5",
"K2" }, {
"2",
"A2" } } ),
146 make_candidate(
"D1", 3, {
"4",
"3" }, { {
"4",
"K3" }, {
"3",
"A3" } } )
152 { {
"6",
"K2" }, {
"1",
"A2" }, {
"5",
"K3" }, {
"2",
"A3" }, {
"4",
"K1" }, {
"3",
"A1" } } ) );
161 std::vector<BACKANNOTATE_UNIT_SWAP_CANDIDATE> candidates = {
162 make_candidate(
"RN1", 1, {
"1",
"2" }, { {
"1",
"R1" }, {
"2",
"R1.2" } } ),
163 make_candidate(
"RN1", 2, {
"1",
"3" }, { {
"1",
"R1" }, {
"3",
"R2.2" } } ),
164 make_candidate(
"RN1", 3, {
"1",
"4" }, { {
"1",
"R1" }, {
"4",
"R3.2" } } )
170 { {
"1",
"R1" }, {
"2",
"R2.2" }, {
"3",
"R3.2" }, {
"4",
"R1.2" } } ) );
179 std::vector<BACKANNOTATE_UNIT_SWAP_CANDIDATE> candidates = {
180 make_candidate(
"D1", 1, {
"6",
"1" }, { {
"6",
"K1" }, {
"1",
"A1" } } ),
181 make_candidate(
"D1", 2, {
"5",
"2" }, { {
"5",
"K2" }, {
"2",
"A2" } } ),
182 make_candidate(
"D1", 3, {
"4",
"3" }, { {
"4",
"K3" }, {
"3",
"A3" } } )
203 { {
"1",
"A1" }, {
"2",
"K3" }, {
"3",
"A2" }, {
"4",
"K2" }, {
"5",
"A3" }, {
"6",
"K1" } } ) );
206 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")