/* See LICENSE file for copyright and license details. */ #include "common.h" #ifndef TEST extern inline void liblog_unmask_range(struct liblog_context *, enum liblog_level, enum liblog_level); #else static void check_singletons(void) { struct liblog_context ctx; ctx.logmask = ~0U; liblog_unmask_range(&ctx, LIBLOG_EMERGENCY, LIBLOG_EMERGENCY); ASSERT_EQ_UINT(ctx.logmask, ~0x0001U); ctx.logmask = ~0U; liblog_unmask_range(&ctx, LIBLOG_ALERT, LIBLOG_ALERT); ASSERT_EQ_UINT(ctx.logmask, ~0x0002U); ctx.logmask = ~0U; liblog_unmask_range(&ctx, LIBLOG_CRITICAL, LIBLOG_CRITICAL); ASSERT_EQ_UINT(ctx.logmask, ~0x0004U); ctx.logmask = ~0U; liblog_unmask_range(&ctx, LIBLOG_ERROR, LIBLOG_ERROR); ASSERT_EQ_UINT(ctx.logmask, ~0x0008U); ctx.logmask = ~0U; liblog_unmask_range(&ctx, LIBLOG_WARNING, LIBLOG_WARNING); ASSERT_EQ_UINT(ctx.logmask, ~0x0010U); ctx.logmask = ~0U; liblog_unmask_range(&ctx, LIBLOG_NOTICE, LIBLOG_NOTICE); ASSERT_EQ_UINT(ctx.logmask, ~0x0020U); ctx.logmask = ~0U; liblog_unmask_range(&ctx, LIBLOG_INFO, LIBLOG_INFO); ASSERT_EQ_UINT(ctx.logmask, ~0x0040U); ctx.logmask = ~0U; liblog_unmask_range(&ctx, LIBLOG_TRACE, LIBLOG_TRACE); ASSERT_EQ_UINT(ctx.logmask, ~0x0080U); ctx.logmask = ~0U; liblog_unmask_range(&ctx, LIBLOG_DEBUG, LIBLOG_DEBUG); ASSERT_EQ_UINT(ctx.logmask, ~0x0100U); } static void check_custom(void) { struct liblog_context ctx; ctx.logmask = ~0U; liblog_unmask_range(&ctx, LIBLOG_NOTICE + 1, LIBLOG_NOTICE + 1); ASSERT_IS_TRUE(ctx.logmask == ~0x0020U || ctx.logmask == ~0x0040U); } static void check_from_emergency(void) { struct liblog_context ctx; ctx.logmask = ~0U; liblog_unmask_range(&ctx, LIBLOG_EMERGENCY, LIBLOG_ALERT); ASSERT_EQ_UINT(ctx.logmask, ~0x0003U); ctx.logmask = ~0U; liblog_unmask_range(&ctx, LIBLOG_EMERGENCY, LIBLOG_CRITICAL); ASSERT_EQ_UINT(ctx.logmask, ~0x0007U); ctx.logmask = ~0U; liblog_unmask_range(&ctx, LIBLOG_EMERGENCY, LIBLOG_ERROR); ASSERT_EQ_UINT(ctx.logmask, ~0x000FU); ctx.logmask = ~0U; liblog_unmask_range(&ctx, LIBLOG_EMERGENCY, LIBLOG_WARNING); ASSERT_EQ_UINT(ctx.logmask, ~0x001FU); ctx.logmask = ~0U; liblog_unmask_range(&ctx, LIBLOG_EMERGENCY, LIBLOG_NOTICE); ASSERT_EQ_UINT(ctx.logmask, ~0x003FU); ctx.logmask = ~0U; liblog_unmask_range(&ctx, LIBLOG_EMERGENCY, LIBLOG_INFO); ASSERT_EQ_UINT(ctx.logmask, ~0x007FU); ctx.logmask = ~0U; liblog_unmask_range(&ctx, LIBLOG_EMERGENCY, LIBLOG_TRACE); ASSERT_EQ_UINT(ctx.logmask, ~0x00FFU); ctx.logmask = ~0U; liblog_unmask_range(&ctx, LIBLOG_EMERGENCY, LIBLOG_DEBUG); ASSERT_EQ_UINT(ctx.logmask, ~0x01FFU); } static void check_from_alert(void) { struct liblog_context ctx; ctx.logmask = ~0U; liblog_unmask_range(&ctx, LIBLOG_ALERT, LIBLOG_EMERGENCY); ASSERT_EQ_UINT(ctx.logmask, ~0U); ctx.logmask = ~0U; liblog_unmask_range(&ctx, LIBLOG_ALERT, LIBLOG_CRITICAL); ASSERT_EQ_UINT(ctx.logmask, ~0x0006U); ctx.logmask = ~0U; liblog_unmask_range(&ctx, LIBLOG_ALERT, LIBLOG_ERROR); ASSERT_EQ_UINT(ctx.logmask, ~0x000EU); ctx.logmask = ~0U; liblog_unmask_range(&ctx, LIBLOG_ALERT, LIBLOG_WARNING); ASSERT_EQ_UINT(ctx.logmask, ~0x001EU); ctx.logmask = ~0U; liblog_unmask_range(&ctx, LIBLOG_ALERT, LIBLOG_NOTICE); ASSERT_EQ_UINT(ctx.logmask, ~0x003EU); ctx.logmask = ~0U; liblog_unmask_range(&ctx, LIBLOG_ALERT, LIBLOG_INFO); ASSERT_EQ_UINT(ctx.logmask, ~0x007EU); ctx.logmask = ~0U; liblog_unmask_range(&ctx, LIBLOG_ALERT, LIBLOG_TRACE); ASSERT_EQ_UINT(ctx.logmask, ~0x00FEU); ctx.logmask = ~0U; liblog_unmask_range(&ctx, LIBLOG_ALERT, LIBLOG_DEBUG); ASSERT_EQ_UINT(ctx.logmask, ~0x01FEU); } static void check_from_critical(void) { struct liblog_context ctx; ctx.logmask = ~0U; liblog_unmask_range(&ctx, LIBLOG_CRITICAL, LIBLOG_EMERGENCY); ASSERT_EQ_UINT(ctx.logmask, ~0U); liblog_unmask_range(&ctx, LIBLOG_CRITICAL, LIBLOG_ALERT); ASSERT_EQ_UINT(ctx.logmask, ~0U); ctx.logmask = ~0U; liblog_unmask_range(&ctx, LIBLOG_CRITICAL, LIBLOG_ERROR); ASSERT_EQ_UINT(ctx.logmask, ~0x000CU); ctx.logmask = ~0U; liblog_unmask_range(&ctx, LIBLOG_CRITICAL, LIBLOG_WARNING); ASSERT_EQ_UINT(ctx.logmask, ~0x001CU); ctx.logmask = ~0U; liblog_unmask_range(&ctx, LIBLOG_CRITICAL, LIBLOG_NOTICE); ASSERT_EQ_UINT(ctx.logmask, ~0x003CU); ctx.logmask = ~0U; liblog_unmask_range(&ctx, LIBLOG_CRITICAL, LIBLOG_INFO); ASSERT_EQ_UINT(ctx.logmask, ~0x007CU); ctx.logmask = ~0U; liblog_unmask_range(&ctx, LIBLOG_CRITICAL, LIBLOG_TRACE); ASSERT_EQ_UINT(ctx.logmask, ~0x00FCU); ctx.logmask = ~0U; liblog_unmask_range(&ctx, LIBLOG_CRITICAL, LIBLOG_DEBUG); ASSERT_EQ_UINT(ctx.logmask, ~0x01FCU); } static void check_from_error(void) { struct liblog_context ctx; ctx.logmask = ~0U; liblog_unmask_range(&ctx, LIBLOG_ERROR, LIBLOG_EMERGENCY); ASSERT_EQ_UINT(ctx.logmask, ~0U); liblog_unmask_range(&ctx, LIBLOG_ERROR, LIBLOG_ALERT); ASSERT_EQ_UINT(ctx.logmask, ~0U); liblog_unmask_range(&ctx, LIBLOG_ERROR, LIBLOG_CRITICAL); ASSERT_EQ_UINT(ctx.logmask, ~0U); ctx.logmask = ~0U; liblog_unmask_range(&ctx, LIBLOG_ERROR, LIBLOG_WARNING); ASSERT_EQ_UINT(ctx.logmask, ~0x0018U); ctx.logmask = ~0U; liblog_unmask_range(&ctx, LIBLOG_ERROR, LIBLOG_NOTICE); ASSERT_EQ_UINT(ctx.logmask, ~0x0038U); ctx.logmask = ~0U; liblog_unmask_range(&ctx, LIBLOG_ERROR, LIBLOG_INFO); ASSERT_EQ_UINT(ctx.logmask, ~0x0078U); ctx.logmask = ~0U; liblog_unmask_range(&ctx, LIBLOG_ERROR, LIBLOG_TRACE); ASSERT_EQ_UINT(ctx.logmask, ~0x00F8U); ctx.logmask = ~0U; liblog_unmask_range(&ctx, LIBLOG_ERROR, LIBLOG_DEBUG); ASSERT_EQ_UINT(ctx.logmask, ~0x01F8U); } static void check_from_warning(void) { struct liblog_context ctx; ctx.logmask = ~0U; liblog_unmask_range(&ctx, LIBLOG_WARNING, LIBLOG_EMERGENCY); ASSERT_EQ_UINT(ctx.logmask, ~0U); liblog_unmask_range(&ctx, LIBLOG_WARNING, LIBLOG_ALERT); ASSERT_EQ_UINT(ctx.logmask, ~0U); liblog_unmask_range(&ctx, LIBLOG_WARNING, LIBLOG_CRITICAL); ASSERT_EQ_UINT(ctx.logmask, ~0U); liblog_unmask_range(&ctx, LIBLOG_WARNING, LIBLOG_ERROR); ASSERT_EQ_UINT(ctx.logmask, ~0U); ctx.logmask = ~0U; liblog_unmask_range(&ctx, LIBLOG_WARNING, LIBLOG_NOTICE); ASSERT_EQ_UINT(ctx.logmask, ~0x0030U); ctx.logmask = ~0U; liblog_unmask_range(&ctx, LIBLOG_WARNING, LIBLOG_INFO); ASSERT_EQ_UINT(ctx.logmask, ~0x0070U); ctx.logmask = ~0U; liblog_unmask_range(&ctx, LIBLOG_WARNING, LIBLOG_TRACE); ASSERT_EQ_UINT(ctx.logmask, ~0x00F0U); ctx.logmask = ~0U; liblog_unmask_range(&ctx, LIBLOG_WARNING, LIBLOG_DEBUG); ASSERT_EQ_UINT(ctx.logmask, ~0x01F0U); } static void check_from_notice(void) { struct liblog_context ctx; ctx.logmask = ~0U; liblog_unmask_range(&ctx, LIBLOG_NOTICE, LIBLOG_EMERGENCY); ASSERT_EQ_UINT(ctx.logmask, ~0U); liblog_unmask_range(&ctx, LIBLOG_NOTICE, LIBLOG_ALERT); ASSERT_EQ_UINT(ctx.logmask, ~0U); liblog_unmask_range(&ctx, LIBLOG_NOTICE, LIBLOG_CRITICAL); ASSERT_EQ_UINT(ctx.logmask, ~0U); liblog_unmask_range(&ctx, LIBLOG_NOTICE, LIBLOG_ERROR); ASSERT_EQ_UINT(ctx.logmask, ~0U); liblog_unmask_range(&ctx, LIBLOG_NOTICE, LIBLOG_WARNING); ASSERT_EQ_UINT(ctx.logmask, ~0U); ctx.logmask = ~0U; liblog_unmask_range(&ctx, LIBLOG_NOTICE, LIBLOG_INFO); ASSERT_EQ_UINT(ctx.logmask, ~0x0060U); ctx.logmask = ~0U; liblog_unmask_range(&ctx, LIBLOG_NOTICE, LIBLOG_TRACE); ASSERT_EQ_UINT(ctx.logmask, ~0x00E0U); ctx.logmask = ~0U; liblog_unmask_range(&ctx, LIBLOG_NOTICE, LIBLOG_DEBUG); ASSERT_EQ_UINT(ctx.logmask, ~0x01E0U); } static void check_from_info(void) { struct liblog_context ctx; ctx.logmask = ~0U; liblog_unmask_range(&ctx, LIBLOG_INFO, LIBLOG_EMERGENCY); ASSERT_EQ_UINT(ctx.logmask, ~0U); liblog_unmask_range(&ctx, LIBLOG_INFO, LIBLOG_ALERT); ASSERT_EQ_UINT(ctx.logmask, ~0U); liblog_unmask_range(&ctx, LIBLOG_INFO, LIBLOG_CRITICAL); ASSERT_EQ_UINT(ctx.logmask, ~0U); liblog_unmask_range(&ctx, LIBLOG_INFO, LIBLOG_ERROR); ASSERT_EQ_UINT(ctx.logmask, ~0U); liblog_unmask_range(&ctx, LIBLOG_INFO, LIBLOG_WARNING); ASSERT_EQ_UINT(ctx.logmask, ~0U); liblog_unmask_range(&ctx, LIBLOG_INFO, LIBLOG_NOTICE); ASSERT_EQ_UINT(ctx.logmask, ~0U); ctx.logmask = ~0U; liblog_unmask_range(&ctx, LIBLOG_INFO, LIBLOG_TRACE); ASSERT_EQ_UINT(ctx.logmask, ~0x00C0U); ctx.logmask = ~0U; liblog_unmask_range(&ctx, LIBLOG_INFO, LIBLOG_DEBUG); ASSERT_EQ_UINT(ctx.logmask, ~0x01C0U); } static void check_from_trace(void) { struct liblog_context ctx; ctx.logmask = ~0U; liblog_unmask_range(&ctx, LIBLOG_TRACE, LIBLOG_EMERGENCY); ASSERT_EQ_UINT(ctx.logmask, ~0U); liblog_unmask_range(&ctx, LIBLOG_TRACE, LIBLOG_ALERT); ASSERT_EQ_UINT(ctx.logmask, ~0U); liblog_unmask_range(&ctx, LIBLOG_TRACE, LIBLOG_CRITICAL); ASSERT_EQ_UINT(ctx.logmask, ~0U); liblog_unmask_range(&ctx, LIBLOG_TRACE, LIBLOG_ERROR); ASSERT_EQ_UINT(ctx.logmask, ~0U); liblog_unmask_range(&ctx, LIBLOG_TRACE, LIBLOG_WARNING); ASSERT_EQ_UINT(ctx.logmask, ~0U); liblog_unmask_range(&ctx, LIBLOG_TRACE, LIBLOG_NOTICE); ASSERT_EQ_UINT(ctx.logmask, ~0U); liblog_unmask_range(&ctx, LIBLOG_TRACE, LIBLOG_INFO); ASSERT_EQ_UINT(ctx.logmask, ~0U); ctx.logmask = ~0U; liblog_unmask_range(&ctx, LIBLOG_TRACE, LIBLOG_DEBUG); ASSERT_EQ_UINT(ctx.logmask, ~0x0180U); } static void check_from_debug(void) { struct liblog_context ctx; ctx.logmask = ~0U; liblog_unmask_range(&ctx, LIBLOG_DEBUG, LIBLOG_EMERGENCY); ASSERT_EQ_UINT(ctx.logmask, ~0U); liblog_unmask_range(&ctx, LIBLOG_DEBUG, LIBLOG_ALERT); ASSERT_EQ_UINT(ctx.logmask, ~0U); liblog_unmask_range(&ctx, LIBLOG_DEBUG, LIBLOG_CRITICAL); ASSERT_EQ_UINT(ctx.logmask, ~0U); liblog_unmask_range(&ctx, LIBLOG_DEBUG, LIBLOG_ERROR); ASSERT_EQ_UINT(ctx.logmask, ~0U); liblog_unmask_range(&ctx, LIBLOG_DEBUG, LIBLOG_WARNING); ASSERT_EQ_UINT(ctx.logmask, ~0U); liblog_unmask_range(&ctx, LIBLOG_DEBUG, LIBLOG_NOTICE); ASSERT_EQ_UINT(ctx.logmask, ~0U); liblog_unmask_range(&ctx, LIBLOG_DEBUG, LIBLOG_INFO); ASSERT_EQ_UINT(ctx.logmask, ~0U); liblog_unmask_range(&ctx, LIBLOG_DEBUG, LIBLOG_TRACE); ASSERT_EQ_UINT(ctx.logmask, ~0U); } static void check_negative(void) { struct liblog_context ctx; if ((enum liblog_level)-1 < 0) { ctx.logmask = ~0U; liblog_unmask_range(&ctx, (enum liblog_level)-10, (enum liblog_level)-10); ASSERT_EQ_UINT(ctx.logmask, ~1U); } } static void check_hyperverbose(void) { struct liblog_context ctx; ctx.logmask = ~0U; liblog_unmask_range(&ctx, (enum liblog_level)0x7FFF, (enum liblog_level)0x7FFF); ASSERT_EQ_UINT(ctx.logmask, ~0x0100U); ctx.logmask = ~0U; liblog_unmask_range(&ctx, (enum liblog_level)0, (enum liblog_level)0x7FFF); ASSERT_EQ_UINT(ctx.logmask, ~0x01FFU); } static void check_series(void) { struct liblog_context ctx; ctx.logmask = ~0U; liblog_unmask_range(&ctx, LIBLOG_EMERGENCY, LIBLOG_EMERGENCY); ASSERT_EQ_UINT(ctx.logmask, ~0x0001U); liblog_unmask_range(&ctx, LIBLOG_TRACE, LIBLOG_DEBUG); ASSERT_EQ_UINT(ctx.logmask, ~0x0181U); liblog_unmask_range(&ctx, LIBLOG_EMERGENCY, LIBLOG_ALERT); ASSERT_EQ_UINT(ctx.logmask, ~0x0183U); liblog_unmask_range(&ctx, LIBLOG_DEBUG, LIBLOG_EMERGENCY); ASSERT_EQ_UINT(ctx.logmask, ~0x0183U); liblog_unmask_range(&ctx, LIBLOG_EMERGENCY, LIBLOG_DEBUG); ASSERT_EQ_UINT(ctx.logmask, ~0x01FFU); } int main(void) { check_singletons(); check_custom(); check_from_emergency(); check_from_alert(); check_from_critical(); check_from_error(); check_from_warning(); check_from_notice(); check_from_info(); check_from_trace(); check_from_debug(); check_negative(); check_hyperverbose(); check_series(); return 0; } #endif