Skip to content

Commit

Permalink
Fix nasa#1135, add bitmask assert macros
Browse files Browse the repository at this point in the history
Add a pair of macros that can confirm a value has bits set or
does not have bits set.  By using bitmask-aware macros, the logged
information can include both the raw/actual value as well as the
specific bits being tested.
  • Loading branch information
jphickey committed Aug 25, 2021
1 parent 2cd118e commit e24735c
Show file tree
Hide file tree
Showing 2 changed files with 40 additions and 8 deletions.
36 changes: 28 additions & 8 deletions ut_assert/inc/utassert.h
Original file line number Diff line number Diff line change
Expand Up @@ -81,14 +81,16 @@ typedef enum
*/
typedef enum
{
UtAssert_Compare_NONE, /**< invalid/not used, always false */
UtAssert_Compare_EQ, /**< actual equals reference value */
UtAssert_Compare_NEQ, /**< actual does not non equal reference value */
UtAssert_Compare_LT, /**< actual less than reference (exclusive) */
UtAssert_Compare_GT, /**< actual greater than reference (exclusive) */
UtAssert_Compare_LTEQ, /**< actual less than or equal to reference (inclusive) */
UtAssert_Compare_GTEQ, /**< actual greater than reference (inclusive) */
UtAssert_Compare_MAX /**< placeholder, not used */
UtAssert_Compare_NONE, /**< invalid/not used, always false */
UtAssert_Compare_EQ, /**< actual equals reference value */
UtAssert_Compare_NEQ, /**< actual does not non equal reference value */
UtAssert_Compare_LT, /**< actual less than reference (exclusive) */
UtAssert_Compare_GT, /**< actual greater than reference (exclusive) */
UtAssert_Compare_LTEQ, /**< actual less than or equal to reference (inclusive) */
UtAssert_Compare_GTEQ, /**< actual greater than reference (inclusive) */
UtAssert_Compare_BITMASK_SET, /**< actual equals reference value */
UtAssert_Compare_BITMASK_UNSET, /**< actual equals reference value */
UtAssert_Compare_MAX /**< placeholder, not used */
} UtAssert_Compare_t;

/**
Expand Down Expand Up @@ -404,6 +406,24 @@ typedef struct
UtAssert_GenericUnsignedCompare((uint32)(expr), UtAssert_Compare_GT, (uint32)(ref), UtAssert_Radix_DECIMAL, \
__FILE__, __LINE__, "", #expr, #ref)

/**
* \brief Macro for checking that bits in a bit field are set
*
* Test Passes if all the bits specified in "mask" are set in "rawval"
*/
#define UtAssert_BITMASK_SET(rawval, mask) \
UtAssert_GenericUnsignedCompare((uint32)(rawval), UtAssert_Compare_BITMASK_SET, (uint32)(mask), \
UtAssert_Radix_HEX, __FILE__, __LINE__, "", #rawval, #mask)

/**
* \brief Macro for checking that bits in a bit field are unset
*
* Test Passes if none of the bits specified in "mask" are set in "rawval"
*/
#define UtAssert_BITMASK_UNSET(rawval, mask) \
UtAssert_GenericUnsignedCompare((uint32)(rawval), UtAssert_Compare_BITMASK_UNSET, (uint32)(mask), \
UtAssert_Radix_HEX, __FILE__, __LINE__, "", #rawval, #mask)

/**
* \brief Macro for logging calls to a "void" function
*
Expand Down
12 changes: 12 additions & 0 deletions ut_assert/src/utassert.c
Original file line number Diff line number Diff line change
Expand Up @@ -336,6 +336,12 @@ const char *UtAssert_GetOpText(UtAssert_Compare_t CompareType)
case UtAssert_Compare_GTEQ: /* actual greater than reference (inclusive) */
OpText = ">=";
break;
case UtAssert_Compare_BITMASK_SET: /* bit(s) in reference are set in actual */
OpText = "&";
break;
case UtAssert_Compare_BITMASK_UNSET: /* bit(s) in reference are not set in actual */
OpText = "&~";
break;
default: /* should never happen */
OpText = "??";
break;
Expand Down Expand Up @@ -371,6 +377,12 @@ bool UtAssert_GenericUnsignedCompare(unsigned long ActualValue, UtAssert_Compare
case UtAssert_Compare_GTEQ: /* actual greater than reference (inclusive) */
Result = (ActualValue >= ReferenceValue);
break;
case UtAssert_Compare_BITMASK_SET: /* bit(s) in reference are set in actual */
Result = (ActualValue & ReferenceValue) == ReferenceValue;
break;
case UtAssert_Compare_BITMASK_UNSET: /* bit(s) in reference are not set in actual */
Result = (ActualValue & ReferenceValue) == 0;
break;
default: /* should never happen */
Result = false;
break;
Expand Down

0 comments on commit e24735c

Please sign in to comment.