/*! * @file xasserts.h * @brief Extended asserts for use with CUnit * @details * Project: * Subsystem: * Module: * Code: GNU-C * * @date 08.03.2017 * @author Martin Winkler */ #ifndef XASSERTS_H_ #define XASSERTS_H_ #include "CUnit/TestRun.h" /*! * @brief Assert a failed test with variable name and value * @param Msg Custom string displayed before variable * @param Name Name of the variable to display * @param Format printf format string for variable (e.g. "%u", "0x%.2X", ...) */ #define CU_FAIL_OUTPUT(Msg,Name,Format)\ {\ char aErrMsg[255];\ sprintf(aErrMsg, "CU_FAIL_OUTPUT - %s%s: "Format, Msg ,#Name, Name);\ CU_assertImplementation(CU_FALSE, __LINE__, aErrMsg, __FILE__, "", CU_FALSE);\ } /*! * @brief Assert a failed test only with variable value and custom text * @param Msg Custom string displayed before variable * @param Name Name of the variable to display * @param Format printf format string for variable (e.g. "%u", "0x%.2X", ...) */ #define CU_FAIL_OUTPUT_LESS(Msg,Name,Format)\ {\ char aErrMsg[255];\ sprintf(aErrMsg, "CU_FAIL_OUTPUT - %s"Format, Msg, Name);\ CU_assertImplementation(CU_FALSE, __LINE__, aErrMsg, __FILE__, "", CU_FALSE);\ } /*! * @brief Compare inputs and output actual value in error message * @attention Do NOT place function calls as parameter actual, as it will be executed twice */ #define CU_ASSERT_EQUAL_OUTPUT(actual, expected, format)\ {\ char aErrMsg[255];\ sprintf(aErrMsg, ("CU_ASSERT_EQUAL(" #actual "," #expected ") "format), actual);\ CU_assertImplementation(((actual) == (expected)), __LINE__, aErrMsg, __FILE__, "", CU_FALSE);\ } /*! * @brief Assert definition of macro for array check. * @param pData Pointer on test data * @param pExpected_data Pointer on expected test data * @param u32Size Amount of array elements * * Macro checks if all array members in the array range defined by parameter size are equal. * If not an error message is generated. */ #define CU_ASSERT_ARRAY_CHECK(Name, pData, pExpected_data, u32Size)\ {\ uint8_t bError = 0;\ uint32_t u32MemCnt;\ char aErrMsg[255];\ for (u32MemCnt = 0; u32MemCnt < u32Size; u32MemCnt++)\ {\ if (*(pData + u32MemCnt) != *(pExpected_data + u32MemCnt))\ {\ bError = 1;\ sprintf(aErrMsg, "CU_ASSERT_ARRAY_CHECK - %s[%d], act: 0x%.2X, exp: 0x%.2X", \ Name, u32MemCnt, *(pData + u32MemCnt), *(pExpected_data + u32MemCnt));\ CU_assertImplementation(CU_FALSE, __LINE__, aErrMsg, __FILE__, "", CU_FALSE);\ break;\ }\ }\ if (0 == bError)\ {\ CU_ASSERT(1);\ }\ } /*! * @brief Assert definition of macro for memory check. * @param pData Pointer on test data * @param pExpected_data Pointer on expected test data * @param u32Size Memory size in bytes * * Macro checks if all bytes in the memory range defined by parameter size are equal. * If not an error message is generated. */ #define CU_ASSERT_MEMORY_CHECK(Name, pData, pExpected_data, u32Size)\ {\ uint8_t bError = 0;\ uint32_t u32MemCnt;\ char aErrMsg[255];\ for (u32MemCnt = 0; u32MemCnt < u32Size; u32MemCnt++)\ {\ if (*((uint8_t*)pData + u32MemCnt) != *((uint8_t*)pExpected_data + u32MemCnt))\ {\ bError = 1;\ sprintf(aErrMsg, "CU_ASSERT_MEMORY_CHECK - %s, Offset: %d, act: 0x%.2X, exp: 0x%.2X", \ Name, u32MemCnt, *((uint8_t*)pData + u32MemCnt), *((uint8_t*)pExpected_data + u32MemCnt));\ CU_assertImplementation(CU_FALSE, __LINE__, aErrMsg, __FILE__, "", CU_FALSE);\ break;\ }\ }\ if (0 == bError)\ {\ CU_ASSERT(1);\ }\ } #endif /* XASSERTS_H_ */