KiCad PCB EDA Suite
Loading...
Searching...
No Matches
test_erc_ground_pins.cpp
Go to the documentation of this file.
1/*
2 * This program source code file is part of KiCad, a free EDA CAD application.
3 *
4 * Copyright The KiCad Developers, see AUTHORS.TXT for contributors.
5 *
6 * This program is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU General Public License
8 * as published by the Free Software Foundation; either version 3
9 * of the License, or (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program. If not, see <https://www.gnu.org/licenses/>.
18 */
19
28
31
32#include <connection_graph.h>
33#include <schematic.h>
34#include <erc/erc_settings.h>
35#include <erc/erc.h>
36#include <erc/erc_report.h>
38#include <locale_io.h>
39#include <advanced_config.h>
40#include <sch_symbol.h>
41#include <sch_pin.h>
42#include <sch_marker.h>
43#include <scoped_set_reset.h>
44
45
55
56
57BOOST_FIXTURE_TEST_CASE( ERCGroundPinsUsePublishedNames, ERC_GROUND_PIN_TEST_FIXTURE )
58{
59 LOCALE_IO locale;
60 auto& enabled = const_cast<ADVANCED_CFG&>( ADVANCED_CFG::GetCfg() ).m_ConnectivityEngine;
61 SCOPED_SET_RESET restore( enabled, true );
62 const std::vector<std::pair<wxString, int>> cases = {
63 { "ground_pin_test_error", 1 },
64 { "ground_pin_test_mixed", 1 },
65 { "ground_pin_test_ok", 0 },
66 { "ground_pin_test_no_ground_net", 0 },
67 { "ground_pin_test_earth", 0 }
68 };
69
70 for( const auto& [fixture, expected] : cases )
71 {
72 BOOST_TEST_CONTEXT( fixture )
73 {
74 KI_TEST::LoadSchematic( m_settingsManager, fixture, m_schematic );
75 m_schematic->ErcSettings().m_ERCSeverities[ERCE_GROUND_PIN_NOT_GROUND] = RPT_SEVERITY_ERROR;
76 m_schematic->RebuildConnectivity();
77 m_schematic->ConnectionGraph()->Reset();
78 ERC_TESTER tester( m_schematic.get() );
80 SHEETLIST_ERC_ITEMS_PROVIDER errors( m_schematic.get() );
83
84 for( int i = 0; i < errors.GetCount(); ++i )
86 }
87 }
88}
89
90
91BOOST_FIXTURE_TEST_CASE( ERCGroundPinsUseActiveSharedInstanceUnits, ERC_GROUND_PIN_TEST_FIXTURE )
92{
93 LOCALE_IO locale;
94 auto& enabled = const_cast<ADVANCED_CFG&>( ADVANCED_CFG::GetCfg() ).m_ConnectivityEngine;
95 SCOPED_SET_RESET restore( enabled, enabled );
96
97 for( bool backend : { false, true } )
98 {
99 enabled = backend;
100 KI_TEST::LoadSchematic( m_settingsManager, "legacy_hierarchy/legacy_hierarchy", m_schematic );
101 std::vector<SCH_SHEET_PATH> paths;
102
103 for( const SCH_SHEET_PATH& path : m_schematic->Hierarchy() )
104 {
105 if( path.LastScreen()->GetFileName().EndsWith( "ampli_ht.kicad_sch" ) )
106 paths.push_back( path );
107 }
108
109 BOOST_REQUIRE_EQUAL( paths.size(), 2 );
110 SCH_SCREEN* screen = paths[0].LastScreen();
111 BOOST_REQUIRE( screen == paths[1].LastScreen() );
112 SCH_SYMBOL* symbol = nullptr;
113 SCH_SYMBOL* ground = nullptr;
114 SCH_SYMBOL* supply = nullptr;
115
116 for( SCH_ITEM* item : screen->Items().OfType( SCH_SYMBOL_T ) )
117 {
118 auto* candidate = static_cast<SCH_SYMBOL*>( item );
119
120 if( !symbol && candidate->GetUnitCount() > 1 )
121 symbol = candidate;
122 else if( !ground && candidate->GetField( FIELD_T::VALUE )->GetText() == wxString( "GND" ) )
123 ground = candidate;
124 else if( !supply && candidate->GetField( FIELD_T::VALUE )->GetText() == wxString( "+12V" ) )
125 supply = candidate;
126 }
127
128 BOOST_REQUIRE( symbol );
129 BOOST_REQUIRE( ground );
130 BOOST_REQUIRE( supply );
131 symbol->SetUnitSelection( &paths[0], 1 );
132 symbol->SetUnitSelection( &paths[1], 2 );
133 symbol->Move( VECTOR2I( 100000000, 200000000 ) );
134 SCH_PIN* common = nullptr;
135 SCH_PIN* selected = nullptr;
136
137 for( const auto& pin : symbol->GetRawPins() )
138 {
139 if( pin->GetNumber() == wxString( "4" ) )
140 common = pin.get();
141 else if( pin->GetNumber() == wxString( "5" ) )
142 selected = pin.get();
143 }
144
145 BOOST_REQUIRE( common );
146 BOOST_REQUIRE( selected );
147 BOOST_REQUIRE_EQUAL( common->GetUnit(), 0 );
148 BOOST_REQUIRE_EQUAL( selected->GetUnit(), 2 );
149 auto* libraryPin = const_cast<SCH_PIN*>( selected->GetLibPin() );
150 BOOST_REQUIRE( libraryPin );
151 libraryPin->SetName( "GND" );
153 BOOST_REQUIRE_EQUAL( selected->GetShownName(), wxString( "GND" ) );
155 BOOST_REQUIRE_EQUAL( ground->GetPins( &paths[0] ).size(), 1 );
156 BOOST_REQUIRE_EQUAL( supply->GetPins( &paths[0] ).size(), 1 );
157 ground->Move( common->GetPosition() - ground->GetPins( &paths[0] ).front()->GetPosition() );
158 supply->Move( selected->GetPosition() - supply->GetPins( &paths[0] ).front()->GetPosition() );
159 screen->Update( symbol, false );
160 screen->Update( ground, false );
161 screen->Update( supply, false );
162 m_schematic->RebuildConnectivity();
163
164 if( backend )
165 m_schematic->ConnectionGraph()->Reset();
166
167 symbol->SetUnit( 1 );
168 m_schematic->SetCurrentSheet( paths[0] );
169 ERC_TESTER tester( m_schematic.get() );
170 tester.TestGroundPins();
171 size_t count = 0;
172
173 for( SCH_ITEM* item : screen->Items().OfType( SCH_MARKER_T ) )
174 {
175 const auto* marker = static_cast<SCH_MARKER*>( item );
176
177 if( marker->GetRCItem()->GetErrorCode() != ERCE_GROUND_PIN_NOT_GROUND
178 || marker->GetRCItem()->GetMainItemID() != selected->m_Uuid )
179 continue;
180
181 const auto error = std::static_pointer_cast<ERC_ITEM>( marker->GetRCItem() );
182 BOOST_CHECK( error->GetSpecificSheetPath().PathRef() == paths[1].PathRef() );
183 BOOST_CHECK( marker->GetPosition() == selected->GetPosition() );
184 ++count;
185 }
186
187 BOOST_CHECK_EQUAL( count, 1 );
188 }
189}
190
191
198{
200
201 // Test schematic with a symbol that has:
202 // - One pin (VCC) connected to +5V net
203 // - One pin labeled "GND" connected to non-ground net "OTHER"
204 // - A separate GND symbol connected to "GND" net (establishes ground reference)
205 KI_TEST::LoadSchematic( m_settingsManager, "ground_pin_test_error", m_schematic );
206
207 ERC_SETTINGS& settings = m_schematic->ErcSettings();
208 SHEETLIST_ERC_ITEMS_PROVIDER errors( m_schematic.get() );
209
210 // Skip the symbol library warnings for this test
213
214 // Enable the ground pin test
216
217 m_schematic->ConnectionGraph()->RunERC();
218
219 ERC_TESTER tester( m_schematic.get() );
220 tester.TestGroundPins();
221
223
224 ERC_REPORT reportWriter( m_schematic.get(), EDA_UNITS::MM );
225
226 BOOST_CHECK_MESSAGE( errors.GetCount() == 1,
227 "Expected 1 ERCE_GROUND_PIN_NOT_GROUND error but got "
228 << errors.GetCount() << "\n" << reportWriter.GetTextReport() );
229
230 // Verify the error is the correct type
231 bool foundGroundPinError = false;
232 for( unsigned i = 0; i < errors.GetCount(); i++ )
233 {
234 if( errors.GetItem( i )->GetErrorCode() == ERCE_GROUND_PIN_NOT_GROUND )
235 {
236 foundGroundPinError = true;
237 break;
238 }
239 }
240
241 BOOST_CHECK_MESSAGE( foundGroundPinError,
242 "Expected to find ERCE_GROUND_PIN_NOT_GROUND error\n"
243 << reportWriter.GetTextReport() );
244}
245
246
252{
254
255 // Test schematic with a symbol where the GND pin is correctly connected to a ground net
256 KI_TEST::LoadSchematic( m_settingsManager, "ground_pin_test_ok", m_schematic );
257
258 ERC_SETTINGS& settings = m_schematic->ErcSettings();
259 SHEETLIST_ERC_ITEMS_PROVIDER errors( m_schematic.get() );
260
261 // Skip the symbol library warnings
264
265 // Enable the ground pin test
267
268 m_schematic->ConnectionGraph()->RunERC();
269
270 ERC_TESTER tester( m_schematic.get() );
271 tester.TestGroundPins();
272
274
275 ERC_REPORT reportWriter( m_schematic.get(), EDA_UNITS::MM );
276
277 // Should have no ground pin errors since the GND pin is correctly connected
278 int groundPinErrors = 0;
279 for( unsigned i = 0; i < errors.GetCount(); i++ )
280 {
281 if( errors.GetItem( i )->GetErrorCode() == ERCE_GROUND_PIN_NOT_GROUND )
282 {
283 groundPinErrors++;
284 }
285 }
286
287 BOOST_CHECK_MESSAGE( groundPinErrors == 0,
288 "Expected 0 ERCE_GROUND_PIN_NOT_GROUND errors but got "
289 << groundPinErrors << "\n" << reportWriter.GetTextReport() );
290}
291
292
298{
300
301 // Test schematic with a symbol that has multiple ground-labeled pins:
302 // - One GND pin correctly connected to ground net
303 // - One GND_ALT pin connected to non-ground net
304 KI_TEST::LoadSchematic( m_settingsManager, "ground_pin_test_mixed", m_schematic );
305
306 ERC_SETTINGS& settings = m_schematic->ErcSettings();
307 SHEETLIST_ERC_ITEMS_PROVIDER errors( m_schematic.get() );
308
309 // Skip the symbol library warnings
312
313 // Enable the ground pin test
315
316 m_schematic->ConnectionGraph()->RunERC();
317
318 ERC_TESTER tester( m_schematic.get() );
319 tester.TestGroundPins();
320
322
323 ERC_REPORT reportWriter( m_schematic.get(), EDA_UNITS::MM );
324
325 // Should have exactly 1 ground pin error for the GND_ALT pin
326 int groundPinErrors = 0;
327 for( unsigned i = 0; i < errors.GetCount(); i++ )
328 {
329 if( errors.GetItem( i )->GetErrorCode() == ERCE_GROUND_PIN_NOT_GROUND )
330 {
331 groundPinErrors++;
332 }
333 }
334
335 BOOST_CHECK_MESSAGE( groundPinErrors == 1,
336 "Expected 1 ERCE_GROUND_PIN_NOT_GROUND error but got "
337 << groundPinErrors << "\n" << reportWriter.GetTextReport() );
338}
339
340
346{
348
349 // Test schematic with a symbol that has a GND pin but no ground net exists anywhere
350 // The error should only trigger when there IS a ground net somewhere but the GND pin
351 // is not connected to it
352 KI_TEST::LoadSchematic( m_settingsManager, "ground_pin_test_no_ground_net", m_schematic );
353
354 ERC_SETTINGS& settings = m_schematic->ErcSettings();
355 SHEETLIST_ERC_ITEMS_PROVIDER errors( m_schematic.get() );
356
357 // Skip the symbol library warnings
360
361 // Enable the ground pin test
363
364 m_schematic->ConnectionGraph()->RunERC();
365
366 ERC_TESTER tester( m_schematic.get() );
367 tester.TestGroundPins();
368
370
371 ERC_REPORT reportWriter( m_schematic.get(), EDA_UNITS::MM );
372
373 // Should have no ground pin errors since there's no ground net to compare against
374 int groundPinErrors = 0;
375 for( unsigned i = 0; i < errors.GetCount(); i++ )
376 {
377 if( errors.GetItem( i )->GetErrorCode() == ERCE_GROUND_PIN_NOT_GROUND )
378 {
379 groundPinErrors++;
380 }
381 }
382
383 BOOST_CHECK_MESSAGE( groundPinErrors == 0,
384 "Expected 0 ERCE_GROUND_PIN_NOT_GROUND errors but got "
385 << groundPinErrors << "\n" << reportWriter.GetTextReport() );
386}
387
388
394{
396
397 KI_TEST::LoadSchematic( m_settingsManager, "ground_pin_test_error", m_schematic );
398
399 ERC_SETTINGS& settings = m_schematic->ErcSettings();
400 SHEETLIST_ERC_ITEMS_PROVIDER errors( m_schematic.get() );
401
402 // Skip the symbol library warnings
405
406 int groundPinErrors = 0;
407 // Disable the ground pin test
409
410 m_schematic->ConnectionGraph()->RunERC();
411
412 ERC_TESTER tester( m_schematic.get() );
413 tester.TestGroundPins();
414
416
417 for( unsigned i = 0; i < errors.GetCount(); i++ )
418 {
419 if( errors.GetItem( i )->GetErrorCode() == ERCE_GROUND_PIN_NOT_GROUND )
420 {
421 groundPinErrors++;
422 }
423 }
424
425 BOOST_CHECK_MESSAGE( groundPinErrors == 0,
426 "Expected 0 errors when test is disabled but got " << groundPinErrors );
427
428 // Now re-enable the ground pin test and count again
430 m_schematic->ConnectionGraph()->RunERC();
431
432 ERC_TESTER tester2( m_schematic.get() );
433 tester2.TestGroundPins();
435
436 groundPinErrors = 0;
437
438 for( unsigned i = 0; i < errors.GetCount(); i++ )
439 {
440 if( errors.GetItem( i )->GetErrorCode() == ERCE_GROUND_PIN_NOT_GROUND )
441 {
442 groundPinErrors++;
443 }
444 }
445
446 BOOST_CHECK_MESSAGE( groundPinErrors >= 1,
447 "Expected at least 1 error when test is enabled but got " << groundPinErrors );
448}
449
450
456{
458
459 KI_TEST::LoadSchematic( m_settingsManager, "ground_pin_test_error", m_schematic );
460
461 ERC_SETTINGS& settings = m_schematic->ErcSettings();
462 SHEETLIST_ERC_ITEMS_PROVIDER errors( m_schematic.get() );
463
464 // Skip the symbol library warnings
467
468 // Enable the ground pin test
470
471 m_schematic->ConnectionGraph()->RunERC();
472
473 ERC_TESTER tester( m_schematic.get() );
474 tester.TestGroundPins();
475
477
478 // Find the ground pin error and verify its content
479 bool foundGroundPinError = false;
480 wxString errorMessage;
481
482 for( unsigned i = 0; i < errors.GetCount(); i++ )
483 {
484 if( errors.GetItem( i )->GetErrorCode() == ERCE_GROUND_PIN_NOT_GROUND )
485 {
486 foundGroundPinError = true;
487 errorMessage = errors.GetItem( i )->GetErrorMessage( false );
488
489 // Verify the error message contains expected content
490 BOOST_CHECK_MESSAGE( errorMessage.Contains( "Pin" ),
491 "Error message should contain 'Pin': " << errorMessage.ToStdString() );
492
493 BOOST_CHECK_MESSAGE( errorMessage.Contains( "GND" ),
494 "Error message should contain 'GND': " << errorMessage.ToStdString() );
495
496 BOOST_CHECK_MESSAGE( errorMessage.Contains( "not connected to ground net" ),
497 "Error message should contain expected text: " << errorMessage.ToStdString() );
498
499 // Verify that the error has the pin item associated
500 std::shared_ptr<RC_ITEM> ercItem = errors.GetItem( i );
501 BOOST_CHECK_MESSAGE( ercItem->GetMainItemID() != niluuid,
502 "ERC item should have a main item (the pin)" );
503
504 break;
505 }
506 }
507
508 BOOST_CHECK_MESSAGE( foundGroundPinError,
509 "Should have found a ground pin error to test message content" );
510}
511
512
519{
521
522 KI_TEST::LoadSchematic( m_settingsManager, "ground_pin_test_earth", m_schematic );
523
524 ERC_SETTINGS& settings = m_schematic->ErcSettings();
525 SHEETLIST_ERC_ITEMS_PROVIDER errors( m_schematic.get() );
526
530
531 m_schematic->ConnectionGraph()->RunERC();
532
533 ERC_TESTER tester( m_schematic.get() );
534 tester.TestGroundPins();
535
537
538 ERC_REPORT reportWriter( m_schematic.get(), EDA_UNITS::MM );
539
540 int groundPinErrors = 0;
541
542 for( unsigned i = 0; i < errors.GetCount(); i++ )
543 {
544 if( errors.GetItem( i )->GetErrorCode() == ERCE_GROUND_PIN_NOT_GROUND )
545 {
546 groundPinErrors++;
547 }
548 }
549
550 BOOST_CHECK_MESSAGE( groundPinErrors == 0,
551 "Expected 0 ERCE_GROUND_PIN_NOT_GROUND errors (Earth is a valid ground net) but got "
552 << groundPinErrors << "\n" << reportWriter.GetTextReport() );
553}
554
555
561{
563
564 // Test data: schema name and expected number of ERCE_GROUND_PIN_NOT_GROUND errors
565 std::vector<std::pair<wxString, int>> tests =
566 {
567 { "ground_pin_test_error", 1 }, // GND pin on non-ground net while symbol has ground
568 { "ground_pin_test_ok", 0 }, // GND pin correctly connected
569 { "ground_pin_test_mixed", 1 }, // Mixed: one correct, one incorrect
570 { "ground_pin_test_no_ground_net", 0 }, // No ground net anywhere (no error triggered)
571 { "ground_pin_test_earth", 0 } // GND pins on GND and Earth nets (both valid ground)
572 };
573
574 for( const std::pair<wxString, int>& test : tests )
575 {
576 KI_TEST::LoadSchematic( m_settingsManager, test.first, m_schematic );
577
578 ERC_SETTINGS& settings = m_schematic->ErcSettings();
579 SHEETLIST_ERC_ITEMS_PROVIDER errors( m_schematic.get() );
580
581 // Skip the symbol library warnings
584
585 // Enable the ground pin test
587
588 m_schematic->ConnectionGraph()->RunERC();
589
590 ERC_TESTER tester( m_schematic.get() );
591
592 // Run all ERC tests to ensure ground pin test integrates properly
595 tester.TestMissingUnits();
596 tester.TestNoConnectPins();
597 tester.TestPinToPin();
598 tester.TestGroundPins(); // Our test
599 tester.TestSimilarLabels();
600
602
603 // Count only ground pin errors
604 int groundPinErrors = 0;
605 for( unsigned i = 0; i < errors.GetCount(); i++ )
606 {
607 if( errors.GetItem( i )->GetErrorCode() == ERCE_GROUND_PIN_NOT_GROUND )
608 {
609 groundPinErrors++;
610 }
611 }
612
613 ERC_REPORT reportWriter( m_schematic.get(), EDA_UNITS::MM );
614
615 BOOST_CHECK_MESSAGE( groundPinErrors == test.second,
616 "Expected " << test.second << " ERCE_GROUND_PIN_NOT_GROUND errors in "
617 << test.first.ToStdString() << " but got " << groundPinErrors
618 << "\n" << reportWriter.GetTextReport() );
619 }
620}
static const ADVANCED_CFG & GetCfg()
Get the singleton instance's config, which is shared by all consumers.
const KIID m_Uuid
Definition eda_item.h:599
EE_TYPE OfType(KICAD_T aType) const
Definition sch_rtree.h:248
wxString GetTextReport()
Returns the ERC report in "text" (human readable) format in the C-locale.
Container for ERC settings.
std::map< int, SEVERITY > m_ERCSeverities
Runs the electrical rules checks and adds a SCH_MARKER for each violation.
Definition erc.h:60
int TestPinToPin()
Checks the full netlist against the pin-to-pin connectivity requirements.
Definition erc.cpp:1709
int TestSimilarLabels()
Checks for labels that differ only in capitalization.
Definition erc.cpp:2696
int TestMultUnitPinConflicts()
Checks if shared pins on multi-unit symbols have been connected to different nets.
Definition erc.cpp:2145
int TestNoConnectPins()
In KiCad 5 and earlier, you could connect stuff up to pins with NC electrical type.
Definition erc.cpp:1288
int TestGroundPins()
Checks for ground-labeled pins not on a ground net while another pin is.
Definition erc.cpp:2529
int TestMissingUnits()
Test for uninstantiated units of multi unit symbols.
Definition erc.cpp:970
int TestMultiunitFootprints()
Test if all units of each multiunit symbol have the same footprint assigned.
Definition erc.cpp:923
Instantiate the current locale within a scope in which you are expecting exceptions to be thrown.
Definition locale_io.h:37
int GetErrorCode() const
Definition rc_item.h:158
virtual wxString GetErrorMessage(bool aTranslate) const
Definition rc_item.cpp:37
virtual const wxString & GetText() const override
Return the string associated with the text object.
Definition sch_field.h:139
Base class for any item which can be embedded within the SCHEMATIC container class,...
Definition sch_item.h:170
int GetUnit() const
Definition sch_item.h:243
virtual void SetUnit(int aUnit)
Definition sch_item.h:242
SCH_PIN * GetLibPin() const
Definition sch_pin.h:109
VECTOR2I GetPosition() const override
Definition sch_pin.cpp:378
const wxString & GetShownName() const
Definition sch_pin.cpp:697
void SetType(ELECTRICAL_PINTYPE aType)
Definition sch_pin.cpp:455
ELECTRICAL_PINTYPE GetType() const
Definition sch_pin.cpp:435
EE_RTREE & Items()
Get the full RTree, usually for iterating.
Definition sch_screen.h:122
void Update(SCH_ITEM *aItem, bool aUpdateLibSymbol=true)
Refresh a changed item in the tree and invalidate connectivity.
Handle access to a stack of flattened SCH_SHEET objects by way of a path for creating a flattened sch...
Schematic symbol object.
Definition sch_symbol.h:73
std::vector< std::unique_ptr< SCH_PIN > > & GetRawPins()
Definition sch_symbol.h:678
void Move(const VECTOR2I &aMoveVector) override
Move the item by aMoveVector to a new position.
Definition sch_symbol.h:789
std::vector< const SCH_PIN * > GetPins(const SCH_SHEET_PATH *aSheet) const
Retrieve a list of the SCH_PINs for the given sheet path.
int GetUnitCount() const override
Return the number of units per package of the symbol.
void SetUnitSelection(const SCH_SHEET_PATH *aSheet, int aUnitSelection)
Set the selected unit of this symbol on one sheet.
SCH_FIELD * GetField(FIELD_T aFieldType)
Return a mandatory field in this symbol.
RAII class that sets an value at construction and resets it to the original value at destruction.
An implementation of the RC_ITEM_LIST interface which uses the global SHEETLIST to fulfill the contra...
int GetCount(int aSeverity=-1) const override
void SetSeverities(int aSeverities) override
std::shared_ptr< RC_ITEM > GetItem(int aIndex) const override
Retrieve a RC_ITEM by index.
@ ERCE_GROUND_PIN_NOT_GROUND
A ground-labeled pin is not on a ground net while another pin is.
@ ERCE_LIB_SYMBOL_MISMATCH
Symbol doesn't match copy in library.
@ ERCE_LIB_SYMBOL_ISSUES
Symbol not found in active libraries.
KIID niluuid(0)
void LoadSchematic(SETTINGS_MANAGER &aSettingsManager, const wxString &aRelPath, std::unique_ptr< SCHEMATIC > &aSchematic)
@ PT_POWER_IN
power input (GND, VCC for ICs). Must be connected to a power output.
Definition pin_type.h:42
@ RPT_SEVERITY_WARNING
@ RPT_SEVERITY_ERROR
@ RPT_SEVERITY_IGNORE
std::vector< FAB_LAYER_COLOR > dummy
std::unique_ptr< SCHEMATIC > m_schematic
@ VALUE
Field Value of part, i.e. "3.3K".
BOOST_FIXTURE_TEST_CASE(ERCGroundPinsUsePublishedNames, ERC_GROUND_PIN_TEST_FIXTURE)
BOOST_REQUIRE(intersection.has_value()==c.ExpectedIntersection.has_value())
std::string path
KIBIS_PIN * pin
VECTOR3I expected(15, 30, 45)
BOOST_TEST_CONTEXT("Test Clearance")
BOOST_CHECK_EQUAL(result, "25.4")
@ SCH_SYMBOL_T
Definition typeinfo.h:168
@ SCH_MARKER_T
Definition typeinfo.h:154
VECTOR2< int32_t > VECTOR2I
Definition vector2d.h:708