Mercurial > gnulib
changeset 40241:606f33a233d3
bitset: a bit (...) more tests
* tests/test-bitset.c (check_attributes): Check zero and ones.
author | Akim Demaille <akim.demaille@gmail.com> |
---|---|
date | Sat, 16 Mar 2019 17:36:22 +0100 |
parents | d55c6147cb55 |
children | e84036edb2ff |
files | ChangeLog tests/test-bitset.c |
diffstat | 2 files changed, 34 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/ChangeLog Sat Mar 16 17:16:48 2019 +0100 +++ b/ChangeLog Sat Mar 16 17:36:22 2019 +0100 @@ -1,5 +1,10 @@ 2019-03-16 Akim Demaille <akim@lrde.epita.fr> + bitset: a bit (...) more tests + * tests/test-bitset.c (check_attributes): Check zero and ones. + +2019-03-16 Akim Demaille <akim@lrde.epita.fr> + bitset: fix overflows. Reported by Bruno Haible. https://lists.gnu.org/archive/html/bug-gnulib/2019-03/msg00017.html
--- a/tests/test-bitset.c Sat Mar 16 17:16:48 2019 +0100 +++ b/tests/test-bitset.c Sat Mar 16 17:36:22 2019 +0100 @@ -32,12 +32,18 @@ ASSERT (bitset_test (bs1, i) == bitset_test (bs2, i)); } +static void bitset_random (bitset bs) { for (bitset_bindex i = 0; i < bitset_size (bs); ++i) bitset_set (bs, RANDOM (2)); } + +/* Check various operations on random bitsets with two different + implementations. */ + +static void compare (enum bitset_attr a, enum bitset_attr b) { const int nbits = RANDOM (256); @@ -62,10 +68,12 @@ bitset_copy (bsrc3, asrc3); bitset bdst = bitset_create (nbits, b); + /* not */ bitset_not (adst, asrc0); bitset_not (bdst, bsrc0); assert_bitset_equal (adst, bdst); + /* and */ bitset_and (adst, asrc0, asrc1); bitset_and (bdst, bsrc0, bsrc1); assert_bitset_equal (adst, bdst); @@ -73,6 +81,7 @@ == bitset_and_cmp (bdst, bsrc0, bsrc1)); assert_bitset_equal (adst, bdst); + /* andn */ bitset_andn (adst, asrc0, asrc1); bitset_andn (bdst, bsrc0, bsrc1); assert_bitset_equal (adst, bdst); @@ -80,6 +89,7 @@ == bitset_andn_cmp (bdst, bsrc0, bsrc1)); assert_bitset_equal (adst, bdst); + /* or */ bitset_or (adst, asrc0, asrc1); bitset_or (bdst, bsrc0, bsrc1); assert_bitset_equal (adst, bdst); @@ -87,6 +97,7 @@ == bitset_or_cmp (bdst, bsrc0, bsrc1)); assert_bitset_equal (adst, bdst); + /* xor */ bitset_xor (adst, asrc0, asrc1); bitset_xor (bdst, bsrc0, bsrc1); assert_bitset_equal (adst, bdst); @@ -94,6 +105,7 @@ == bitset_xor_cmp (bdst, bsrc0, bsrc1)); assert_bitset_equal (adst, bdst); + /* and_or */ bitset_and_or (adst, asrc0, asrc1, asrc2); bitset_and_or (bdst, bsrc0, bsrc1, bsrc2); assert_bitset_equal (adst, bdst); @@ -101,6 +113,7 @@ == bitset_and_or_cmp (bdst, bsrc0, bsrc1, bsrc2)); assert_bitset_equal (adst, bdst); + /* andn_or */ bitset_andn_or (adst, asrc0, asrc1, asrc2); bitset_andn_or (bdst, bsrc0, bsrc1, bsrc2); assert_bitset_equal (adst, bdst); @@ -108,6 +121,7 @@ == bitset_andn_or_cmp (bdst, bsrc0, bsrc1, bsrc2)); assert_bitset_equal (adst, bdst); + /* or_and */ bitset_or_and (adst, asrc0, asrc1, asrc2); bitset_or_and (bdst, bsrc0, bsrc1, bsrc2); assert_bitset_equal (adst, bdst); @@ -115,6 +129,16 @@ == bitset_or_and_cmp (bdst, bsrc0, bsrc1, bsrc2)); assert_bitset_equal (adst, bdst); + /* ones */ + bitset_ones (adst); + bitset_ones (bdst); + assert_bitset_equal (adst, bdst); + + /* zero */ + bitset_zero (adst); + bitset_zero (bdst); + assert_bitset_equal (adst, bdst); + bitset_free (bdst); bitset_free (bsrc3); bitset_free (bsrc2); @@ -127,6 +151,11 @@ bitset_free (asrc0); } + +/* Check various operations against expected values for a bitset + having attributes ATTR. */ + +static void check_attributes (enum bitset_attr attr) { enum { nbits = 32 };