diff --git a/shared/weston-assert.h b/shared/weston-assert.h index b934f57f..6e313dc1 100644 --- a/shared/weston-assert.h +++ b/shared/weston-assert.h @@ -30,6 +30,7 @@ #include #include #include +#include struct weston_compositor; @@ -110,3 +111,15 @@ do { \ #define weston_assert_str_eq(compositor, a, b) \ weston_assert_fn_(compositor, strcmp, a, b, const char *, "%s", ==) + +#define weston_assert_bit_is_set(compositor, value, bit) \ +({ \ + struct weston_compositor *ec = compositor; \ + uint64_t v = (value); \ + uint8_t b = (bit); \ + bool cond = (v >> b) & 1; \ + if (!cond) \ + custom_assert_fail_(ec, "%s:%u: Assertion failed! Bit %s (%u) of %s (0x%" PRIx64 ") is not set.\n", \ + __FILE__, __LINE__, #bit, b, #value, v); \ + cond; \ +}) diff --git a/tests/assert-test.c b/tests/assert-test.c index 73aa300e..ab776758 100644 --- a/tests/assert-test.c +++ b/tests/assert-test.c @@ -126,4 +126,10 @@ TEST(asserts) abort_if_not(ret); ret = weston_assert_my_type_lt(compositor, &a, &b); abort_if_not(ret == false); + + uint32_t bitfield = 0xffff; + ret = weston_assert_bit_is_set(compositor, bitfield, 2); + abort_if_not(ret); + ret = weston_assert_bit_is_set(compositor, bitfield, 57); + abort_if_not(ret == false); }