From 7b31451e25f496ba138ee08348f67fc1d382859b Mon Sep 17 00:00:00 2001 From: Akim Demaille Date: Mon, 18 Mar 2019 18:27:27 +0100 Subject: [PATCH] bitset: expose bitset_resize * lib/bitset.h (bitset_resize): Bounce on the polymorphic implementation. * tests/test-bitset.c (check_attributes): Check bitset_resize. (main): Use a variable bitset as reference, since fixed does not support resize. --- ChangeLog | 7 +++++++ lib/bitset.h | 5 +++-- tests/test-bitset.c | 25 +++++++++++++++++++------ 3 files changed, 29 insertions(+), 8 deletions(-) diff --git a/ChangeLog b/ChangeLog index 977414f084..714610027a 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2019-03-19 Akim Demaille + + bitset: expose bitset_resize + * lib/bitset.h (bitset_resize): Bounce on the polymorphic implementation. + * tests/test-bitset.c (check_attributes): Check bitset_resize. + (main): Use a variable bitset as reference, since fixed does not support resize. + 2019-03-19 Bruno Haible doc: Document the 'stdnoreturn' and 'noreturn' modules. diff --git a/lib/bitset.h b/lib/bitset.h index 32d08e7aa9..ecd02148f0 100644 --- a/lib/bitset.h +++ b/lib/bitset.h @@ -178,8 +178,9 @@ bitset_test (bitset bset, bitset_bindex bitno) /* Return size in bits of bitset SRC. */ #define bitset_size(SRC) BITSET_SIZE_ (SRC) -/* Change size of bitset. */ -void bitset_resize (bitset, bitset_bindex); +/* Change size in bits of bitset. New bits are zeroed. Return + SIZE. */ +#define bitset_resize(DST, SIZE) BITSET_RESIZE_ (DST, SIZE) /* Return number of bits set in bitset SRC. */ #define bitset_count(SRC) BITSET_COUNT_ (SRC) diff --git a/tests/test-bitset.c b/tests/test-bitset.c index cef910d53a..282ccef4a6 100644 --- a/tests/test-bitset.c +++ b/tests/test-bitset.c @@ -139,6 +139,19 @@ void compare (enum bitset_attr a, enum bitset_attr b) bitset_zero (bdst); assert_bitset_equal (adst, bdst); + /* resize. + + ARRAY bitsets cannot be resized. */ + if (bitset_type_get (bsrc0) != BITSET_ARRAY) + { + const int nbits_new = RANDOM (256); + bitset_copy (adst, asrc0); + bitset_copy (bdst, bsrc0); + ASSERT (nbits_new == bitset_resize (adst, nbits_new)); + ASSERT (nbits_new == bitset_resize (bdst, nbits_new)); + assert_bitset_equal (adst, bdst); + } + bitset_free (bdst); bitset_free (bsrc3); bitset_free (bsrc2); @@ -204,11 +217,11 @@ int main (void) check_attributes (BITSET_FRUGAL); check_attributes (BITSET_GREEDY); - compare (BITSET_FIXED, BITSET_FIXED); - compare (BITSET_FIXED, BITSET_VARIABLE); - compare (BITSET_FIXED, BITSET_DENSE); - compare (BITSET_FIXED, BITSET_SPARSE); - compare (BITSET_FIXED, BITSET_FRUGAL); - compare (BITSET_FIXED, BITSET_GREEDY); + compare (BITSET_VARIABLE, BITSET_FIXED); + compare (BITSET_VARIABLE, BITSET_VARIABLE); + compare (BITSET_VARIABLE, BITSET_DENSE); + compare (BITSET_VARIABLE, BITSET_SPARSE); + compare (BITSET_VARIABLE, BITSET_FRUGAL); + compare (BITSET_VARIABLE, BITSET_GREEDY); return 0; } -- 2.39.5