QA: Put UTILITY_PROGRAM in KI_TEST
Also expand some documentation of some other KI_TEST functions.
This commit is contained in:
parent
b94cf9d564
commit
e4b4230bcf
|
@ -32,7 +32,7 @@
|
||||||
* This is a pretty rudimentary way to register, but for a simple purpose,
|
* This is a pretty rudimentary way to register, but for a simple purpose,
|
||||||
* it's effective enough. When you have a new tool, add it to this list.
|
* it's effective enough. When you have a new tool, add it to this list.
|
||||||
*/
|
*/
|
||||||
const static std::vector<UTILITY_PROGRAM*> known_tools = {
|
const static std::vector<KI_TEST::UTILITY_PROGRAM*> known_tools = {
|
||||||
&coroutine_tool,
|
&coroutine_tool,
|
||||||
&io_benchmark_tool,
|
&io_benchmark_tool,
|
||||||
};
|
};
|
||||||
|
@ -40,7 +40,7 @@ const static std::vector<UTILITY_PROGRAM*> known_tools = {
|
||||||
|
|
||||||
int main( int argc, char** argv )
|
int main( int argc, char** argv )
|
||||||
{
|
{
|
||||||
COMBINED_UTILITY c_util( known_tools );
|
KI_TEST::COMBINED_UTILITY c_util( known_tools );
|
||||||
|
|
||||||
return c_util.HandleCommandLine( argc, argv );
|
return c_util.HandleCommandLine( argc, argv );
|
||||||
}
|
}
|
|
@ -5,6 +5,6 @@
|
||||||
#include <utility_program.h>
|
#include <utility_program.h>
|
||||||
|
|
||||||
/// A tool to test a simple coroutine
|
/// A tool to test a simple coroutine
|
||||||
extern UTILITY_PROGRAM coroutine_tool;
|
extern KI_TEST::UTILITY_PROGRAM coroutine_tool;
|
||||||
|
|
||||||
#endif
|
#endif
|
|
@ -114,7 +114,7 @@ static int coroutine_main_func( int argc, char** argv )
|
||||||
if( cmd_parsed_ok != 0 )
|
if( cmd_parsed_ok != 0 )
|
||||||
{
|
{
|
||||||
// Help and invalid input both stop here
|
// Help and invalid input both stop here
|
||||||
return ( cmd_parsed_ok == -1 ) ? RET_CODES::OK : RET_CODES::BAD_CMDLINE;
|
return ( cmd_parsed_ok == -1 ) ? KI_TEST::RET_CODES::OK : KI_TEST::RET_CODES::BAD_CMDLINE;
|
||||||
}
|
}
|
||||||
|
|
||||||
long count = 5;
|
long count = 5;
|
||||||
|
@ -124,14 +124,14 @@ static int coroutine_main_func( int argc, char** argv )
|
||||||
|
|
||||||
obj.Run();
|
obj.Run();
|
||||||
|
|
||||||
return RET_CODES::OK;
|
return KI_TEST::RET_CODES::OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Define the tool interface
|
* Define the tool interface
|
||||||
*/
|
*/
|
||||||
UTILITY_PROGRAM coroutine_tool = {
|
KI_TEST::UTILITY_PROGRAM coroutine_tool = {
|
||||||
"coroutine",
|
"coroutine",
|
||||||
"Test a simple coroutine",
|
"Test a simple coroutine",
|
||||||
coroutine_main_func,
|
coroutine_main_func,
|
||||||
|
|
|
@ -388,7 +388,7 @@ int io_benchmark_func( int argc, char* argv[] )
|
||||||
os << "Usage: " << argv[0] << " <FILE> <REPS> [" << getBenchFlags() << "]\n\n";
|
os << "Usage: " << argv[0] << " <FILE> <REPS> [" << getBenchFlags() << "]\n\n";
|
||||||
os << "Benchmarks:\n";
|
os << "Benchmarks:\n";
|
||||||
os << getBenchDescriptions();
|
os << getBenchDescriptions();
|
||||||
return RET_CODES::BAD_CMDLINE;
|
return KI_TEST::RET_CODES::BAD_CMDLINE;
|
||||||
}
|
}
|
||||||
|
|
||||||
wxFileName inFile( argv[1] );
|
wxFileName inFile( argv[1] );
|
||||||
|
@ -419,11 +419,11 @@ int io_benchmark_func( int argc, char* argv[] )
|
||||||
<< std::endl;;
|
<< std::endl;;
|
||||||
}
|
}
|
||||||
|
|
||||||
return RET_CODES::OK;
|
return KI_TEST::RET_CODES::OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
UTILITY_PROGRAM io_benchmark_tool = {
|
KI_TEST::UTILITY_PROGRAM io_benchmark_tool = {
|
||||||
"io_benchmark",
|
"io_benchmark",
|
||||||
"Benchmark various kinds of IO methods",
|
"Benchmark various kinds of IO methods",
|
||||||
io_benchmark_func,
|
io_benchmark_func,
|
||||||
|
|
|
@ -26,6 +26,6 @@
|
||||||
|
|
||||||
#include <utility_program.h>
|
#include <utility_program.h>
|
||||||
|
|
||||||
extern UTILITY_PROGRAM io_benchmark_tool;
|
extern KI_TEST::UTILITY_PROGRAM io_benchmark_tool;
|
||||||
|
|
||||||
#endif // IO_BENCHMARK_H
|
#endif // IO_BENCHMARK_H
|
|
@ -33,7 +33,7 @@
|
||||||
* This is a pretty rudimentary way to register, but for a simple purpose,
|
* This is a pretty rudimentary way to register, but for a simple purpose,
|
||||||
* it's effective enough. When you have a new tool, add it to this list.
|
* it's effective enough. When you have a new tool, add it to this list.
|
||||||
*/
|
*/
|
||||||
const static std::vector<UTILITY_PROGRAM*> known_tools = {
|
const static std::vector<KI_TEST::UTILITY_PROGRAM*> known_tools = {
|
||||||
&drc_tool,
|
&drc_tool,
|
||||||
&pcb_parser_tool,
|
&pcb_parser_tool,
|
||||||
&polygon_generator_tool,
|
&polygon_generator_tool,
|
||||||
|
@ -42,7 +42,7 @@ const static std::vector<UTILITY_PROGRAM*> known_tools = {
|
||||||
|
|
||||||
int main( int argc, char** argv )
|
int main( int argc, char** argv )
|
||||||
{
|
{
|
||||||
COMBINED_UTILITY c_util( known_tools );
|
KI_TEST::COMBINED_UTILITY c_util( known_tools );
|
||||||
|
|
||||||
return c_util.HandleCommandLine( argc, argv );
|
return c_util.HandleCommandLine( argc, argv );
|
||||||
}
|
}
|
|
@ -304,7 +304,7 @@ static const wxCmdLineEntryDesc g_cmdLineDesc[] = {
|
||||||
*/
|
*/
|
||||||
enum PARSER_RET_CODES
|
enum PARSER_RET_CODES
|
||||||
{
|
{
|
||||||
PARSE_FAILED = RET_CODES::TOOL_SPECIFIC,
|
PARSE_FAILED = KI_TEST::RET_CODES::TOOL_SPECIFIC,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -325,7 +325,7 @@ int drc_main_func( int argc, char** argv )
|
||||||
if( cmd_parsed_ok != 0 )
|
if( cmd_parsed_ok != 0 )
|
||||||
{
|
{
|
||||||
// Help and invalid input both stop here
|
// Help and invalid input both stop here
|
||||||
return ( cmd_parsed_ok == -1 ) ? RET_CODES::OK : RET_CODES::BAD_CMDLINE;
|
return ( cmd_parsed_ok == -1 ) ? KI_TEST::RET_CODES::OK : KI_TEST::RET_CODES::BAD_CMDLINE;
|
||||||
}
|
}
|
||||||
|
|
||||||
const bool verbose = cl_parser.Found( "verbose" );
|
const bool verbose = cl_parser.Found( "verbose" );
|
||||||
|
@ -380,14 +380,14 @@ int drc_main_func( int argc, char** argv )
|
||||||
runner.Execute( *board );
|
runner.Execute( *board );
|
||||||
}
|
}
|
||||||
|
|
||||||
return RET_CODES::OK;
|
return KI_TEST::RET_CODES::OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Define the tool interface
|
* Define the tool interface
|
||||||
*/
|
*/
|
||||||
UTILITY_PROGRAM drc_tool = {
|
KI_TEST::UTILITY_PROGRAM drc_tool = {
|
||||||
"drc",
|
"drc",
|
||||||
"Run selected DRC function on a PCB",
|
"Run selected DRC function on a PCB",
|
||||||
drc_main_func,
|
drc_main_func,
|
||||||
|
|
|
@ -27,6 +27,6 @@
|
||||||
#include <utility_program.h>
|
#include <utility_program.h>
|
||||||
|
|
||||||
/// A tool to run DRC tools on KiCad PCBs from the command line
|
/// A tool to run DRC tools on KiCad PCBs from the command line
|
||||||
extern UTILITY_PROGRAM drc_tool;
|
extern KI_TEST::UTILITY_PROGRAM drc_tool;
|
||||||
|
|
||||||
#endif //PCBNEW_TOOLS_DRC_TOOL_H
|
#endif //PCBNEW_TOOLS_DRC_TOOL_H
|
|
@ -95,7 +95,7 @@ static const wxCmdLineEntryDesc g_cmdLineDesc[] = {
|
||||||
|
|
||||||
enum PARSER_RET_CODES
|
enum PARSER_RET_CODES
|
||||||
{
|
{
|
||||||
PARSE_FAILED = RET_CODES::TOOL_SPECIFIC,
|
PARSE_FAILED = KI_TEST::RET_CODES::TOOL_SPECIFIC,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -117,7 +117,7 @@ int pcb_parser_main_func( int argc, char** argv )
|
||||||
if( cmd_parsed_ok != 0 )
|
if( cmd_parsed_ok != 0 )
|
||||||
{
|
{
|
||||||
// Help and invalid input both stop here
|
// Help and invalid input both stop here
|
||||||
return ( cmd_parsed_ok == -1 ) ? RET_CODES::OK : RET_CODES::BAD_CMDLINE;
|
return ( cmd_parsed_ok == -1 ) ? KI_TEST::RET_CODES::OK : KI_TEST::RET_CODES::BAD_CMDLINE;
|
||||||
}
|
}
|
||||||
|
|
||||||
const bool verbose = cl_parser.Found( "verbose" );
|
const bool verbose = cl_parser.Found( "verbose" );
|
||||||
|
@ -157,14 +157,14 @@ int pcb_parser_main_func( int argc, char** argv )
|
||||||
if( !ok )
|
if( !ok )
|
||||||
return PARSER_RET_CODES::PARSE_FAILED;
|
return PARSER_RET_CODES::PARSE_FAILED;
|
||||||
|
|
||||||
return RET_CODES::OK;
|
return KI_TEST::RET_CODES::OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Define the tool interface
|
* Define the tool interface
|
||||||
*/
|
*/
|
||||||
UTILITY_PROGRAM pcb_parser_tool = {
|
KI_TEST::UTILITY_PROGRAM pcb_parser_tool = {
|
||||||
"pcb_parser",
|
"pcb_parser",
|
||||||
"Parse a KiCad PCB file",
|
"Parse a KiCad PCB file",
|
||||||
pcb_parser_main_func,
|
pcb_parser_main_func,
|
||||||
|
|
|
@ -27,6 +27,6 @@
|
||||||
#include <utility_program.h>
|
#include <utility_program.h>
|
||||||
|
|
||||||
/// A tool to parse kicad PCBs from the command line
|
/// A tool to parse kicad PCBs from the command line
|
||||||
extern UTILITY_PROGRAM pcb_parser_tool;
|
extern KI_TEST::UTILITY_PROGRAM pcb_parser_tool;
|
||||||
|
|
||||||
#endif //PCBNEW_TOOLS_PCB_PARSER_UTILITY_H
|
#endif //PCBNEW_TOOLS_PCB_PARSER_UTILITY_H
|
|
@ -118,7 +118,7 @@ int polygon_gererator_main( int argc, char* argv[] )
|
||||||
/*
|
/*
|
||||||
* Define the tool interface
|
* Define the tool interface
|
||||||
*/
|
*/
|
||||||
UTILITY_PROGRAM polygon_generator_tool = {
|
KI_TEST::UTILITY_PROGRAM polygon_generator_tool = {
|
||||||
"polygon_generator",
|
"polygon_generator",
|
||||||
"Dump board geometry as a set of polygons",
|
"Dump board geometry as a set of polygons",
|
||||||
polygon_gererator_main,
|
polygon_gererator_main,
|
||||||
|
|
|
@ -27,6 +27,6 @@
|
||||||
#include <utility_program.h>
|
#include <utility_program.h>
|
||||||
|
|
||||||
/// A tool to parse kicad PCBs from the command line
|
/// A tool to parse kicad PCBs from the command line
|
||||||
extern UTILITY_PROGRAM polygon_generator_tool;
|
extern KI_TEST::UTILITY_PROGRAM polygon_generator_tool;
|
||||||
|
|
||||||
#endif //PCBNEW_TOOLS_POLYGON_GENERATOR_UTILITY_H
|
#endif //PCBNEW_TOOLS_POLYGON_GENERATOR_UTILITY_H
|
|
@ -24,15 +24,14 @@
|
||||||
|
|
||||||
#include <wx/msgout.h>
|
#include <wx/msgout.h>
|
||||||
|
|
||||||
|
namespace KI_TEST
|
||||||
|
{
|
||||||
|
|
||||||
COMBINED_UTILITY::COMBINED_UTILITY( const UTIL_LIST& aSubUtils ) : m_subUtils( aSubUtils )
|
COMBINED_UTILITY::COMBINED_UTILITY( const UTIL_LIST& aSubUtils ) : m_subUtils( aSubUtils )
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Print the names and descriptions of the registered tools
|
|
||||||
*/
|
|
||||||
void COMBINED_UTILITY::showSubUtilityList( std::ostream& os ) const
|
void COMBINED_UTILITY::showSubUtilityList( std::ostream& os ) const
|
||||||
{
|
{
|
||||||
for( const auto& tool : m_subUtils )
|
for( const auto& tool : m_subUtils )
|
||||||
|
@ -42,11 +41,6 @@ void COMBINED_UTILITY::showSubUtilityList( std::ostream& os ) const
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get the utility program that matches a tool name
|
|
||||||
* @param aName the name to look for
|
|
||||||
* @return the tool function
|
|
||||||
*/
|
|
||||||
UTILITY_PROGRAM::FUNC* COMBINED_UTILITY::findSubUtility( const std::string& aName ) const
|
UTILITY_PROGRAM::FUNC* COMBINED_UTILITY::findSubUtility( const std::string& aName ) const
|
||||||
{
|
{
|
||||||
for( const auto& tool : m_subUtils )
|
for( const auto& tool : m_subUtils )
|
||||||
|
@ -113,3 +107,5 @@ int COMBINED_UTILITY::HandleCommandLine( int argc, char** argv ) const
|
||||||
// pass on the rest of the commands
|
// pass on the rest of the commands
|
||||||
return ( *func )( argc - 1, argv + 1 );
|
return ( *func )( argc - 1, argv + 1 );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
} // namespace KI_TEST
|
|
@ -29,6 +29,9 @@
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
|
namespace KI_TEST
|
||||||
|
{
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return codes for tools
|
* Return codes for tools
|
||||||
*/
|
*/
|
||||||
|
@ -127,4 +130,6 @@ private:
|
||||||
const UTIL_LIST& m_subUtils;
|
const UTIL_LIST& m_subUtils;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
} // namespace KI_TEST
|
||||||
|
|
||||||
#endif // UTILITY_PROGRAM_H
|
#endif // UTILITY_PROGRAM_H
|
|
@ -80,6 +80,29 @@
|
||||||
|
|
||||||
namespace KI_TEST
|
namespace KI_TEST
|
||||||
{
|
{
|
||||||
|
|
||||||
|
template <typename EXP_CONT> using EXP_OBJ = typename EXP_CONT::value_type;
|
||||||
|
template <typename FOUND_CONT> using FOUND_OBJ = typename FOUND_CONT::value_type;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A match predicate: check that a "found" object is equivalent to or represents
|
||||||
|
* an "expected" object, perhaps of a different type.
|
||||||
|
*
|
||||||
|
* Exactly what "equivalent to" means depends heavily on the context and what
|
||||||
|
* is care about. For example, if you only care about a #MODULE's refdes,
|
||||||
|
* std::string is sufficient to indicate a "match".
|
||||||
|
*
|
||||||
|
* This can be used, for example, for checking a set of results without having
|
||||||
|
* to instantiate a full result object for checking by equality.
|
||||||
|
*
|
||||||
|
* @tparam EXP_OBJ the "expected" object type
|
||||||
|
* @tparam FOUND_OBJ the "found" object type
|
||||||
|
*
|
||||||
|
* @return true if the "found" object represents the "expected" object
|
||||||
|
*/
|
||||||
|
template <typename EXP_OBJ, typename FOUND_OBJ>
|
||||||
|
using MATCH_PRED = std::function<bool( const EXP_OBJ&, const FOUND_OBJ& )>;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Check that a container of "found" objects matches a container of "expected"
|
* Check that a container of "found" objects matches a container of "expected"
|
||||||
* objects. This means that:
|
* objects. This means that:
|
||||||
|
@ -91,7 +114,7 @@ namespace KI_TEST
|
||||||
* and a function to check if a given "found" object corresponds to a given
|
* and a function to check if a given "found" object corresponds to a given
|
||||||
* "expected object". Conditions:
|
* "expected object". Conditions:
|
||||||
*
|
*
|
||||||
* * The expected object type needs operator<<
|
* * The expected object type needs `operator<<` (for logging)
|
||||||
* * The expected object container does not contain multiple references to the
|
* * The expected object container does not contain multiple references to the
|
||||||
* same object.
|
* same object.
|
||||||
* * Identical values are also can't be present as the predicate can't tell which
|
* * Identical values are also can't be present as the predicate can't tell which
|
||||||
|
@ -105,16 +128,15 @@ namespace KI_TEST
|
||||||
* lists and checking element-by-element matches. However, it can tell you
|
* lists and checking element-by-element matches. However, it can tell you
|
||||||
* exactly which objects are problematic, as well as a simple go/no-go.
|
* exactly which objects are problematic, as well as a simple go/no-go.
|
||||||
*
|
*
|
||||||
|
* When you have two containers of identical types (or you have a suitable
|
||||||
|
* `operator==`) and ordering is important, you can use `BOOST_CHECK_EQUAL_COLLECTIONS`
|
||||||
|
*
|
||||||
*@param aExpected a container of "expected" items, usually from a test case
|
*@param aExpected a container of "expected" items, usually from a test case
|
||||||
*@param aMatched a container of "found" items, usually the result of some
|
*@param aMatched a container of "found" items, usually the result of some
|
||||||
* routine under test
|
* routine under test
|
||||||
*@param aMatchPredicate a predicate that determines if a given "found" object
|
*@param aMatchPredicate a predicate that determines if a given "found" object
|
||||||
* matches a given "expected" object.
|
* matches a given "expected" object.
|
||||||
*/
|
*/
|
||||||
template <typename EXP_CONT> using EXP_OBJ = typename EXP_CONT::value_type;
|
|
||||||
template <typename FOUND_CONT> using FOUND_OBJ = typename FOUND_CONT::value_type;
|
|
||||||
template <typename EXP_OBJ, typename FOUND_OBJ>
|
|
||||||
using MATCH_PRED = std::function<bool( const EXP_OBJ&, const FOUND_OBJ& )>;
|
|
||||||
template <typename EXP_CONT, typename FOUND_CONT, typename MATCH_PRED>
|
template <typename EXP_CONT, typename FOUND_CONT, typename MATCH_PRED>
|
||||||
void CheckUnorderedMatches(
|
void CheckUnorderedMatches(
|
||||||
const EXP_CONT& aExpected, const FOUND_CONT& aFound, MATCH_PRED aMatchPredicate )
|
const EXP_CONT& aExpected, const FOUND_CONT& aFound, MATCH_PRED aMatchPredicate )
|
||||||
|
|
Loading…
Reference in New Issue