#include #define BOOST_TEST_MODULE zero_suppression_test #include #include #include #include using namespace boost::assign; using namespace boost::histogram::detail; namespace tt = boost::test_tools; template void print(const std::vector& v) { std::cerr << "["; for (unsigned i = 0; i < v.size(); ++i) { std::cerr << v[i] << (i < v.size() - 1 ? ", " : "]"); } std::cerr << "\n"; } #define EQUAL_VECTORS(a, b) BOOST_CHECK_EQUAL_COLLECTIONS(a.begin(), a.end(), b.begin(), b.end()) BOOST_AUTO_TEST_CASE( codec_no_zero ) { std::vector a, b, c(3, 0); a += 1, 1, 1; BOOST_CHECK(zero_suppression_encode(b, &a[0], a.size())); EQUAL_VECTORS(a, b); zero_suppression_decode(&c[0], c.size(), b); EQUAL_VECTORS(a, c); } BOOST_AUTO_TEST_CASE( codec_empty ) { std::vector a, b, c; BOOST_CHECK(zero_suppression_encode(b, &a[0], a.size())); EQUAL_VECTORS(a, b); zero_suppression_decode(&c[0], c.size(), b); EQUAL_VECTORS(a, c); } BOOST_AUTO_TEST_CASE( codec_zero_0a ) { std::vector a, b; a += 0; BOOST_CHECK(zero_suppression_encode(b, &a[0], a.size()) == false); } BOOST_AUTO_TEST_CASE( codec_zero_1a ) { std::vector a, b, c, d(3, 0); a += 1, 0, 0; c += 1, 0, 2; BOOST_CHECK(zero_suppression_encode(b, &a[0], a.size())); EQUAL_VECTORS(b, c); zero_suppression_decode(&d[0], d.size(), b); EQUAL_VECTORS(a, d); } BOOST_AUTO_TEST_CASE( codec_zero_2a ) { std::vector a, b, c, d(3, 0); a += 0, 0, 1; c += 0, 2, 1; BOOST_CHECK(zero_suppression_encode(b, &a[0], a.size())); EQUAL_VECTORS(b, c); zero_suppression_decode(&d[0], d.size(), b); EQUAL_VECTORS(a, d); } BOOST_AUTO_TEST_CASE( codec_zero_3a ) { std::vector a, b, c, d(2, 0); a += 0, 0; c += 0, 2; BOOST_CHECK(zero_suppression_encode(b, &a[0], a.size())); EQUAL_VECTORS(b, c); zero_suppression_decode(&d[0], d.size(), b); EQUAL_VECTORS(a, d); } BOOST_AUTO_TEST_CASE( codec_zero_0b ) { std::vector a, b; a += 0; BOOST_CHECK(zero_suppression_encode(b, &a[0], a.size()) == false); } BOOST_AUTO_TEST_CASE( codec_zero_1b ) { std::vector a, b, c, d(3, 0); a += 1, 0, 0; c += 1, 0, 2; BOOST_CHECK(zero_suppression_encode(b, &a[0], a.size())); EQUAL_VECTORS(b, c); zero_suppression_decode(&d[0], d.size(), b); EQUAL_VECTORS(a, d); } BOOST_AUTO_TEST_CASE( codec_zero_2b ) { std::vector a, b, c, d(3, 0); a += 0, 0, 1; c += 0, 2, 1; BOOST_CHECK(zero_suppression_encode(b, &a[0], a.size())); EQUAL_VECTORS(b, c); zero_suppression_decode(&d[0], d.size(), b); EQUAL_VECTORS(a, d); } BOOST_AUTO_TEST_CASE( codec_zero_3b ) { std::vector a, b, c, d(2, 0); a += 0, 0; c += 0, 2; BOOST_CHECK(zero_suppression_encode(b, &a[0], a.size())); EQUAL_VECTORS(b, c); zero_suppression_decode(&d[0], d.size(), b); EQUAL_VECTORS(a, d); } BOOST_AUTO_TEST_CASE( codec_zero_0c ) { std::vector a, b; a += 0; BOOST_CHECK(zero_suppression_encode(b, &a[0], a.size()) == false); } BOOST_AUTO_TEST_CASE( codec_zero_1c ) { std::vector a, b, c, d(3, 0); a += 1, 0, 0; c += 1, 0, 2; BOOST_CHECK(zero_suppression_encode(b, &a[0], a.size())); EQUAL_VECTORS(b, c); zero_suppression_decode(&d[0], d.size(), b); EQUAL_VECTORS(a, d); } BOOST_AUTO_TEST_CASE( codec_zero_2c ) { std::vector a, b, c, d(3, 0); a += 0, 0, 1; c += 0, 2, 1; BOOST_CHECK(zero_suppression_encode(b, &a[0], a.size())); EQUAL_VECTORS(b, c); zero_suppression_decode(&d[0], d.size(), b); EQUAL_VECTORS(a, d); } BOOST_AUTO_TEST_CASE( codec_zero_3c ) { std::vector a, b, c, d(2, 0); a += 0, 0; c += 0, 2; BOOST_CHECK(zero_suppression_encode(b, &a[0], a.size())); EQUAL_VECTORS(b, c); zero_suppression_decode(&d[0], d.size(), b); EQUAL_VECTORS(a, d); } BOOST_AUTO_TEST_CASE( codec_zero_0d ) { std::vector a, b; a += 0; BOOST_CHECK(zero_suppression_encode(b, &a[0], a.size()) == false); } BOOST_AUTO_TEST_CASE( codec_zero_1d ) { std::vector a, b, c, d(3, 0); a += 1, 0, 0; c += 1, 0, 2; BOOST_CHECK(zero_suppression_encode(b, &a[0], a.size())); EQUAL_VECTORS(b, c); zero_suppression_decode(&d[0], d.size(), b); EQUAL_VECTORS(a, d); } BOOST_AUTO_TEST_CASE( codec_zero_2d ) { std::vector a, b, c, d(3, 0); a += 0, 0, 1; c += 0, 2, 1; BOOST_CHECK(zero_suppression_encode(b, &a[0], a.size())); EQUAL_VECTORS(b, c); zero_suppression_decode(&d[0], d.size(), b); EQUAL_VECTORS(a, d); } BOOST_AUTO_TEST_CASE( codec_zero_3d ) { std::vector a, b, c, d(2, 0); a += 0, 0; c += 0, 2; BOOST_CHECK(zero_suppression_encode(b, &a[0], a.size())); EQUAL_VECTORS(b, c); zero_suppression_decode(&d[0], d.size(), b); EQUAL_VECTORS(a, d); } BOOST_AUTO_TEST_CASE( codec_zero_4 ) { std::vector a, b, c, d(5, 0); a += 0, 0, 0, 1, 0; c += 0, 3, 1, 0, 1; BOOST_CHECK(zero_suppression_encode(b, &a[0], a.size())); EQUAL_VECTORS(b, c); zero_suppression_decode(&d[0], d.size(), b); EQUAL_VECTORS(a, d); } BOOST_AUTO_TEST_CASE( codec_zero_5 ) { std::vector a, b, c, d(5, 0); a += 0, 1, 0, 0, 0; c += 0, 1, 1, 0, 3; BOOST_CHECK(zero_suppression_encode(b, &a[0], a.size())); EQUAL_VECTORS(b, c); zero_suppression_decode(&d[0], d.size(), b); EQUAL_VECTORS(a, d); } BOOST_AUTO_TEST_CASE( codec_zero_6 ) { std::vector a(255, 0), b, c, d(255, 0); c += 0, 255; BOOST_CHECK(zero_suppression_encode(b, &a[0], a.size())); EQUAL_VECTORS(b, c); zero_suppression_decode(&d[0], d.size(), b); EQUAL_VECTORS(a, d); } BOOST_AUTO_TEST_CASE( codec_zero_7 ) { std::vector a(256, 0), b, c, d(256, 0); c += 0, 0; BOOST_CHECK(zero_suppression_encode(b, &a[0], a.size())); EQUAL_VECTORS(b, c); zero_suppression_decode(&d[0], d.size(), b); EQUAL_VECTORS(a, d); } BOOST_AUTO_TEST_CASE( codec_zero_8 ) { std::vector a(257, 0), b, c, d(257, 0); c += 0, 0, 0, 1; BOOST_CHECK(zero_suppression_encode(b, &a[0], a.size())); EQUAL_VECTORS(b, c); zero_suppression_decode(&d[0], d.size(), b); EQUAL_VECTORS(a, d); } BOOST_AUTO_TEST_CASE( codec_zero_9 ) { std::vector a(1000, 0), b, c, d(1000, 0); c += 0, 0, 0, 0, 0, 0, 0, 232; BOOST_CHECK(zero_suppression_encode(b, &a[0], a.size())); EQUAL_VECTORS(b, c); zero_suppression_decode(&d[0], d.size(), b); EQUAL_VECTORS(a, d); } BOOST_AUTO_TEST_CASE( codec_zero_10 ) { std::vector a(1000, 0), b, c, d(1000, 0); c += 0, 1000; BOOST_CHECK(zero_suppression_encode(b, &a[0], a.size())); EQUAL_VECTORS(b, c); zero_suppression_decode(&d[0], d.size(), b); EQUAL_VECTORS(a, d); } BOOST_AUTO_TEST_CASE( codec_zero_11 ) { std::vector a(65536, 0), b, c, d(65536, 0); c += 0, 0; BOOST_CHECK(zero_suppression_encode(b, &a[0], a.size())); EQUAL_VECTORS(b, c); zero_suppression_decode(&d[0], d.size(), b); EQUAL_VECTORS(a, d); }