aboutsummaryrefslogtreecommitdiffstats
path: root/test/test_bitvec.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'test/test_bitvec.cpp')
-rw-r--r--test/test_bitvec.cpp498
1 files changed, 249 insertions, 249 deletions
diff --git a/test/test_bitvec.cpp b/test/test_bitvec.cpp
index c123212..892744a 100644
--- a/test/test_bitvec.cpp
+++ b/test/test_bitvec.cpp
@@ -30,357 +30,357 @@
#include <cstddef>
#include <cstdlib>
-template <class T, size_t N>
+template<class T, size_t N>
void
test_and(Context& ctx)
{
- const T a = make_random_bitvec<T, N>(ctx);
- const T b = make_random_bitvec<T, N>(ctx);
- T r = a;
- assert((a & b) == (r &= b));
-
- for (size_t i = 0; i < N; ++i) {
- assert(r.test(i) == (a.test(i) && b.test(i)));
- }
+ const T a = make_random_bitvec<T, N>(ctx);
+ const T b = make_random_bitvec<T, N>(ctx);
+ T r = a;
+ assert((a & b) == (r &= b));
+
+ for (size_t i = 0; i < N; ++i) {
+ assert(r.test(i) == (a.test(i) && b.test(i)));
+ }
}
-template <class T, size_t N>
+template<class T, size_t N>
void
test_or(Context& ctx)
{
- const T a = make_random_bitvec<T, N>(ctx);
- const T b = make_random_bitvec<T, N>(ctx);
- T r = a;
- assert((a | b) == (r |= b));
-
- for (size_t i = 0; i < N; ++i) {
- assert(r.test(i) == (a.test(i) || b.test(i)));
- }
+ const T a = make_random_bitvec<T, N>(ctx);
+ const T b = make_random_bitvec<T, N>(ctx);
+ T r = a;
+ assert((a | b) == (r |= b));
+
+ for (size_t i = 0; i < N; ++i) {
+ assert(r.test(i) == (a.test(i) || b.test(i)));
+ }
}
-template <class T, size_t N>
+template<class T, size_t N>
void
test_xor(Context& ctx)
{
- const T a = make_random_bitvec<T, N>(ctx);
- const T b = make_random_bitvec<T, N>(ctx);
- T r = a;
- assert((a ^ b) == (r ^= b));
-
- for (size_t i = 0; i < N; ++i) {
- assert(r.test(i) == (a.test(i) != b.test(i)));
- }
+ const T a = make_random_bitvec<T, N>(ctx);
+ const T b = make_random_bitvec<T, N>(ctx);
+ T r = a;
+ assert((a ^ b) == (r ^= b));
+
+ for (size_t i = 0; i < N; ++i) {
+ assert(r.test(i) == (a.test(i) != b.test(i)));
+ }
}
-template <class T, size_t N>
+template<class T, size_t N>
void
test_not(Context& ctx)
{
- const T v = make_random_bitvec<T, N>(ctx);
- const T r = ~v;
+ const T v = make_random_bitvec<T, N>(ctx);
+ const T r = ~v;
- for (size_t i = 0; i < N; ++i) {
- assert(r.test(i) == !v.test(i));
- }
+ for (size_t i = 0; i < N; ++i) {
+ assert(r.test(i) == !v.test(i));
+ }
}
-template <class T, size_t N>
+template<class T, size_t N>
void
test_flip_one(Context&)
{
- T v = make_zero_bitvec<T, N>();
- for (size_t i = 0; i < N; ++i) {
- assert(v.none());
- v.flip(i);
- for (size_t j = 0; j < N; ++j) {
- assert(v.test(j) == (j == i));
- }
-
- v.flip(i);
- assert(v.none());
- }
+ T v = make_zero_bitvec<T, N>();
+ for (size_t i = 0; i < N; ++i) {
+ assert(v.none());
+ v.flip(i);
+ for (size_t j = 0; j < N; ++j) {
+ assert(v.test(j) == (j == i));
+ }
+
+ v.flip(i);
+ assert(v.none());
+ }
}
-template <class T, size_t N>
+template<class T, size_t N>
void
test_flip_all(Context& ctx)
{
- const T a = make_random_bitvec<T, N>(ctx);
- T r = a;
- r.flip();
- for (size_t i = 0; i < N; ++i) {
- assert(r.test(i) == !a.test(i));
- }
+ const T a = make_random_bitvec<T, N>(ctx);
+ T r = a;
+ r.flip();
+ for (size_t i = 0; i < N; ++i) {
+ assert(r.test(i) == !a.test(i));
+ }
}
-template <class T, size_t N>
+template<class T, size_t N>
void
test_none(Context&)
{
- T v = make_zero_bitvec<T, N>();
- assert(v.none());
- v.set();
- assert(v.none() == (N == 0));
- if (N > 1) {
- v.reset(N / 2);
- assert(!v.none());
- v.reset();
- v.set(N / 2);
- assert(!v.none());
- }
+ T v = make_zero_bitvec<T, N>();
+ assert(v.none());
+ v.set();
+ assert(v.none() == (N == 0));
+ if (N > 1) {
+ v.reset(N / 2);
+ assert(!v.none());
+ v.reset();
+ v.set(N / 2);
+ assert(!v.none());
+ }
}
-template <class T, size_t N>
+template<class T, size_t N>
void
test_set_reset_one(Context&)
{
- T v = make_zero_bitvec<T, N>();
- for (size_t i = 0; i < N; ++i) {
- assert(v.none());
- v.set(i);
- for (size_t j = 0; j < N; ++j) {
- assert(v.test(j) == (j == i));
- }
-
- v.reset(i);
- assert(v.none());
- }
+ T v = make_zero_bitvec<T, N>();
+ for (size_t i = 0; i < N; ++i) {
+ assert(v.none());
+ v.set(i);
+ for (size_t j = 0; j < N; ++j) {
+ assert(v.test(j) == (j == i));
+ }
+
+ v.reset(i);
+ assert(v.none());
+ }
}
-template <class T, size_t N>
+template<class T, size_t N>
void
test_set_all(Context&)
{
- T v = make_zero_bitvec<T, N>();
- v.set();
- for (size_t i = 0; i < N; ++i) {
- assert(v.test(i));
- }
+ T v = make_zero_bitvec<T, N>();
+ v.set();
+ for (size_t i = 0; i < N; ++i) {
+ assert(v.test(i));
+ }
}
-template <class T, size_t N>
+template<class T, size_t N>
void
test_reset_all(Context&)
{
- T v = make_zero_bitvec<T, N>();
- v.set();
- v.reset();
- for (size_t i = 0; i < N; ++i) {
- assert(!v.test(i));
- }
+ T v = make_zero_bitvec<T, N>();
+ v.set();
+ v.reset();
+ for (size_t i = 0; i < N; ++i) {
+ assert(!v.test(i));
+ }
}
-template <class T, size_t N>
+template<class T, size_t N>
void
test_left_shift(Context& ctx)
{
- for (size_t s = 0; s < N; ++s) {
- const T v = make_random_bitvec<T, N>(ctx);
- T r = v;
- assert((v << s) == (r <<= s));
-
- for (size_t i = 0; i < s; ++i) {
- assert(!r.test(i));
- }
-
- for (size_t i = s; i < N; ++i) {
- assert(r.test(i) == v.test(i - s));
- }
- }
+ for (size_t s = 0; s < N; ++s) {
+ const T v = make_random_bitvec<T, N>(ctx);
+ T r = v;
+ assert((v << s) == (r <<= s));
+
+ for (size_t i = 0; i < s; ++i) {
+ assert(!r.test(i));
+ }
+
+ for (size_t i = s; i < N; ++i) {
+ assert(r.test(i) == v.test(i - s));
+ }
+ }
}
-template <class T, size_t N>
+template<class T, size_t N>
void
test_right_shift(Context& ctx)
{
- for (size_t s = 0; s < N; ++s) {
- const T v = make_random_bitvec<T, N>(ctx);
- T r = v;
- assert((v >> s) == (r >>= s));
-
- for (size_t i = N - 1; i > N - s - 1; --i) {
- assert(!r.test(i));
- }
-
- for (size_t i = 0; i <= N - s - 1; ++i) {
- assert(r.test(i) == v.test(i + s));
- }
- }
+ for (size_t s = 0; s < N; ++s) {
+ const T v = make_random_bitvec<T, N>(ctx);
+ T r = v;
+ assert((v >> s) == (r >>= s));
+
+ for (size_t i = N - 1; i > N - s - 1; --i) {
+ assert(!r.test(i));
+ }
+
+ for (size_t i = 0; i <= N - s - 1; ++i) {
+ assert(r.test(i) == v.test(i + s));
+ }
+ }
}
-template <class T, size_t N>
+template<class T, size_t N>
void
test_left_rotate(Context& ctx)
{
- const T v = make_random_bitvec<T, N>(ctx);
- for (size_t bits = 0; bits <= N; ++bits) {
- T r = v;
- r.rotl(bits);
-
- if (N > 0) {
- for (size_t i = 0; i < N; ++i) {
- assert(r.test((i + bits) % N) == v.test(i));
- }
- }
- }
+ const T v = make_random_bitvec<T, N>(ctx);
+ for (size_t bits = 0; bits <= N; ++bits) {
+ T r = v;
+ r.rotl(bits);
+
+ if (N > 0) {
+ for (size_t i = 0; i < N; ++i) {
+ assert(r.test((i + bits) % N) == v.test(i));
+ }
+ }
+ }
}
-template <class T, size_t N>
+template<class T, size_t N>
void
test_right_rotate(Context& ctx)
{
- const T v = make_random_bitvec<T, N>(ctx);
- for (size_t bits = 0; bits <= N; ++bits) {
- T r = v;
- r.rotr(bits);
-
- if (N > 0) {
- for (size_t i = 0; i < N; ++i) {
- assert(r.test(i) == v.test((i + bits) % N));
- }
- }
- }
+ const T v = make_random_bitvec<T, N>(ctx);
+ for (size_t bits = 0; bits <= N; ++bits) {
+ T r = v;
+ r.rotr(bits);
+
+ if (N > 0) {
+ for (size_t i = 0; i < N; ++i) {
+ assert(r.test(i) == v.test((i + bits) % N));
+ }
+ }
+ }
}
-template <class T, size_t N>
+template<class T, size_t N>
void
test_find_first(Context&)
{
- T v = make_zero_bitvec<T, N>();
- for (size_t i = 0; i < N; ++i) {
- v.reset();
- v.set(i);
- for (size_t j = i + 1; j < N; ++j) {
- v.set(j, rand() % 2);
- }
- assert(size_t(v.find_first()) == i + 1);
- }
+ T v = make_zero_bitvec<T, N>();
+ for (size_t i = 0; i < N; ++i) {
+ v.reset();
+ v.set(i);
+ for (size_t j = i + 1; j < N; ++j) {
+ v.set(j, rand() % 2);
+ }
+ assert(size_t(v.find_first()) == i + 1);
+ }
}
-template <class T, size_t N>
+template<class T, size_t N>
void
test_gray_code(Context& ctx)
{
- const T v = make_random_bitvec<T, N>(ctx);
- T r = v;
- chilbert::detail::gray_code(r);
+ const T v = make_random_bitvec<T, N>(ctx);
+ T r = v;
+ chilbert::detail::gray_code(r);
- if (N > 0) {
- assert(N == 1 || r == (v ^ (v >> 1)));
+ if (N > 0) {
+ assert(N == 1 || r == (v ^ (v >> 1)));
- T s = r;
- chilbert::detail::gray_code_inv(s);
- assert(s == v);
- }
+ T s = r;
+ chilbert::detail::gray_code_inv(s);
+ assert(s == v);
+ }
}
-template <class T, size_t N>
+template<class T, size_t N>
void
test_comparison(Context&)
{
- T a = make_zero_bitvec<T, N>();
- T b = make_zero_bitvec<T, N>();
+ T a = make_zero_bitvec<T, N>();
+ T b = make_zero_bitvec<T, N>();
- for (size_t bit = 1; bit < N; ++bit) {
- chilbert::detail::set_bit(a, bit, 1);
+ for (size_t bit = 1; bit < N; ++bit) {
+ chilbert::detail::set_bit(a, bit, 1);
- for (size_t i = 0; i < bit; ++i) {
- chilbert::detail::set_bit(a, i, rand() % 2 == 0);
- chilbert::detail::set_bit(b, i, rand() % 2 == 0);
- }
+ for (size_t i = 0; i < bit; ++i) {
+ chilbert::detail::set_bit(a, i, rand() % 2 == 0);
+ chilbert::detail::set_bit(b, i, rand() % 2 == 0);
+ }
- assert(b < a);
- }
+ assert(b < a);
+ }
}
-template <class T, size_t N>
+template<class T, size_t N>
void
test_iteration(Context&)
{
- T v = make_zero_bitvec<T, N>();
- size_t count = 0;
- for (const auto bit : v) {
- assert(!bit);
- ++count;
- }
- assert(count == N);
-
- v.flip();
- count = 0;
- for (const auto bit : v) {
- assert(bit);
- ++count;
- }
- assert(count == N);
+ T v = make_zero_bitvec<T, N>();
+ size_t count = 0;
+ for (const auto bit : v) {
+ assert(!bit);
+ ++count;
+ }
+ assert(count == N);
+
+ v.flip();
+ count = 0;
+ for (const auto bit : v) {
+ assert(bit);
+ ++count;
+ }
+ assert(count == N);
}
-template <class T, size_t N>
+template<class T, size_t N>
void
test(Context& ctx)
{
- test_and<T, N>(ctx);
- test_or<T, N>(ctx);
- test_xor<T, N>(ctx);
- test_not<T, N>(ctx);
- test_flip_one<T, N>(ctx);
- test_flip_all<T, N>(ctx);
- test_none<T, N>(ctx);
- test_set_reset_one<T, N>(ctx);
- test_set_all<T, N>(ctx);
- test_reset_all<T, N>(ctx);
- test_left_shift<T, N>(ctx);
- test_right_shift<T, N>(ctx);
- test_left_rotate<T, N>(ctx);
- test_right_rotate<T, N>(ctx);
- test_find_first<T, N>(ctx);
- test_gray_code<T, N>(ctx);
- test_comparison<T, N>(ctx);
- test_iteration<T, N>(ctx);
+ test_and<T, N>(ctx);
+ test_or<T, N>(ctx);
+ test_xor<T, N>(ctx);
+ test_not<T, N>(ctx);
+ test_flip_one<T, N>(ctx);
+ test_flip_all<T, N>(ctx);
+ test_none<T, N>(ctx);
+ test_set_reset_one<T, N>(ctx);
+ test_set_all<T, N>(ctx);
+ test_reset_all<T, N>(ctx);
+ test_left_shift<T, N>(ctx);
+ test_right_shift<T, N>(ctx);
+ test_left_rotate<T, N>(ctx);
+ test_right_rotate<T, N>(ctx);
+ test_find_first<T, N>(ctx);
+ test_gray_code<T, N>(ctx);
+ test_comparison<T, N>(ctx);
+ test_iteration<T, N>(ctx);
}
int
main()
{
- Context ctx;
-
- // test<chilbert::SmallBitVec, 0>(ctx);
- test<chilbert::SmallBitVec, 1>(ctx);
- test<chilbert::SmallBitVec, 31>(ctx);
- test<chilbert::SmallBitVec, 32>(ctx);
- test<chilbert::SmallBitVec, 33>(ctx);
- test<chilbert::SmallBitVec, 63>(ctx);
- test<chilbert::SmallBitVec, 64>(ctx);
-
- test<chilbert::DynamicBitVec, 0>(ctx);
- test<chilbert::DynamicBitVec, 1>(ctx);
- test<chilbert::DynamicBitVec, 31>(ctx);
- test<chilbert::DynamicBitVec, 32>(ctx);
- test<chilbert::DynamicBitVec, 33>(ctx);
- test<chilbert::DynamicBitVec, 63>(ctx);
- test<chilbert::DynamicBitVec, 64>(ctx);
- test<chilbert::DynamicBitVec, 65>(ctx);
- test<chilbert::DynamicBitVec, 997>(ctx);
-
- test<chilbert::StaticBitVec<0>, 0>(ctx);
- test<chilbert::StaticBitVec<1>, 1>(ctx);
- test<chilbert::StaticBitVec<31>, 31>(ctx);
- test<chilbert::StaticBitVec<32>, 32>(ctx);
- test<chilbert::StaticBitVec<33>, 33>(ctx);
- test<chilbert::StaticBitVec<63>, 63>(ctx);
- test<chilbert::StaticBitVec<64>, 64>(ctx);
- test<chilbert::StaticBitVec<65>, 65>(ctx);
- test<chilbert::StaticBitVec<997>, 997>(ctx);
-
- test<chilbert::BoundedBitVec<0>, 0>(ctx);
- test<chilbert::BoundedBitVec<1>, 1>(ctx);
- test<chilbert::BoundedBitVec<31>, 31>(ctx);
- test<chilbert::BoundedBitVec<32>, 32>(ctx);
- test<chilbert::BoundedBitVec<64>, 33>(ctx);
- test<chilbert::BoundedBitVec<64>, 63>(ctx);
- test<chilbert::BoundedBitVec<64>, 64>(ctx);
- test<chilbert::BoundedBitVec<128>, 65>(ctx);
- test<chilbert::BoundedBitVec<997>, 997>(ctx);
- test<chilbert::BoundedBitVec<2048>, 997>(ctx);
-
- return 0;
+ Context ctx;
+
+ // test<chilbert::SmallBitVec, 0>(ctx);
+ test<chilbert::SmallBitVec, 1>(ctx);
+ test<chilbert::SmallBitVec, 31>(ctx);
+ test<chilbert::SmallBitVec, 32>(ctx);
+ test<chilbert::SmallBitVec, 33>(ctx);
+ test<chilbert::SmallBitVec, 63>(ctx);
+ test<chilbert::SmallBitVec, 64>(ctx);
+
+ test<chilbert::DynamicBitVec, 0>(ctx);
+ test<chilbert::DynamicBitVec, 1>(ctx);
+ test<chilbert::DynamicBitVec, 31>(ctx);
+ test<chilbert::DynamicBitVec, 32>(ctx);
+ test<chilbert::DynamicBitVec, 33>(ctx);
+ test<chilbert::DynamicBitVec, 63>(ctx);
+ test<chilbert::DynamicBitVec, 64>(ctx);
+ test<chilbert::DynamicBitVec, 65>(ctx);
+ test<chilbert::DynamicBitVec, 997>(ctx);
+
+ test<chilbert::StaticBitVec<0>, 0>(ctx);
+ test<chilbert::StaticBitVec<1>, 1>(ctx);
+ test<chilbert::StaticBitVec<31>, 31>(ctx);
+ test<chilbert::StaticBitVec<32>, 32>(ctx);
+ test<chilbert::StaticBitVec<33>, 33>(ctx);
+ test<chilbert::StaticBitVec<63>, 63>(ctx);
+ test<chilbert::StaticBitVec<64>, 64>(ctx);
+ test<chilbert::StaticBitVec<65>, 65>(ctx);
+ test<chilbert::StaticBitVec<997>, 997>(ctx);
+
+ test<chilbert::BoundedBitVec<0>, 0>(ctx);
+ test<chilbert::BoundedBitVec<1>, 1>(ctx);
+ test<chilbert::BoundedBitVec<31>, 31>(ctx);
+ test<chilbert::BoundedBitVec<32>, 32>(ctx);
+ test<chilbert::BoundedBitVec<64>, 33>(ctx);
+ test<chilbert::BoundedBitVec<64>, 63>(ctx);
+ test<chilbert::BoundedBitVec<64>, 64>(ctx);
+ test<chilbert::BoundedBitVec<128>, 65>(ctx);
+ test<chilbert::BoundedBitVec<997>, 997>(ctx);
+ test<chilbert::BoundedBitVec<2048>, 997>(ctx);
+
+ return 0;
}