From: Akim Demaille Date: Sat, 16 Mar 2019 16:36:22 +0000 (+0100) Subject: bitset: a bit (...) more tests X-Git-Tag: v1.0~5022 X-Git-Url: https://gitweb.git.savannah.gnu.org/gitweb/?a=commitdiff_plain;h=bca971bd82438d7d26e04fcc2c9de367472addd6;p=gnulib.git bitset: a bit (...) more tests * tests/test-bitset.c (check_attributes): Check zero and ones. --- diff --git a/ChangeLog b/ChangeLog index ff1e5f4dd4..97b20b9099 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +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. diff --git a/tests/test-bitset.c b/tests/test-bitset.c index 032865095b..cef910d53a 100644 --- a/tests/test-bitset.c +++ b/tests/test-bitset.c @@ -32,12 +32,18 @@ void assert_bitset_equal (bitset bs1, bitset bs2) 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 @@ void compare (enum bitset_attr a, enum bitset_attr b) 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 @@ void compare (enum bitset_attr a, enum bitset_attr b) == 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 @@ void compare (enum bitset_attr a, enum bitset_attr b) == 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 @@ void compare (enum bitset_attr a, enum bitset_attr b) == 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 @@ void compare (enum bitset_attr a, enum bitset_attr b) == 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 @@ void compare (enum bitset_attr a, enum bitset_attr b) == 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 @@ void compare (enum bitset_attr a, enum bitset_attr b) == 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 @@ void compare (enum bitset_attr a, enum bitset_attr b) == 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 @@ void compare (enum bitset_attr a, enum bitset_attr b) 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 };