mirror of
https://gitlab.com/kicad/code/kicad.git
synced 2025-04-19 00:21:36 +00:00
Check secondary driver names when merging
If two nets are joined by a global power pin but both have global labels that override the net name, we still want them to be merged. This checks for all net names in the drivers when looking for subgraph merging candidates Fixes https://gitlab.com/kicad/code/kicad/-/issues/18092
This commit is contained in:
parent
937d8c9541
commit
ad985aff9d
eeschema
qa
data/eeschema/issue18092
tests/eeschema
@ -2026,7 +2026,7 @@ void CONNECTION_GRAPH::processSubGraphs()
|
||||
subgraph->m_bus_neighbors[member].insert( candidate );
|
||||
candidate->m_bus_parents[member].insert( subgraph );
|
||||
}
|
||||
else if( connection->Type() == candidate->m_driver_connection->Type() )
|
||||
else if( !connection->IsBus() || connection->Type() == candidate->m_driver_connection->Type() )
|
||||
{
|
||||
wxLogTrace( ConnTrace, wxS( "%lu (%s) absorbs neighbor %lu (%s)" ),
|
||||
subgraph->m_code, connection->Name(),
|
||||
@ -2184,18 +2184,19 @@ void CONNECTION_GRAPH::buildConnectionGraph( std::function<void( SCH_ITEM* )>* a
|
||||
if( !secondary_is_global && candidate->m_sheet != subgraph->m_sheet )
|
||||
continue;
|
||||
|
||||
SCH_CONNECTION* conn = candidate->m_driver_connection;
|
||||
|
||||
if( conn->Name() == secondary_name )
|
||||
for( SCH_ITEM* candidate_driver : candidate->m_drivers )
|
||||
{
|
||||
wxLogTrace( ConnTrace, wxS( "Global %lu (%s) promoted to %s" ),
|
||||
candidate->m_code, conn->Name(),
|
||||
subgraph->m_driver_connection->Name() );
|
||||
if( candidate->GetNameForDriver( candidate_driver ) == secondary_name )
|
||||
{
|
||||
wxLogTrace( ConnTrace, wxS( "Global %lu (%s) promoted to %s" ),
|
||||
candidate->m_code, candidate->m_driver_connection->Name(),
|
||||
subgraph->m_driver_connection->Name() );
|
||||
|
||||
conn->Clone( *subgraph->m_driver_connection );
|
||||
candidate->m_driver_connection->Clone( *subgraph->m_driver_connection );
|
||||
|
||||
candidate->m_dirty = false;
|
||||
propagateToNeighbors( candidate, false );
|
||||
candidate->m_dirty = false;
|
||||
propagateToNeighbors( candidate, false );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
1293
qa/data/eeschema/issue18092/issue18092.kicad_pro
Normal file
1293
qa/data/eeschema/issue18092/issue18092.kicad_pro
Normal file
File diff suppressed because it is too large
Load Diff
qa/data/eeschema/issue18092/issue18092.kicad_sch
Normal file
LOADING design file
qa/data/eeschema/issue18092/sub_18092.kicad_sch
Normal file
LOADING design file
@ -62,6 +62,7 @@ set( QA_EESCHEMA_SRCS
|
||||
erc/test_erc_label_multiple_wires.cpp
|
||||
erc/test_erc_unconnected_wire_endpoints.cpp
|
||||
|
||||
test_connectivity_algo.cpp
|
||||
test_eagle_plugin.cpp
|
||||
test_junction_helpers.cpp
|
||||
test_lib_part.cpp
|
||||
|
64
qa/tests/eeschema/test_connectivity_algo.cpp
Normal file
64
qa/tests/eeschema/test_connectivity_algo.cpp
Normal file
@ -0,0 +1,64 @@
|
||||
/*
|
||||
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||
*
|
||||
* Copyright (C) 2024 KiCad Developers, see AUTHORS.TXT for contributors.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
* as published by the Free Software Foundation; either version 3
|
||||
* of the License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, you may find one here:
|
||||
* https://www.gnu.org/licenses/gpl-3.0.en.html
|
||||
* or you may search the http://www.gnu.org website for the version 32 license,
|
||||
* or you may write to the Free Software Foundation, Inc.,
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
*/
|
||||
|
||||
|
||||
#include <qa_utils/wx_utils/unit_test_utils.h>
|
||||
#include <schematic_utils/schematic_file_util.h>
|
||||
|
||||
#include <connection_graph.h>
|
||||
#include <schematic.h>
|
||||
#include <sch_sheet.h>
|
||||
#include <sch_screen.h>
|
||||
#include <settings/settings_manager.h>
|
||||
#include <locale_io.h>
|
||||
|
||||
struct CONNECTIVITY_TEST_FIXTURE
|
||||
{
|
||||
CONNECTIVITY_TEST_FIXTURE() :
|
||||
m_settingsManager( true /* headless */ )
|
||||
{ }
|
||||
|
||||
SETTINGS_MANAGER m_settingsManager;
|
||||
std::unique_ptr<SCHEMATIC> m_schematic;
|
||||
};
|
||||
|
||||
BOOST_FIXTURE_TEST_CASE( CheckNetCounts, CONNECTIVITY_TEST_FIXTURE )
|
||||
{
|
||||
LOCALE_IO dummy;
|
||||
|
||||
std::vector<std::pair<wxString, int>> tests =
|
||||
{
|
||||
{ "issue18092/issue18092", 1 }
|
||||
};
|
||||
|
||||
for( auto&[ name, nets] : tests )
|
||||
{
|
||||
KI_TEST::LoadSchematic( m_settingsManager, name, m_schematic );
|
||||
|
||||
SCH_SHEET_LIST sheets = m_schematic->BuildSheetListSortedByPageNumbers();
|
||||
CONNECTION_GRAPH* graph = m_schematic->ConnectionGraph();
|
||||
|
||||
BOOST_CHECK( nets == graph->GetNetMap().size() );
|
||||
|
||||
}
|
||||
}
|
@ -32,9 +32,9 @@
|
||||
#include <settings/settings_manager.h>
|
||||
#include <locale_io.h>
|
||||
|
||||
struct INCREMENTAL_NETLIST_TEST_FIXTURE
|
||||
struct CONNECTIVITY_TEST_FIXTURE
|
||||
{
|
||||
INCREMENTAL_NETLIST_TEST_FIXTURE() :
|
||||
CONNECTIVITY_TEST_FIXTURE() :
|
||||
m_settingsManager( true /* headless */ )
|
||||
{ }
|
||||
|
||||
@ -42,7 +42,7 @@ struct INCREMENTAL_NETLIST_TEST_FIXTURE
|
||||
std::unique_ptr<SCHEMATIC> m_schematic;
|
||||
};
|
||||
|
||||
BOOST_FIXTURE_TEST_CASE( RemoveAddItems, INCREMENTAL_NETLIST_TEST_FIXTURE )
|
||||
BOOST_FIXTURE_TEST_CASE( RemoveAddItems, CONNECTIVITY_TEST_FIXTURE )
|
||||
{
|
||||
LOCALE_IO dummy;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user