# HG changeset patch # User Akim Demaille # Date 1552754182 -3600 # Node ID 606f33a233d3112d11ad70c742853ffdd6313f62 # Parent d55c6147cb55b3dc06089651b65998fa0b1f4e2f bitset: a bit (...) more tests * tests/test-bitset.c (check_attributes): Check zero and ones. diff -r d55c6147cb55 -r 606f33a233d3 ChangeLog --- 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 + bitset: a bit (...) more tests + * tests/test-bitset.c (check_attributes): Check zero and ones. + +2019-03-16 Akim Demaille + bitset: fix overflows. Reported by Bruno Haible. https://lists.gnu.org/archive/html/bug-gnulib/2019-03/msg00017.html diff -r d55c6147cb55 -r 606f33a233d3 tests/test-bitset.c --- 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 };