From 1b0fe24529a234275e9344c534a227abfa446a83 Mon Sep 17 00:00:00 2001 From: nick Date: Tue, 23 Jul 2013 17:13:40 +0100 Subject: [PATCH] test: Add some tests for bitset_run_count --- tests/unit/check_bitset.c | 95 ++++++++++++++++++++++++++++++--------- 1 file changed, 75 insertions(+), 20 deletions(-) diff --git a/tests/unit/check_bitset.c b/tests/unit/check_bitset.c index efb7258..b496d64 100644 --- a/tests/unit/check_bitset.c +++ b/tests/unit/check_bitset.c @@ -2,15 +2,20 @@ #include "bitset.h" +#define assert_bitset_is( map, val ) { \ + uint64_t *num = map->bits; \ + ck_assert_int_eq( val, *num ); \ +} + START_TEST(test_bit_set) { uint64_t num = 0; char *bits = (char*) # - + #define TEST_BIT_SET(bit, newvalue) \ bit_set(bits, (bit)); \ fail_unless(num == (newvalue), "num was %x instead of %x", num, (newvalue)); - + TEST_BIT_SET(0, 1); TEST_BIT_SET(1, 3); TEST_BIT_SET(2, 7); @@ -23,11 +28,11 @@ START_TEST(test_bit_clear) { uint64_t num = 0xffffffffffffffff; char *bits = (char*) # - + #define TEST_BIT_CLEAR(bit, newvalue) \ bit_clear(bits, (bit)); \ fail_unless(num == (newvalue), "num was %x instead of %x", num, (newvalue)); - + TEST_BIT_CLEAR(0, 0xfffffffffffffffe); TEST_BIT_CLEAR(1, 0xfffffffffffffffc); TEST_BIT_CLEAR(2, 0xfffffffffffffff8); @@ -40,7 +45,7 @@ START_TEST(test_bit_tests) { uint64_t num = 0x5555555555555555; char *bits = (char*) # - + fail_unless(bit_has_value(bits, 0, 1), "bit_has_value malfunction"); fail_unless(bit_has_value(bits, 1, 0), "bit_has_value malfunction"); fail_unless(bit_has_value(bits, 63, 0), "bit_has_value malfunction"); @@ -56,9 +61,9 @@ START_TEST(test_bit_ranges) char buffer[4160]; uint64_t *longs = (unsigned long*) buffer; uint64_t i; - + memset(buffer, 0, 4160); - + for (i=0; i<64; i++) { bit_set_range(buffer, i*64, i); fail_unless( @@ -66,10 +71,10 @@ START_TEST(test_bit_ranges) "longs[%ld] = %lx SHOULD BE %lx", i, longs[i], (1L<bits; - + bitset_set_range(map,0,50); ck_assert_int_eq(1, *num); bitset_set_range(map,99,1); @@ -126,12 +131,12 @@ START_TEST(test_bitset) ck_assert_int_eq(0xc0ff, *num); bitset_clear_range(map,1499,2); ck_assert_int_eq(255, *num); - + *num = 0; bitset_set_range(map, 1499, 2); bitset_clear_range(map, 1300, 200); ck_assert_int_eq(0x8000, *num); - + *num = 0; bitset_set_range(map, 0, 6400); ck_assert_int_eq(0xffffffffffffffff, *num); @@ -145,7 +150,7 @@ START_TEST( test_bitset_set ) { struct bitset_mapping* map; uint64_t *num; - + map = bitset_alloc(64, 1); num = (uint64_t*) map->bits; @@ -160,7 +165,7 @@ START_TEST( test_bitset_clear ) { struct bitset_mapping* map; uint64_t *num; - + map = bitset_alloc(64, 1); num = (uint64_t*) map->bits; @@ -171,6 +176,55 @@ START_TEST( test_bitset_clear ) } END_TEST +START_TEST( test_bitset_run_count ) +{ + struct bitset_mapping* map = bitset_alloc( 64, 1 ); + uint64_t run; + + assert_bitset_is( map, 0x0000000000000000 ); + + bitset_set_range( map, 0, 32 ); + assert_bitset_is( map, 0x00000000ffffffff ); + + run = bitset_run_count( map, 0, 64 ); + ck_assert_int_eq( 32, run ); + + run = bitset_run_count( map, 0, 16 ); + ck_assert_int_eq( 16, run ); + + run = bitset_run_count( map, 16, 64 ); + ck_assert_int_eq( 16, run ); + + run = bitset_run_count( map, 31, 64 ); + ck_assert_int_eq( 1, run ); + + run = bitset_run_count( map, 32, 64 ); + ck_assert_int_eq( 32, run ); + + run = bitset_run_count( map, 32, 32 ); + ck_assert_int_eq( 32, run ); + + run = bitset_run_count( map, 32, 16 ); + ck_assert_int_eq( 16, run ); + + free( map ); + + map = bitset_alloc( 6400, 100 ); + bitset_set_range( map, 0, 3200 ); + + run = bitset_run_count( map, 0, 6400 ); + ck_assert_int_eq( 3200, run ); + + run = bitset_run_count( map, 1, 6400 ); + ck_assert_int_eq( 3199, run ); + + run = bitset_run_count( map, 3200, 6400 ); + ck_assert_int_eq( 3200, run ); + + run = bitset_run_count( map, 6500, 6400 ); + ck_assert_int_eq( 0, run ); +} +END_TEST Suite* bitset_suite(void) { @@ -185,9 +239,10 @@ Suite* bitset_suite(void) tcase_add_test(tc_bitset, test_bitset); tcase_add_test(tc_bitset, test_bitset_set); tcase_add_test(tc_bitset, test_bitset_clear); + tcase_add_test(tc_bitset, test_bitset_run_count); suite_add_tcase(s, tc_bit); suite_add_tcase(s, tc_bitset); - + return s; }