mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-20 18:08:24 +08:00
Always use std::function for self-tests
Now that there is a register_test variant that accepts std::function, it seems to me that the 'selftest' struct and accompanying code is obsolete -- simply always using std::function is simpler. This patch implements this idea.
This commit is contained in:
@ -29,35 +29,7 @@ namespace selftests
|
|||||||
the order of tests stable and easily looking up whether a test name
|
the order of tests stable and easily looking up whether a test name
|
||||||
exists. */
|
exists. */
|
||||||
|
|
||||||
static std::map<std::string, std::unique_ptr<selftest>> tests;
|
static std::map<std::string, std::function<void(void)>> tests;
|
||||||
|
|
||||||
/* See selftest.h. */
|
|
||||||
|
|
||||||
void
|
|
||||||
register_test (const std::string &name, selftest *test)
|
|
||||||
{
|
|
||||||
/* Check that no test with this name already exist. */
|
|
||||||
gdb_assert (tests.find (name) == tests.end ());
|
|
||||||
|
|
||||||
tests[name] = std::unique_ptr<selftest> (test);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* A selftest that calls the test function without arguments. */
|
|
||||||
|
|
||||||
struct lambda_selftest : public selftest
|
|
||||||
{
|
|
||||||
lambda_selftest (std::function<void(void)> function_)
|
|
||||||
{
|
|
||||||
function = function_;
|
|
||||||
}
|
|
||||||
|
|
||||||
void operator() () const override
|
|
||||||
{
|
|
||||||
function ();
|
|
||||||
}
|
|
||||||
|
|
||||||
std::function<void(void)> function;
|
|
||||||
};
|
|
||||||
|
|
||||||
/* See selftest.h. */
|
/* See selftest.h. */
|
||||||
|
|
||||||
@ -65,7 +37,10 @@ void
|
|||||||
register_test (const std::string &name,
|
register_test (const std::string &name,
|
||||||
std::function<void(void)> function)
|
std::function<void(void)> function)
|
||||||
{
|
{
|
||||||
register_test (name, new lambda_selftest (function));
|
/* Check that no test with this name already exist. */
|
||||||
|
gdb_assert (tests.find (name) == tests.end ());
|
||||||
|
|
||||||
|
tests[name] = function;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* See selftest.h. */
|
/* See selftest.h. */
|
||||||
@ -91,7 +66,7 @@ run_tests (gdb::array_view<const char *const> filters, bool verbose)
|
|||||||
for (const auto &pair : tests)
|
for (const auto &pair : tests)
|
||||||
{
|
{
|
||||||
const std::string &name = pair.first;
|
const std::string &name = pair.first;
|
||||||
const std::unique_ptr<selftest> &test = pair.second;
|
const auto &test = pair.second;
|
||||||
bool run = false;
|
bool run = false;
|
||||||
|
|
||||||
if (filters.empty ())
|
if (filters.empty ())
|
||||||
@ -112,7 +87,7 @@ run_tests (gdb::array_view<const char *const> filters, bool verbose)
|
|||||||
{
|
{
|
||||||
debug_printf (_("Running selftest %s.\n"), name.c_str ());
|
debug_printf (_("Running selftest %s.\n"), name.c_str ());
|
||||||
++ran;
|
++ran;
|
||||||
(*test) ();
|
test ();
|
||||||
}
|
}
|
||||||
catch (const gdb_exception_error &ex)
|
catch (const gdb_exception_error &ex)
|
||||||
{
|
{
|
||||||
|
@ -24,29 +24,15 @@
|
|||||||
/* A test is just a function that does some checks and throws an
|
/* A test is just a function that does some checks and throws an
|
||||||
exception if something has gone wrong. */
|
exception if something has gone wrong. */
|
||||||
|
|
||||||
typedef void self_test_function (void);
|
|
||||||
|
|
||||||
namespace selftests
|
namespace selftests
|
||||||
{
|
{
|
||||||
|
|
||||||
/* Interface for the various kinds of selftests. */
|
|
||||||
|
|
||||||
struct selftest
|
|
||||||
{
|
|
||||||
virtual ~selftest () = default;
|
|
||||||
virtual void operator() () const = 0;
|
|
||||||
};
|
|
||||||
|
|
||||||
/* True if selftest should run verbosely. */
|
/* True if selftest should run verbosely. */
|
||||||
|
|
||||||
extern bool run_verbose ();
|
extern bool run_verbose ();
|
||||||
|
|
||||||
/* Register a new self-test. */
|
/* Register a new self-test. */
|
||||||
|
|
||||||
extern void register_test (const std::string &name, selftest *test);
|
|
||||||
|
|
||||||
/* Register a new self-test. */
|
|
||||||
|
|
||||||
extern void register_test (const std::string &name,
|
extern void register_test (const std::string &name,
|
||||||
std::function<void(void)> function);
|
std::function<void(void)> function);
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user