#ifndef SDV_TEST_MACRO_H #define SDV_TEST_MACRO_H #include #include #include /** * @brief Namespace sdv_test */ namespace sdv_test { /** * @brief Enum for warning levels. */ enum EWarningLevel { WARNING_ENABLED, //) #define SDV_ASSERT_GT(val1, val2, level) \ HANDLE_WARNING_LEVEL(level, ASSERT_GT(val1, val2), val1, val2, >) #define SDV_EXPECT_GE(val1, val2, level) \ HANDLE_WARNING_LEVEL(level, EXPECT_GE(val1, val2), val1, val2, >=) #define SDV_ASSERT_GE(val1, val2, level) \ HANDLE_WARNING_LEVEL(level, ASSERT_GE(val1, val2), val1, val2, >=) #define SDV_EXPECT_STREQ(str1, str2, level) \ HANDLE_WARNING_LEVEL(level, EXPECT_STREQ((str1).c_str(), (str2).c_str()), str1, str2, ==) #define SDV_ASSERT_STREQ(str1, str2, level) \ HANDLE_WARNING_LEVEL(level, ASSERT_STREQ((str1).c_str(), (str2).c_str()), str1, str2, ==) #define SDV_EXPECT_STRNE(str1, str2, level) \ HANDLE_WARNING_LEVEL(level, EXPECT_STRNE(str1.c_str(), str2.c_str()), str1, str2, !=) #define SDV_ASSERT_STRNE(str1, str2, level) \ HANDLE_WARNING_LEVEL(level, ASSERT_STRNE(str1.c_str(), str2.c_str()), str1, str2, !=) #define SDV_EXPECT_STRCASEEQ(str1, str2, level) \ HANDLE_WARNING_LEVEL(level, EXPECT_STRCASEEQ((str1).c_str(), (str2).c_str()), str1, str2, ==) #define SDV_ASSERT_STRCASEEQ(str1, str2, level) \ HANDLE_WARNING_LEVEL(level, ASSERT_STRCASEEQ((str1).c_str(), (str2).c_str()), str1, str2, ==) #define SDV_EXPECT_STRCASENE(str1, str2, level) \ HANDLE_WARNING_LEVEL(level, EXPECT_STRCASENE((str1).c_str(), (str2).c_str()), str1, str2, !=) #define SDV_ASSERT_STRCASENE(str1, str2, level) \ HANDLE_WARNING_LEVEL(level, ASSERT_STRCASENE((str1).c_str(), (str2).c_str()), str1, str2, !=) /** * @brief Macro for equality check (==) with warning reporting for time critical tests. * @param[in] val1 The first value. * @param[in] val2 The second value. * @param[in] warningLevel The level of warning to display. */ #define SDV_EXPECT_EQ_WARN(val1, val2, warningLevel) \ do { \ auto expr1 = val1; \ auto expr2 = val2; \ sdv_test::ReportWarning((expr1) == (expr2), warningLevel, \ "Expected " #val1 " == " #val2 " (" #val1 "=" + std::to_string(expr1) + ", " #val2 "=" + std::to_string(expr2) + ")", \ __FILE__, __LINE__); \ } while (0) /** * @brief Macro for inequality check (!=) with warning reporting for time critical tests. * @param[in] val1 The first value. * @param[in] val2 The second value. * @param[in] warningLevel The level of warning to display. */ #define SDV_EXPECT_NE_WARN(val1, val2, warningLevel) \ do { \ auto expr1 = val1; \ auto expr2 = val2; \ sdv_test::ReportWarning((expr1) != (expr2), warningLevel, \ "Expected " #val1 " != " #val2 " (" #val1 "=" + std::to_string(expr1) + ", " #val2 "=" + std::to_string(expr2) + ")", \ __FILE__, __LINE__); \ } while (0) /** * @brief Macro for greater-than check (>) with warning reporting for time critical tests. * @param[in] val1 The first value. * @param[in] val2 The second value. * @param[in] warningLevel The level of warning to display. */ #define SDV_EXPECT_GT_WARN(val1, val2, warningLevel) \ do { \ auto expr1 = val1; \ auto expr2 = val2; \ sdv_test::ReportWarning((expr1) > (expr2), warningLevel, \ "Expected " #val1 " > " #val2 " (" #val1 "=" + std::to_string(expr1) + ", " #val2 "=" + std::to_string(expr2) + ")", \ __FILE__, __LINE__); \ } while (0) /** * @brief Macro for less-than check (<) with warning reporting for time critical tests. * @param[in] val1 The first value. * @param[in] val2 The second value. * @param[in] warningLevel The level of warning to display. */ #define SDV_EXPECT_LT_WARN(val1, val2, warningLevel) \ do { \ auto expr1 = val1; \ auto expr2 = val2; \ sdv_test::ReportWarning((expr1) < (expr2), warningLevel, \ "Expected " #val1 " < " #val2 " (" #val1 "=" + std::to_string(expr1) + ", " #val2 "=" + std::to_string(expr2) + ")", \ __FILE__, __LINE__); \ } while (0) /** * @brief Macro for greater-than-or-equal-to check (>=) with warning reporting for time critical tests. * @param[in] val1 The first value. * @param[in] val2 The second value. * @param[in] warningLevel The level of warning to display. */ #define SDV_EXPECT_GE_WARN(val1, val2, warningLevel) \ do { \ auto expr1 = val1; \ auto expr2 = val2; \ sdv_test::ReportWarning((expr1) >= (expr2), warningLevel, \ "Expected " #val1 " >= " #val2 " (" #val1 "=" + std::to_string(expr1) + ", " #val2 "=" + std::to_string(expr2) + ")", \ __FILE__, __LINE__); \ } while (0) /** * @brief Macro for less-than-or-equal-to check (<=) with warning reporting for time critical tests. * @param[in] val1 The first value. * @param[in] val2 The second value. * @param[in] warningLevel The level of warning to display. */ #define SDV_EXPECT_LE_WARN(val1, val2, warningLevel) \ do { \ auto expr1 = val1; \ auto expr2 = val2; \ sdv_test::ReportWarning((expr1) <= (expr2), warningLevel, \ "Expected " #val1 " <= " #val2 " (" #val1 "=" + std::to_string(expr1) + ", " #val2 "=" + std::to_string(expr2) + ")", \ __FILE__, __LINE__); \ } while (0) #endif // SDV_TEST_MACRO_H