diff options
author | Lennart Poettering <lennart@poettering.net> | 2022-08-05 13:16:27 +0200 |
---|---|---|
committer | Lennart Poettering <lennart@poettering.net> | 2022-08-05 13:34:11 +0200 |
commit | c51e4c796d53f370750b27768fc979f6aa0cb263 (patch) | |
tree | 9cced2e8886c881d4af1ad37c1da0d1c7666fb65 /src/test/test-macro.c | |
parent | 14e7bc2e77d2699498a1f74d7e4f905f11eca335 (diff) | |
download | systemd-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.c | 56 |
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); |