QA: std::optional testing + re-enable cadstar parts parser qa test
This commit is contained in:
parent
10c4b948cb
commit
f97beb15b8
|
@ -138,6 +138,52 @@ BOOST_TEST_PRINT_NAMESPACE_CLOSE
|
|||
#endif
|
||||
|
||||
|
||||
template<class T>
|
||||
struct PRINTABLE_OPT
|
||||
{
|
||||
PRINTABLE_OPT( const std::optional<T>& aOpt ) : m_Opt( aOpt ){};
|
||||
PRINTABLE_OPT( const T& aVal ) : m_Opt( aVal ){};
|
||||
|
||||
std::optional<T> m_Opt;
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* Work around to allow printing std::optional types
|
||||
*/
|
||||
#define KI_CHECK_OPT_EQUAL( lhs, rhs ) \
|
||||
BOOST_CHECK_EQUAL( PRINTABLE_OPT( lhs ), PRINTABLE_OPT( rhs ) )
|
||||
|
||||
|
||||
template <class T>
|
||||
inline std::ostream& operator<<( std::ostream& aOs, const PRINTABLE_OPT<T>& aOptional )
|
||||
{
|
||||
if( aOptional.m_Opt.has_value() )
|
||||
aOs << *aOptional.m_Opt;
|
||||
else
|
||||
aOs << "nullopt";
|
||||
|
||||
return aOs;
|
||||
}
|
||||
|
||||
|
||||
template <class L, class R>
|
||||
inline bool operator==( const PRINTABLE_OPT<L>& aLhs, const PRINTABLE_OPT<R>& aRhs )
|
||||
{
|
||||
if( !aLhs.m_Opt.has_value() && !aRhs.m_Opt.has_value() )
|
||||
return true; // both nullopt
|
||||
|
||||
return aLhs.m_Opt.has_value() && aRhs.m_Opt.has_value() && *aLhs.m_Opt == *aRhs.m_Opt;
|
||||
}
|
||||
|
||||
|
||||
template <class L, class R>
|
||||
inline bool operator!=( const PRINTABLE_OPT<L>& aLhs, const PRINTABLE_OPT<R>& aRhs )
|
||||
{
|
||||
return !( aLhs == aRhs );
|
||||
}
|
||||
|
||||
|
||||
namespace BOOST_TEST_PRINT_NAMESPACE_OPEN
|
||||
{
|
||||
|
||||
|
@ -161,21 +207,6 @@ struct print_log_value<std::vector<T>>
|
|||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Boost print helper for std::optional
|
||||
*/
|
||||
template <class T>
|
||||
struct print_log_value<std::optional<T>>
|
||||
{
|
||||
inline void operator()( std::ostream& os, std::optional<T> const& aOptional )
|
||||
{
|
||||
if( aOptional.has_value() )
|
||||
print_log_value<T>()( os, aOptional.value() );
|
||||
else
|
||||
os << "nullopt";
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Boost print helper for wxPoint. Note operator<< for this type doesn't
|
||||
* exist in non-DEBUG builds.
|
||||
|
|
|
@ -31,19 +31,6 @@
|
|||
#include <common/plugins/cadstar/cadstar_parts_lib_parser.h>
|
||||
|
||||
|
||||
//Todo: move somewhere else?
|
||||
template <class T>
|
||||
std::ostream& operator<<( std::ostream& aOs, const std::optional<T>& aOptional )
|
||||
{
|
||||
if( aOptional.has_value() )
|
||||
aOs << aOptional.value();
|
||||
else
|
||||
aOs << "nullopt";
|
||||
|
||||
return aOs;
|
||||
}
|
||||
|
||||
|
||||
BOOST_AUTO_TEST_SUITE( CadstarPartParser );
|
||||
|
||||
|
||||
|
@ -64,7 +51,7 @@ BOOST_AUTO_TEST_CASE( AnalyzeGrammar )
|
|||
BOOST_CHECK_EQUAL( headerIssues, 0 );
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
struct CHECK_HEADER_CASE
|
||||
{
|
||||
std::string m_CaseName;
|
||||
|
@ -118,33 +105,33 @@ BOOST_AUTO_TEST_CASE( ReadFile )
|
|||
// Test a programatically generated file (see writeCadstarFile.py)
|
||||
auto ret = p.ReadFile( getCadstarTestFile( "cadstarDummy.lib" ) );
|
||||
|
||||
BOOST_CHECK_EQUAL( ret.m_FormatNumber, 32 );
|
||||
KI_CHECK_OPT_EQUAL( ret.m_FormatNumber, 32 );
|
||||
BOOST_CHECK_EQUAL( ret.m_PartEntries.size(), 100 );
|
||||
|
||||
int i = 0;
|
||||
|
||||
for( CADSTAR_PART_ENTRY& partEntry : ret.m_PartEntries )
|
||||
{
|
||||
// Part header
|
||||
// Part header KI_CHECK_OPT_EQUAL
|
||||
BOOST_CHECK_EQUAL( partEntry.m_Name, "PartName" + std::to_string( i ) );
|
||||
BOOST_CHECK_EQUAL( partEntry.m_Number, std::to_string( i * 5 ) );
|
||||
BOOST_CHECK_EQUAL( partEntry.m_Version, std::to_string( 2 ) );
|
||||
BOOST_CHECK_EQUAL( partEntry.m_Description,
|
||||
KI_CHECK_OPT_EQUAL( partEntry.m_Number, std::to_string( i * 5 ) );
|
||||
KI_CHECK_OPT_EQUAL( partEntry.m_Version, std::to_string( 2 ) );
|
||||
KI_CHECK_OPT_EQUAL( partEntry.m_Description,
|
||||
"Part " + std::to_string( i ) + " Description" );
|
||||
|
||||
BOOST_CHECK_EQUAL( partEntry.m_Pcb_component, "FOOTPRINT" + std::to_string( i ) );
|
||||
BOOST_CHECK_EQUAL( partEntry.m_Pcb_alternate, "variant" + std::to_string( i * 5 ) );
|
||||
BOOST_CHECK_EQUAL( partEntry.m_Value, std::to_string( i ) + " uH" );
|
||||
KI_CHECK_OPT_EQUAL( partEntry.m_Pcb_alternate, "variant" + std::to_string( i * 5 ) );
|
||||
KI_CHECK_OPT_EQUAL( partEntry.m_Value, std::to_string( i ) + " uH" );
|
||||
BOOST_CHECK_EQUAL( partEntry.m_ComponentStem, "L" );
|
||||
BOOST_CHECK_EQUAL( partEntry.m_MaxPinCount, i + 10 );
|
||||
KI_CHECK_OPT_EQUAL( partEntry.m_MaxPinCount, i + 10 );
|
||||
BOOST_CHECK_EQUAL( partEntry.m_GateSwappingAllowed, i % 10 != 1 );
|
||||
BOOST_CHECK_EQUAL( partEntry.m_PinsVisible, i % 5 != 1 );
|
||||
|
||||
BOOST_CHECK_EQUAL( partEntry.m_SpicePartName, "PartName" + std::to_string( i ) );
|
||||
BOOST_CHECK_EQUAL( partEntry.m_SpiceModel, std::to_string( i ) + "uH" );
|
||||
KI_CHECK_OPT_EQUAL( partEntry.m_SpicePartName, "PartName" + std::to_string( i ) );
|
||||
KI_CHECK_OPT_EQUAL( partEntry.m_SpiceModel, std::to_string( i ) + "uH" );
|
||||
|
||||
BOOST_CHECK_EQUAL( partEntry.m_AcceptancePartName, "PartName" + std::to_string( i ) );
|
||||
BOOST_CHECK_EQUAL( partEntry.m_AcceptanceText, "Acceptance" + std::to_string( i ) );
|
||||
KI_CHECK_OPT_EQUAL( partEntry.m_AcceptancePartName, "PartName" + std::to_string( i ) );
|
||||
KI_CHECK_OPT_EQUAL( partEntry.m_AcceptanceText, "Acceptance" + std::to_string( i ) );
|
||||
|
||||
// User part attributes (* lines)
|
||||
BOOST_CHECK_EQUAL( partEntry.m_UserAttributes["UserFieldpartNo"],
|
||||
|
@ -187,7 +174,7 @@ BOOST_AUTO_TEST_CASE( ReadFile )
|
|||
// Check symbol name and pins
|
||||
BOOST_REQUIRE_EQUAL( partEntry.m_Symbols.size(), 1 );
|
||||
BOOST_CHECK_EQUAL( partEntry.m_Symbols[0].m_SymbolName, "Symbol" + std::to_string( i ) );
|
||||
BOOST_CHECK_EQUAL( partEntry.m_Symbols[0].m_SymbolAlternateName,
|
||||
KI_CHECK_OPT_EQUAL( partEntry.m_Symbols[0].m_SymbolAlternateName,
|
||||
std::optional<std::string>() );
|
||||
BOOST_REQUIRE_EQUAL( partEntry.m_Symbols[0].m_Pins.size(), 2 );
|
||||
BOOST_CHECK_EQUAL( partEntry.m_Symbols[0].m_Pins[0].m_Identifier, 1 );
|
||||
|
@ -258,20 +245,18 @@ BOOST_AUTO_TEST_CASE( ReadContent )
|
|||
CADSTAR_PARTS_LIB_PARSER csParser;
|
||||
CADSTAR_PARTS_LIB_MODEL result = csParser.ReadContent( test );
|
||||
|
||||
std::optional<std::string> nullOptString;
|
||||
|
||||
BOOST_CHECK_EQUAL( result.m_FormatNumber, 32 );
|
||||
KI_CHECK_OPT_EQUAL( result.m_FormatNumber, 32 );
|
||||
BOOST_REQUIRE_EQUAL( result.m_HierarchyNodes.size(), 2 ); // root and subnode
|
||||
|
||||
BOOST_REQUIRE_EQUAL( result.m_PartEntries.size(), 1 );
|
||||
|
||||
BOOST_CHECK_EQUAL( result.m_PartEntries[0].m_Name, "<Part name>" );
|
||||
BOOST_CHECK_EQUAL( result.m_PartEntries[0].m_Number, "<Part number>" );
|
||||
BOOST_CHECK_EQUAL( result.m_PartEntries[0].m_Version, "<Part version>" );
|
||||
BOOST_CHECK_EQUAL( result.m_PartEntries[0].m_Description, "<Description>" );
|
||||
BOOST_CHECK_EQUAL( result.m_PartEntries[0].m_Number.value(), "<Part number>" );
|
||||
BOOST_CHECK_EQUAL( result.m_PartEntries[0].m_Version.value(), "<Part version>" );
|
||||
BOOST_CHECK_EQUAL( result.m_PartEntries[0].m_Description.value(), "<Description>" );
|
||||
BOOST_CHECK_EQUAL( result.m_PartEntries[0].m_Pcb_component, "<PCB Component Refname>" );
|
||||
BOOST_CHECK_EQUAL( result.m_PartEntries[0].m_Pcb_alternate, "<PCB Alternate Refname>" );
|
||||
BOOST_CHECK_EQUAL( result.m_PartEntries[0].m_Value, "<Value>" );
|
||||
BOOST_CHECK_EQUAL( result.m_PartEntries[0].m_Pcb_alternate.value(), "<PCB Alternate Refname>" );
|
||||
BOOST_CHECK_EQUAL( result.m_PartEntries[0].m_Value.value(), "<Value>" );
|
||||
|
||||
// Check pin names (*PNM)
|
||||
BOOST_REQUIRE_EQUAL( result.m_PartEntries[0].m_PinNamesMap.size(), 6 );
|
||||
|
@ -315,7 +300,7 @@ BOOST_AUTO_TEST_CASE( ReadContent )
|
|||
// Check internal swap groups equivalences (*INT)
|
||||
BOOST_REQUIRE_EQUAL( result.m_PartEntries[0].m_InternalSwapGroup.size(), 1 );
|
||||
|
||||
BOOST_CHECK_EQUAL( result.m_PartEntries[0].m_InternalSwapGroup[0].m_Name, "Group1" );
|
||||
BOOST_CHECK_EQUAL( result.m_PartEntries[0].m_InternalSwapGroup[0].m_Name.value(), "Group1" );
|
||||
|
||||
std::vector<std::vector<long>>& intgates =
|
||||
result.m_PartEntries[0].m_InternalSwapGroup[0].m_Gates;
|
||||
|
@ -331,7 +316,7 @@ BOOST_AUTO_TEST_CASE( ReadContent )
|
|||
// Check external swap groups equivalences (*EXT)
|
||||
BOOST_REQUIRE_EQUAL( result.m_PartEntries[0].m_ExternalSwapGroup.size(), 1 );
|
||||
|
||||
BOOST_CHECK_EQUAL( result.m_PartEntries[0].m_ExternalSwapGroup[0].m_Name, "Group2" );
|
||||
BOOST_CHECK_EQUAL( result.m_PartEntries[0].m_ExternalSwapGroup[0].m_Name.value(), "Group2" );
|
||||
|
||||
std::vector<std::vector<long>>& extgates =
|
||||
result.m_PartEntries[0].m_ExternalSwapGroup[0].m_Gates;
|
||||
|
@ -345,7 +330,7 @@ BOOST_AUTO_TEST_CASE( ReadContent )
|
|||
BOOST_CHECK_EQUAL( extgates[1][1], 7 );
|
||||
|
||||
// Check part Definition
|
||||
BOOST_CHECK_EQUAL( result.m_PartEntries[0].m_PartDefinitionName, "<Definition name>" );
|
||||
BOOST_CHECK_EQUAL( result.m_PartEntries[0].m_PartDefinitionName.value(), "<Definition name>" );
|
||||
|
||||
// Check *NGS
|
||||
BOOST_CHECK_EQUAL( result.m_PartEntries[0].m_GateSwappingAllowed, false );
|
||||
|
@ -357,15 +342,15 @@ BOOST_AUTO_TEST_CASE( ReadContent )
|
|||
BOOST_CHECK_EQUAL( result.m_PartEntries[0].m_ComponentStem, "<Component name stem>" );
|
||||
|
||||
// Check *MXP
|
||||
BOOST_CHECK_EQUAL( result.m_PartEntries[0].m_MaxPinCount, 32 );
|
||||
KI_CHECK_OPT_EQUAL( result.m_PartEntries[0].m_MaxPinCount, 32 );
|
||||
|
||||
// Check *SPI
|
||||
BOOST_CHECK_EQUAL( result.m_PartEntries[0].m_SpicePartName, "<Part name>" );
|
||||
BOOST_CHECK_EQUAL( result.m_PartEntries[0].m_SpiceModel, "<Model> <Value>" );
|
||||
BOOST_CHECK_EQUAL( result.m_PartEntries[0].m_SpicePartName.value(), "<Part name>" );
|
||||
BOOST_CHECK_EQUAL( result.m_PartEntries[0].m_SpiceModel.value(), "<Model> <Value>" );
|
||||
|
||||
// Check *PAC
|
||||
BOOST_CHECK_EQUAL( result.m_PartEntries[0].m_AcceptancePartName, "<Part name>" );
|
||||
BOOST_CHECK_EQUAL( result.m_PartEntries[0].m_AcceptanceText, "<Acceptance Text>" );
|
||||
BOOST_CHECK_EQUAL( result.m_PartEntries[0].m_AcceptancePartName.value(), "<Part name>" );
|
||||
BOOST_CHECK_EQUAL( result.m_PartEntries[0].m_AcceptanceText.value(), "<Acceptance Text>" );
|
||||
|
||||
// Check user attributes (* lines)
|
||||
BOOST_REQUIRE_EQUAL( result.m_PartEntries[0].m_UserAttributes.size(), 2 );
|
||||
|
@ -461,10 +446,11 @@ BOOST_AUTO_TEST_CASE( ReadContent )
|
|||
while( itA != symbols.end() || itB != expectedSymbols.end() )
|
||||
{
|
||||
BOOST_TEST_CONTEXT( "With symbol = " << itB->m_SymbolName
|
||||
<< " Alternate = " << itB->m_SymbolAlternateName )
|
||||
<< " Alternate = "
|
||||
<< itB->m_SymbolAlternateName.value_or( "[nullopt]" ) )
|
||||
{
|
||||
BOOST_CHECK_EQUAL( itA->m_SymbolName, itB->m_SymbolName );
|
||||
BOOST_CHECK_EQUAL( itA->m_SymbolAlternateName, itB->m_SymbolAlternateName );
|
||||
KI_CHECK_OPT_EQUAL( itA->m_SymbolAlternateName, itB->m_SymbolAlternateName );
|
||||
|
||||
BOOST_REQUIRE_EQUAL( itA->m_Pins.size(), itB->m_Pins.size() );
|
||||
|
||||
|
@ -478,7 +464,7 @@ BOOST_AUTO_TEST_CASE( ReadContent )
|
|||
BOOST_CHECK_EQUAL( itPinsA->m_Identifier, itPinsB->m_Identifier );
|
||||
BOOST_CHECK( itPinsA->m_Position == itPinsB->m_Position );
|
||||
BOOST_CHECK( itPinsA->m_Type == itPinsB->m_Type );
|
||||
BOOST_CHECK_EQUAL( itPinsA->m_Loading, itPinsB->m_Loading );
|
||||
KI_CHECK_OPT_EQUAL( itPinsA->m_Loading, itPinsB->m_Loading );
|
||||
}
|
||||
|
||||
++itPinsA;
|
||||
|
@ -530,7 +516,7 @@ BOOST_AUTO_TEST_CASE( ReadContent )
|
|||
BOOST_CHECK_EQUAL( itPinsA->m_Identifier, itPinsB->m_Identifier );
|
||||
BOOST_CHECK( itPinsA->m_Position == itPinsB->m_Position );
|
||||
BOOST_CHECK( itPinsA->m_Type == itPinsB->m_Type );
|
||||
BOOST_CHECK_EQUAL( itPinsA->m_Loading, itPinsB->m_Loading );
|
||||
KI_CHECK_OPT_EQUAL( itPinsA->m_Loading, itPinsB->m_Loading );
|
||||
|
||||
++itPinsA;
|
||||
++itPinsB;
|
||||
|
@ -541,6 +527,6 @@ BOOST_AUTO_TEST_CASE( ReadContent )
|
|||
++itEntryB;
|
||||
}
|
||||
}
|
||||
*/
|
||||
|
||||
|
||||
BOOST_AUTO_TEST_SUITE_END()
|
||||
|
|
Loading…
Reference in New Issue