diff options
| author | Amlal El Mahrouss <amlal@nekernel.org> | 2025-11-22 18:32:34 +0100 |
|---|---|---|
| committer | Amlal El Mahrouss <amlal@nekernel.org> | 2025-11-22 18:42:24 +0100 |
| commit | f575de631ae39366d334167436a3fd540e45c068 (patch) | |
| tree | 89bf2b2e3f00dc2f8982305a54a92afa3030c72c /dev/lib/tests | |
| parent | 10b3e4fbd0779833d3f2c7cff3c1d802664fa358 (diff) | |
feat: hpptest: new 'standard_terminate' structure from hpptest.hpp
feat: hpptest: new overload of must_pass for Generic, POSIX, and Win32.
Signed-off-by: Amlal El Mahrouss <amlal@nekernel.org>
Diffstat (limited to 'dev/lib/tests')
| -rw-r--r-- | dev/lib/tests/hpptest.hpp | 71 |
1 files changed, 70 insertions, 1 deletions
diff --git a/dev/lib/tests/hpptest.hpp b/dev/lib/tests/hpptest.hpp index 05f985a..a3136b7 100644 --- a/dev/lib/tests/hpptest.hpp +++ b/dev/lib/tests/hpptest.hpp @@ -7,8 +7,36 @@ #pragma once +#include <lib/io/print.hpp> +#include <cstdlib> + namespace ocl::hpptest { + /// @brief Standard termination error handler, called when a test fails. + struct standard_terminate final + { + template <bool stop_execution = true> + static void error() noexcept + { + ocl::io::print("standard_terminate::error, terminating...\n"); + + if (stop_execution) + std::terminate(); + } + }; + + struct posix_terminate final + { + template <bool stop_execution = true, errno_t args> + static void error(errno_t err) noexcept + { + ocl::io::print("posix_terminate::error: expected=", strerror(args), ", got=", strerror(err), "\n"); + + if (stop_execution) + std::terminate(); + } + }; + typedef bool condition_type; template <condition_type expr = true> @@ -16,6 +44,47 @@ namespace ocl::hpptest { #ifdef OCL_HPPTEST OCL_HPPTEST_ASSERT(expr); -#endif +#endif // _WIN32 + } + + template <condition_type expect, typename on_fail> + inline void must_pass(condition_type cond) noexcept + { + if (cond != expect) + { + on_fail::template error<true>(); + } + } + + template <errno_t expect = 0> + inline void must_pass(errno_t ern) noexcept + { + if (ern != expect) + { + posix_terminate::error<true, expect>(ern); + } + } + +#ifdef _WIN32 + struct win32_terminate final + { + template <bool stop_execution = false> + static void error(HRESULT err) noexcept + { + ocl::io::print("win32_terminate::error: expected=S_OK, got=", err, "\n"); + + if (stop_execution) + std::terminate(); + } + }; + + template <HRESULT expect = S_OK> + inline void must_pass(HRESULT hr) noexcept + { + if (hr != expect) + { + win32_terminate::error<true>(hr); + } } +#endif // _WIN32 } // namespace ocl::hpptest |
