62 PAD* padWithFootprintMargin =
nullptr;
63 PAD* padWithNoMargin =
nullptr;
64 PAD* padWithOwnMargin =
nullptr;
66 for(
FOOTPRINT* fp : m_board->Footprints() )
68 if( fp->GetFPIDAsString() ==
"TestFootprint_WithSolderMaskMargin" )
71 BOOST_CHECK( fp->GetLocalSolderMaskMargin().has_value() );
74 for(
PAD*
pad : fp->Pads() )
76 if(
pad->GetNumber() ==
"1" )
78 padWithFootprintMargin =
pad;
81 BOOST_CHECK( !
pad->GetLocalSolderMaskMargin().has_value() );
85 else if( fp->GetFPIDAsString() ==
"TestFootprint_NoSolderMaskMargin" )
88 BOOST_CHECK( !fp->GetLocalSolderMaskMargin().has_value() );
90 for(
PAD*
pad : fp->Pads() )
92 if(
pad->GetNumber() ==
"1" )
93 padWithNoMargin =
pad;
96 else if( fp->GetFPIDAsString() ==
"TestFootprint_PadOverridesSolderMaskMargin" )
99 BOOST_CHECK( fp->GetLocalSolderMaskMargin().has_value() );
102 for(
PAD*
pad : fp->Pads() )
104 if(
pad->GetNumber() ==
"1" )
106 padWithOwnMargin =
pad;
109 BOOST_CHECK(
pad->GetLocalSolderMaskMargin().has_value() );
153 std::vector<PAD*> pads;
154 std::vector<PCB_TRACK*> tracks;
155 std::vector<PCB_SHAPE*> shapes;
157 for(
FOOTPRINT* fp : m_board->Footprints() )
159 for(
PAD*
pad : fp->Pads() )
160 pads.push_back(
pad );
162 for(
BOARD_ITEM* item : fp->GraphicalItems() )
165 shapes.push_back(
static_cast<PCB_SHAPE*
>( item ) );
169 for(
PCB_TRACK* track : m_board->Tracks() )
170 tracks.push_back( track );
175 shapes.push_back(
static_cast<PCB_SHAPE*
>( item ) );
180 const int iterations = 1000;
184 for(
int i = 0; i < iterations; ++i )
190 track->GetSolderMaskExpansion();
193 shape->GetSolderMaskExpansion();
198 int totalCalls = iterations * ( pads.size() + tracks.size() + shapes.size() );
200 BOOST_TEST_MESSAGE( wxString::Format(
"%d calls to GetSolderMaskExpansion took %0.1f ms "
202 totalCalls, timer.
msecs(),
203 timer.
msecs() * 1e6 / totalCalls ) );
208 BOOST_CHECK_MESSAGE( timer.
msecs() < 500.0,
209 wxString::Format(
"GetSolderMaskExpansion too slow: %0.1f ms for %d calls",
210 timer.
msecs(), totalCalls ) );
BOOST_CHECK_EQUAL(result, "25.4")