* tests/test-bitset.c (check_zero, check_ones): New. (check_attributes): Use them. --- ChangeLog | 6 +++++ tests/test-bitset.c | 56 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 62 insertions(+)
diff --git a/ChangeLog b/ChangeLog index 88ae15003..5badf0c41 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2020-11-19 Akim Demaille <a...@lrde.epita.fr> + + bitset: check empty and full bitsets + * tests/test-bitset.c (check_zero, check_ones): New. + (check_attributes): Use them. + 2020-11-19 Akim Demaille <a...@lrde.epita.fr> bitset: be sure to always return a value diff --git a/tests/test-bitset.c b/tests/test-bitset.c index 5068ae782..fc0c6fbe9 100644 --- a/tests/test-bitset.c +++ b/tests/test-bitset.c @@ -224,12 +224,37 @@ void compare (enum bitset_attr a, enum bitset_attr b) } +/* Check empty bitsets. */ + +static void +check_zero (bitset bs) +{ + fprintf (stderr, "check_zero\n"); + bitset_zero (bs); + + /* count. */ + ASSERT (bitset_count (bs) == 0); + + /* first and last */ + ASSERT (bitset_first (bs) == BITSET_BINDEX_MAX); + ASSERT (bitset_last (bs) == BITSET_BINDEX_MAX); + + /* FOR_EACH. */ + { + bitset_iterator iter; + bitset_bindex i; + BITSET_FOR_EACH (iter, bs, i, 0) + ASSERT (0); + } +} + /* Exercise on a single-bit values: it's easy to get the handling of the most significant bit wrong. */ static void check_one_bit (bitset bs, int bitno) { + fprintf (stderr, "check_one_bit(%d)\n", bitno); bitset_zero (bs); bitset_set (bs, bitno); @@ -252,6 +277,34 @@ check_one_bit (bitset bs, int bitno) } } +/* Check full bitsets. */ + +static void +check_ones (bitset bs) +{ + fprintf (stderr, "check_ones\n"); + const bitset_bindex size = bitset_size (bs); + + bitset_ones (bs); + debug_bitset (bs); + + /* count. */ + ASSERT (bitset_count (bs) == size); + + /* first and last */ + ASSERT (bitset_first (bs) == 0); + ASSERT (bitset_last (bs) == size - 1); + + /* FOR_EACH. */ + { + bitset_iterator iter; + bitset_bindex i; + bitset_bindex count = 0; + BITSET_FOR_EACH (iter, bs, i, 0) + ASSERT (i == count++); + } +} + /* Check various operations against expected values for a bitset having attributes ATTR. */ @@ -287,6 +340,9 @@ check_attributes (enum bitset_attr attr, int nbits) bitset_or (bs, bs1, bs2); ASSERT (bitset_count (bs) == 6); + check_zero (bs); + check_ones (bs); + /* Exercise on all the single-bit values: it's easy to get the handling of the most significant bit wrong. */ for (int bitno = 0; bitno < nbits; ++bitno) -- 2.29.2