aboutsummaryrefslogtreecommitdiff
path: root/gdbsupport/selftest.cc
diff options
context:
space:
mode:
authorLancelot SIX <lancelot.six@amd.com>2022-03-23 15:29:53 +0000
committerLancelot SIX <lancelot.six@amd.com>2022-04-19 09:12:42 +0100
commitc57207c15c4fa980263e6849d0e6472c33e647fc (patch)
tree5f84e945862557442b82ee973afb7db620117dd5 /gdbsupport/selftest.cc
parent2aaee75f81a130011c96a0ab38475dba894114c3 (diff)
downloadgdb-c57207c15c4fa980263e6849d0e6472c33e647fc.zip
gdb-c57207c15c4fa980263e6849d0e6472c33e647fc.tar.gz
gdb-c57207c15c4fa980263e6849d0e6472c33e647fc.tar.bz2
gdbsupport/selftest: Replace for_each_selftest with an iterator_range
Remove the callback-based selftests::for_each_selftest function and use an iterator_range instead. Also use this iterator range in run_tests so all iterations over the selftests are done in a consistent way. This will become useful in a later commit. Change-Id: I0b3a5349a7987fbcb0071f11c394e353df986583
Diffstat (limited to 'gdbsupport/selftest.cc')
-rw-r--r--gdbsupport/selftest.cc27
1 files changed, 12 insertions, 15 deletions
diff --git a/gdbsupport/selftest.cc b/gdbsupport/selftest.cc
index 466d7cfe..7077f11 100644
--- a/gdbsupport/selftest.cc
+++ b/gdbsupport/selftest.cc
@@ -20,16 +20,15 @@
#include "common-exceptions.h"
#include "common-debug.h"
#include "selftest.h"
-#include <map>
#include <functional>
namespace selftests
{
-/* All the tests that have been registered. Using an std::map allows keeping
+/* All the tests that have been registered. Using an std::set allows keeping
the order of tests stable and easily looking up whether a test name
exists. */
-static std::map<std::string, std::function<void(void)>> tests;
+static selftests_registry tests;
/* See selftest.h. */
@@ -38,9 +37,9 @@ register_test (const std::string &name,
std::function<void(void)> function)
{
/* Check that no test with this name already exist. */
- gdb_assert (tests.find (name) == tests.end ());
-
- tests[name] = function;
+ auto status = tests.emplace (name, std::move (function));
+ if (!status.second)
+ gdb_assert_not_reached ("Test already registered");
}
/* See selftest.h. */
@@ -63,10 +62,8 @@ run_tests (gdb::array_view<const char *const> filters, bool verbose)
int ran = 0, failed = 0;
run_verbose_ = verbose;
- for (const auto &pair : tests)
+ for (const auto &test : all_selftests ())
{
- const std::string &name = pair.first;
- const auto &test = pair.second;
bool run = false;
if (filters.empty ())
@@ -75,7 +72,7 @@ run_tests (gdb::array_view<const char *const> filters, bool verbose)
{
for (const char *filter : filters)
{
- if (name.find (filter) != std::string::npos)
+ if (test.name.find (filter) != std::string::npos)
run = true;
}
}
@@ -85,9 +82,9 @@ run_tests (gdb::array_view<const char *const> filters, bool verbose)
try
{
- debug_printf (_("Running selftest %s.\n"), name.c_str ());
+ debug_printf (_("Running selftest %s.\n"), test.name.c_str ());
++ran;
- test ();
+ test.test ();
}
catch (const gdb_exception_error &ex)
{
@@ -104,10 +101,10 @@ run_tests (gdb::array_view<const char *const> filters, bool verbose)
/* See selftest.h. */
-void for_each_selftest (for_each_selftest_ftype func)
+selftests_range
+all_selftests ()
{
- for (const auto &pair : tests)
- func (pair.first);
+ return selftests_range (tests.cbegin (), tests.cend ());
}
} // namespace selftests