Ok to install? commit 6c5d6f2d2479807d84837e0e9f93048be985e0f7 Author: Akim Demaille <akim.demai...@gmail.com> Date: Mon Mar 18 18:27:27 2019 +0100
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. diff --git a/ChangeLog b/ChangeLog index 81e371048..858e0a3ba 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2019-03-19 Akim Demaille <a...@lrde.epita.fr> + + 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-17 Akim Demaille <a...@lrde.epita.fr> _Noreturn: GCC 4.7 does not support [[noreturn]] in C++11 mode diff --git a/lib/bitset.h b/lib/bitset.h index 32d08e7aa..ecd02148f 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 cef910d53..282ccef4a 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; }