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);
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);
== 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);
== 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);
== 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);
== 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);
== 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);
== 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);
== 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);
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 };