92 BOOST_REQUIRE_MESSAGE( m_board,
"Failed to load board issue21482" );
95 int trackCount = m_board->Tracks().size();
97 for(
FOOTPRINT* fp : m_board->Footprints() )
98 padCount += fp->Pads().size();
100 BOOST_TEST_MESSAGE( wxString::Format(
"Board has %d tracks and %d pads", trackCount, padCount ) );
102 std::vector<DRC_ITEM> violations;
105 BOOST_REQUIRE_MESSAGE( bds.
m_DRCEngine,
"DRC engine not initialized" );
114 [&](
const std::shared_ptr<DRC_ITEM>& aItem,
const VECTOR2I& aPos,
int aLayer,
115 const std::function<
void(
PCB_MARKER* )>& aPathGenerator )
118 violations.push_back( *aItem );
121 BOOST_TEST_CHECKPOINT(
"Running creepage DRC" );
124 auto start = std::chrono::high_resolution_clock::now();
130 catch(
const std::exception& e )
132 BOOST_ERROR( wxString::Format(
"DRC creepage exception: %s", e.what() ) );
136 auto end = std::chrono::high_resolution_clock::now();
137 double elapsedSeconds = std::chrono::duration<double>(
end - start ).count();
139 BOOST_TEST_MESSAGE( wxString::Format(
"DRC creepage completed in %.2f seconds", elapsedSeconds ) );
140 BOOST_TEST_MESSAGE( wxString::Format(
"Found %d creepage violations", (
int) violations.size() ) );
146 bool onGitLabCI = std::getenv(
"GITLAB_CI" ) !=
nullptr;
153 std::ofstream metricsFile(
"creepage_perf_metrics.txt" );
155 if( metricsFile.is_open() )
157 metricsFile <<
"creepage_drc_seconds " << elapsedSeconds <<
"\n";
158 metricsFile <<
"creepage_violations " << violations.size() <<
"\n";
166 BOOST_CHECK_MESSAGE( elapsedSeconds < 20.0,
167 wxString::Format(
"Creepage DRC too slow: %.2f seconds (target: <20s)",
172 if( elapsedSeconds < 5.0 )
176 else if( elapsedSeconds < 10.0 )
180 else if( elapsedSeconds < 15.0 )
~DRC_CREEPAGE_PERF_TEST_FIXTURE()
std::unique_ptr< BOARD > m_board
SETTINGS_MANAGER m_settingsManager
BOOST_FIXTURE_TEST_CASE(CreepagePerformanceIssue21482, DRC_CREEPAGE_PERF_TEST_FIXTURE)
Test that creepage DRC check completes in a reasonable time.