diff options
Diffstat (limited to 'src/lib/netlist/plib/ptests.h')
-rw-r--r-- | src/lib/netlist/plib/ptests.h | 50 |
1 files changed, 35 insertions, 15 deletions
diff --git a/src/lib/netlist/plib/ptests.h b/src/lib/netlist/plib/ptests.h index 1f4bbd5e866..7369e74a20d 100644 --- a/src/lib/netlist/plib/ptests.h +++ b/src/lib/netlist/plib/ptests.h @@ -14,20 +14,27 @@ #include <vector> #include <iostream> #include <functional> +#include <exception> -#define EXPECT_EQ(exp1, exp2) PINT_EXPECT(eq, exp1, exp2) -#define EXPECT_NE(exp1, exp2) PINT_EXPECT(ne, exp1, exp2) -#define EXPECT_GT(exp1, exp2) PINT_EXPECT(gt, exp1, exp2) -#define EXPECT_LT(exp1, exp2) PINT_EXPECT(lt, exp1, exp2) -#define EXPECT_GE(exp1, exp2) PINT_EXPECT(ge, exp1, exp2) -#define EXPECT_LE(exp1, exp2) PINT_EXPECT(le, exp1, exp2) +#if defined(__clang__) +#pragma clang diagnostic ignored "-Wglobal-constructors" +#endif -#define EXPECT_TRUE(exp1) PINT_EXPECT(eq, exp1, true) -#define EXPECT_FALSE(exp1) PINT_EXPECT(eq, exp1, false) +#define PEXPECT_EQ(exp1, exp2) PINT_EXPECT(eq, exp1, exp2) +#define PEXPECT_NE(exp1, exp2) PINT_EXPECT(ne, exp1, exp2) +#define PEXPECT_GT(exp1, exp2) PINT_EXPECT(gt, exp1, exp2) +#define PEXPECT_LT(exp1, exp2) PINT_EXPECT(lt, exp1, exp2) +#define PEXPECT_GE(exp1, exp2) PINT_EXPECT(ge, exp1, exp2) +#define PEXPECT_LE(exp1, exp2) PINT_EXPECT(le, exp1, exp2) -#define TEST(name, desc) PINT_TEST(name, desc) -#define TEST_F(name, desc) PINT_TEST_F(name, desc, name) -#define RUN_ALL_TESTS() plib::testing::run_all_tests() +#define PEXPECT_TRUE(exp1) PINT_EXPECT(eq, exp1, true) +#define PEXPECT_FALSE(exp1) PINT_EXPECT(eq, exp1, false) + +#define PEXPECT_THROW(exp, excep) PINT_EXPECT_THROW(exp, excep) + +#define PTEST(name, desc) PINT_TEST(name, desc) +#define PTEST_F(name, desc) PINT_TEST_F(name, desc, name) +#define PRUN_ALL_TESTS() plib::testing::run_all_tests() #define PINT_TEST(name, desc) PINT_TEST_F(name, desc, plib::testing::Test) @@ -37,12 +44,22 @@ void desc (); \ void run() override { desc (); } \ }; \ - plib::testing::reg_entry<name ## _ ## desc> name ## _ ## desc ## _reg(#name, #desc); \ + extern const plib::testing::reg_entry<name ## _ ## desc> name ## _ ## desc ## _reg; \ + const plib::testing::reg_entry<name ## _ ## desc> name ## _ ## desc ## _reg(#name, #desc); \ void name ## _ ## desc :: desc () #define PINT_EXPECT(comp, exp1, exp2) \ if (!plib::testing::internal_assert(plib::testing::comp_ ## comp (), # exp1, # exp2, exp1, exp2)) \ - std::cout << __FILE__ << ":" << __LINE__ << ":1: error: test failed\n"; + std::cout << __FILE__ << ":" << __LINE__ << ":1: error: test failed\n" + +#define PINT_EXPECT_THROW(exp, excep) \ + if (const char *ptest_f = __FILE__) \ + { \ + try { exp; std::cout << ptest_f << ":" << __LINE__ << ":1: error: no " #excep " exception thrown\n";} \ + catch (excep &) { std::cout << "\tOK: got " #excep " for " # exp "\n";} \ + catch (std::exception &ptest_e) { std::cout << ptest_f << ":" << __LINE__ << ":1: error: unexpected exception thrown: " << ptest_e.what() << "\n"; } \ + catch (...) { std::cout << ptest_f << ":" << __LINE__ << ":1: error: unexpected exception thrown\n"; } \ + } else do {} while (0) namespace plib { @@ -67,7 +84,7 @@ namespace testing registry().push_back(this); } virtual ~reg_entry_base() = default; - virtual Test *create() { return nullptr; } + virtual Test *create() const { return nullptr; } std::string name; std::string desc; @@ -84,7 +101,7 @@ namespace testing { using reg_entry_base::reg_entry_base; - virtual Test *create() override { return new T(); } + virtual Test *create() const override { return new T(); } }; template <typename C, typename T1, typename T2> @@ -104,6 +121,9 @@ namespace testing static inline int run_all_tests() { + std::cout << "======================================\n"; + std::cout << "Running " << reg_entry_base::registry().size() << " tests\n"; + std::cout << "======================================\n"; for (auto &e : reg_entry_base::registry()) { std::cout << e->name << "::" << e->desc << ":\n"; |