[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
bitset: expose bitset_resize
From: |
Akim Demaille |
Subject: |
bitset: expose bitset_resize |
Date: |
Tue, 19 Mar 2019 09:23:02 +0100 |
Ok to install?
commit 6c5d6f2d2479807d84837e0e9f93048be985e0f7
Author: Akim Demaille <address@hidden>
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 <address@hidden>
+
+ 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 <address@hidden>
_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;
}
- bitset: expose bitset_resize,
Akim Demaille <=