Add relative error closedness check in tests
This commit is contained in:
parent
7040faecd4
commit
790deb19ff
1 changed files with 11 additions and 0 deletions
|
|
@ -65,6 +65,16 @@ namespace psemek::test
|
|||
context & ctx_;
|
||||
};
|
||||
|
||||
template <typename T>
|
||||
bool check_relative_error(T const & x1, T const & x2, T const & error)
|
||||
{
|
||||
T m = std::min(std::abs(x1), std::abs(x2));
|
||||
T M = std::max(std::abs(x1), std::abs(x2));
|
||||
if (m == T{0})
|
||||
return M < error;
|
||||
return std::abs(x1 - x2) < M * error;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
|
|
@ -103,6 +113,7 @@ void name ## _test_case ([[maybe_unused]] ::psemek::test::context & _ctx)
|
|||
|
||||
#define expect_small(expr1, expr2) if (std::abs((expr1)) > (expr2)) psemek_test_fail("abs(", #expr1, ") (", std::abs((expr1)), ") >= ", #expr2, " (", (expr2), ")")
|
||||
#define expect_close(expr1, expr2, expr3) if (std::abs((expr1) - (expr2)) > (expr3)) psemek_test_fail(#expr1, " (", (expr1), ") and ", #expr2, " (", (expr2), ") differ by more than ", (expr3))
|
||||
#define expect_close_rel(expr1, expr2, expr3) if (!::psemek::test::check_relative_error((expr1), (expr2), (expr3))) psemek_test_fail(#expr1, " (", (expr1), ") and ", #expr2, " (", (expr2), ") relative error is more than ", (expr3))
|
||||
|
||||
#define expect_throw(expr, type) do { bool thrown = false; try { (void)(expr); } catch (type const &) { thrown = true; } if (!thrown) psemek_test_fail(#expr, " didn't throw ", #type); } while (false)
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue