diff options
author | Ben Pfaff <blp@nicira.com> | 2012-04-13 21:12:37 -0700 |
---|---|---|
committer | Ben Pfaff <blp@nicira.com> | 2012-04-13 21:12:48 -0700 |
commit | 79a010aa803dc43c7a2d70046f0ad4a2d4cb4a11 (patch) | |
tree | 7c08f61dae5c6606ed0b9c2cf44bb75a82143e6c /tests | |
parent | c2dd49322f538714572c66d72a1c142547c49b1d (diff) |
util: New function bitwise_is_all_zeros().
Signed-off-by: Ben Pfaff <blp@nicira.com>
Diffstat (limited to 'tests')
-rw-r--r-- | tests/test-util.c | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/tests/test-util.c b/tests/test-util.c index ed98295b..23b86e8c 100644 --- a/tests/test-util.c +++ b/tests/test-util.c @@ -184,6 +184,51 @@ check_bitwise_one(void) } } +static void +check_bitwise_is_all_zeros(void) +{ + int n_loops; + + n_loops = 0; + for (n_loops = 0; n_loops < 100; n_loops++) { + ovs_be64 x = htonll(0); + int i; + + for (i = 0; i < 64; i++) { + ovs_be64 bit; + int ofs, n; + + /* Change a random 0-bit into a 1-bit. */ + do { + bit = htonll(UINT64_C(1) << (random_uint32() % 64)); + } while (x & bit); + x |= bit; + + for (ofs = 0; ofs < 64; ofs++) { + for (n = 0; n <= 64 - ofs; n++) { + bool expect; + bool answer; + + expect = (n == 64 + ? x == 0 + : !(x & htonll(((UINT64_C(1) << n) - 1) + << ofs))); + answer = bitwise_is_all_zeros(&x, sizeof x, ofs, n); + if (expect != answer) { + fprintf(stderr, + "bitwise_is_all_zeros(0x%016"PRIx64",8,%d,%d " + "returned %s instead of %s\n", + ntohll(x), ofs, n, + answer ? "true" : "false", + expect ? "true" : "false"); + abort(); + } + } + } + } + } +} + int main(void) { @@ -213,5 +258,7 @@ main(void) check_bitwise_one(); + check_bitwise_is_all_zeros(); + return 0; } |