83 const std::filesystem::path boardPath =
91 const std::filesystem::path outputPath =
92 std::filesystem::temp_directory_path() /
"kicad_d356_midpoint_test.d356";
97 std::ifstream in( outputPath );
102 int expectedViaMask = -1;
104 for(
PCB_TRACK* track : board->Tracks() )
110 const int mask = (
via->IsTented(
F_Mask ) ? 1 : 0 ) | (
via->IsTented(
B_Mask ) ? 2 : 0 );
112 if( expectedViaMask < 0 )
113 expectedViaMask = mask;
115 BOOST_REQUIRE_EQUAL( mask, expectedViaMask );
123 while( std::getline( in, line ) )
126 if( line.size() < 32 || line[0] !=
'3' )
129 const std::string refdes = trim( line.substr( 20, 6 ) );
130 const std::string
pin = trim( line.substr( 27, 4 ) );
131 const char midpoint = line[31];
133 if( refdes ==
"VIA" )
140 const size_t sPos = line.rfind(
'S' );
144 else if(
pin.empty() )
157 BOOST_CHECK_GT( namedPads, 0 );
158 BOOST_CHECK_GT( unnamedPads, 0 );
159 BOOST_CHECK_GT( vias, 0 );
162 std::filesystem::remove( outputPath );
170 const std::vector<std::string> lines = exportD356(
"issue10697.kicad_pcb" );
172 BOOST_CHECK( std::any_of( lines.begin(), lines.end(),
173 [](
const std::string& aLine )
175 return aLine.rfind(
"P VER IPC-D-356A ", 0 ) == 0;
180 for(
size_t ii = 0; ii < lines.size(); ++ii )
182 if( lines[ii].rfind(
"307", 0 ) != 0 )
186 BOOST_REQUIRE_EQUAL( lines[ii].size(), 80u );
192 BOOST_REQUIRE_LT( ii + 1, lines.size() );
193 BOOST_REQUIRE_EQUAL( lines[ii + 1].size(), 80u );
194 BOOST_CHECK_EQUAL( lines[ii + 1].substr( 0, 17 ),
"027" + lines[ii].substr( 3, 14 ) );
202 const std::vector<std::string> longNames = exportD356(
"issue3812.kicad_pcb" );
203 std::vector<std::string> nets;
206 for(
const std::string& line : longNames )
209 nets.push_back( line.substr( 3, 14 ) );
211 if( line.rfind(
"P NNAME", 0 ) == 0 && trim( line.substr( 14 ) ) ==
"/inout_user/CAN_H" )
212 alias = line.substr( 8, 5 );
215 BOOST_CHECK( std::is_sorted( nets.begin(), nets.end() ) );
217 BOOST_REQUIRE_EQUAL( alias.size(), 5u );
218 BOOST_CHECK( std::any_of( longNames.begin(), longNames.end(),
219 [&](
const std::string& aLine )
221 return aLine[0] ==
'3' && trim( aLine.substr( 3, 14 ) ) == alias;
std::unique_ptr< BOARD > ReadBoardFromFileOrStream(const std::string &aFilename, std::istream &aFallback)
Read a board from a file, or another stream, as appropriate.
BOOST_CHECK_EQUAL(result, "25.4")