/* * File: tests/hpptest.hpp * Purpose: HPP Test wrapper for the OCL library. * Author: Amlal El Mahrouss (amlal@nekernel.org) * Copyright 2025, Amlal El Mahrouss, licensed under the Boost Software License. */ #pragma once #include #include namespace ocl::hpptest { /// @brief Standard termination error handler, called when a test fails. struct standard_terminate final { template static void error() noexcept { ocl::io::print("standard_terminate::error, terminating...\n"); if (stop_execution) std::terminate(); } }; struct posix_terminate final { template 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 consteval inline void must_pass() { #ifdef OCL_HPPTEST OCL_HPPTEST_ASSERT(expr); #endif // _WIN32 } template inline void must_pass(condition_type cond) noexcept { if (cond != expect) { on_fail::template error(); } } template inline void must_pass(errno_t ern) noexcept { if (ern != expect) { posix_terminate::error(ern); } } #ifdef _WIN32 struct win32_terminate final { template static void error(HRESULT err) noexcept { ocl::io::print("win32_terminate::error: expected=S_OK, got=", err, "\n"); if (stop_execution) std::terminate(); } }; template inline void must_pass(HRESULT hr) noexcept { if (hr != expect) { win32_terminate::error(hr); } } #endif // _WIN32 } // namespace ocl::hpptest