summaryrefslogtreecommitdiffstats
path: root/liblog_unmask_range.c
diff options
context:
space:
mode:
authorMattias Andrée <m@maandree.se>2025-02-09 15:04:27 +0100
committerMattias Andrée <m@maandree.se>2025-02-09 15:04:27 +0100
commited004cba0e8d1d383def76f795b1e63ba0aaa89a (patch)
treeb12e5f23329f631b66c19b932551e4dff5aa477f /liblog_unmask_range.c
downloadliblog-ed004cba0e8d1d383def76f795b1e63ba0aaa89a.tar.gz
liblog-ed004cba0e8d1d383def76f795b1e63ba0aaa89a.tar.bz2
liblog-ed004cba0e8d1d383def76f795b1e63ba0aaa89a.tar.xz
First commit (everything was written 2024)
Signed-off-by: Mattias Andrée <m@maandree.se>
Diffstat (limited to 'liblog_unmask_range.c')
-rw-r--r--liblog_unmask_range.c412
1 files changed, 412 insertions, 0 deletions
diff --git a/liblog_unmask_range.c b/liblog_unmask_range.c
new file mode 100644
index 0000000..62b7895
--- /dev/null
+++ b/liblog_unmask_range.c
@@ -0,0 +1,412 @@
+/* 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