summaryrefslogtreecommitdiff
path: root/src/test/test-macro.c
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2022-08-05 13:16:27 +0200
committerLennart Poettering <lennart@poettering.net>2022-08-05 13:34:11 +0200
commitc51e4c796d53f370750b27768fc979f6aa0cb263 (patch)
tree9cced2e8886c881d4af1ad37c1da0d1c7666fb65 /src/test/test-macro.c
parent14e7bc2e77d2699498a1f74d7e4f905f11eca335 (diff)
downloadsystemd-c51e4c796d53f370750b27768fc979f6aa0cb263.tar.gz
macro: add macro for checking if integer is power of 2
Diffstat (limited to 'src/test/test-macro.c')
-rw-r--r--src/test/test-macro.c56
1 files changed, 56 insertions, 0 deletions
diff --git a/src/test/test-macro.c b/src/test/test-macro.c
index c39f64b385..049ea2c14e 100644
--- a/src/test/test-macro.c
+++ b/src/test/test-macro.c
@@ -465,4 +465,60 @@ TEST(PTR_SUB1) {
assert_se(!p);
}
+TEST(ISPOWEROF2) {
+ uint64_t u;
+ int64_t i;
+
+ /* First, test constant expressions */
+ assert_se(!ISPOWEROF2(-2));
+ assert_se(!ISPOWEROF2(-1));
+ assert_se(!ISPOWEROF2(0));
+ assert_se(ISPOWEROF2(1));
+ assert_se(ISPOWEROF2(2));
+ assert_se(!ISPOWEROF2(3));
+ assert_se(ISPOWEROF2(4));
+ assert_se(!ISPOWEROF2(5));
+ assert_se(!ISPOWEROF2(6));
+ assert_se(!ISPOWEROF2(7));
+ assert_se(ISPOWEROF2(8));
+ assert_se(!ISPOWEROF2(9));
+ assert_se(!ISPOWEROF2(1022));
+ assert_se(ISPOWEROF2(1024));
+ assert_se(!ISPOWEROF2(1025));
+ assert_se(!ISPOWEROF2(UINT64_C(0xffffffff)));
+ assert_se(ISPOWEROF2(UINT64_C(0x100000000)));
+ assert_se(!ISPOWEROF2(UINT64_C(0x100000001)));
+
+ /* Then, test dynamic expressions, and if they are side-effect free */
+ i = -2;
+ assert_se(!ISPOWEROF2(i++));
+ assert_se(i == -1);
+ assert_se(!ISPOWEROF2(i++));
+ assert_se(i == 0);
+ assert_se(!ISPOWEROF2(i++));
+ assert_se(i == 1);
+ assert_se(ISPOWEROF2(i++));
+ assert_se(i == 2);
+ assert_se(ISPOWEROF2(i++));
+ assert_se(i == 3);
+ assert_se(!ISPOWEROF2(i++));
+ assert_se(i == 4);
+ assert_se(ISPOWEROF2(i++));
+ assert_se(i == 5);
+ assert_se(!ISPOWEROF2(i));
+
+ u = 0;
+ assert_se(!ISPOWEROF2(u++));
+ assert_se(u == 1);
+ assert_se(ISPOWEROF2(u++));
+ assert_se(u == 2);
+ assert_se(ISPOWEROF2(u++));
+ assert_se(u == 3);
+ assert_se(!ISPOWEROF2(u++));
+ assert_se(u == 4);
+ assert_se(ISPOWEROF2(u++));
+ assert_se(u == 5);
+ assert_se(!ISPOWEROF2(u));
+}
+
DEFINE_TEST_MAIN(LOG_INFO);