Home | History | Annotate | Line # | Download | only in unit
bit_util.c revision 1.1
      1 #include "test/jemalloc_test.h"
      2 
      3 #include "jemalloc/internal/bit_util.h"
      4 
      5 #define TEST_POW2_CEIL(t, suf, pri) do {				\
      6 	unsigned i, pow2;						\
      7 	t x;								\
      8 									\
      9 	assert_##suf##_eq(pow2_ceil_##suf(0), 0, "Unexpected result");	\
     10 									\
     11 	for (i = 0; i < sizeof(t) * 8; i++) {				\
     12 		assert_##suf##_eq(pow2_ceil_##suf(((t)1) << i), ((t)1)	\
     13 		    << i, "Unexpected result");				\
     14 	}								\
     15 									\
     16 	for (i = 2; i < sizeof(t) * 8; i++) {				\
     17 		assert_##suf##_eq(pow2_ceil_##suf((((t)1) << i) - 1),	\
     18 		    ((t)1) << i, "Unexpected result");			\
     19 	}								\
     20 									\
     21 	for (i = 0; i < sizeof(t) * 8 - 1; i++) {			\
     22 		assert_##suf##_eq(pow2_ceil_##suf((((t)1) << i) + 1),	\
     23 		    ((t)1) << (i+1), "Unexpected result");		\
     24 	}								\
     25 									\
     26 	for (pow2 = 1; pow2 < 25; pow2++) {				\
     27 		for (x = (((t)1) << (pow2-1)) + 1; x <= ((t)1) << pow2;	\
     28 		    x++) {						\
     29 			assert_##suf##_eq(pow2_ceil_##suf(x),		\
     30 			    ((t)1) << pow2,				\
     31 			    "Unexpected result, x=%"pri, x);		\
     32 		}							\
     33 	}								\
     34 } while (0)
     35 
     36 TEST_BEGIN(test_pow2_ceil_u64) {
     37 	TEST_POW2_CEIL(uint64_t, u64, FMTu64);
     38 }
     39 TEST_END
     40 
     41 TEST_BEGIN(test_pow2_ceil_u32) {
     42 	TEST_POW2_CEIL(uint32_t, u32, FMTu32);
     43 }
     44 TEST_END
     45 
     46 TEST_BEGIN(test_pow2_ceil_zu) {
     47 	TEST_POW2_CEIL(size_t, zu, "zu");
     48 }
     49 TEST_END
     50 
     51 int
     52 main(void) {
     53 	return test(
     54 	    test_pow2_ceil_u64,
     55 	    test_pow2_ceil_u32,
     56 	    test_pow2_ceil_zu);
     57 }
     58