00001 #include "util/bit_packing.hh"
00002
00003 #define BOOST_TEST_MODULE BitPackingTest
00004 #include <boost/test/unit_test.hpp>
00005
00006 #include <cstring>
00007
00008 namespace util {
00009 namespace {
00010
00011 const uint64_t test57 = 0x123456789abcdefULL;
00012 const uint32_t test25 = 0x1234567;
00013
00014 BOOST_AUTO_TEST_CASE(ZeroBit57) {
00015 char mem[16];
00016 memset(mem, 0, sizeof(mem));
00017 WriteInt57(mem, 0, 57, test57);
00018 BOOST_CHECK_EQUAL(test57, ReadInt57(mem, 0, 57, (1ULL << 57) - 1));
00019 }
00020
00021 BOOST_AUTO_TEST_CASE(EachBit57) {
00022 char mem[16];
00023 for (uint8_t b = 0; b < 8; ++b) {
00024 memset(mem, 0, sizeof(mem));
00025 WriteInt57(mem, b, 57, test57);
00026 BOOST_CHECK_EQUAL(test57, ReadInt57(mem, b, 57, (1ULL << 57) - 1));
00027 }
00028 }
00029
00030 BOOST_AUTO_TEST_CASE(Consecutive57) {
00031 char mem[57+8];
00032 memset(mem, 0, sizeof(mem));
00033 for (uint64_t b = 0; b < 57 * 8; b += 57) {
00034 WriteInt57(mem, b, 57, test57);
00035 BOOST_CHECK_EQUAL(test57, ReadInt57(mem, b, 57, (1ULL << 57) - 1));
00036 }
00037 for (uint64_t b = 0; b < 57 * 8; b += 57) {
00038 BOOST_CHECK_EQUAL(test57, ReadInt57(mem, b, 57, (1ULL << 57) - 1));
00039 }
00040 }
00041
00042 BOOST_AUTO_TEST_CASE(Consecutive25) {
00043 char mem[25+8];
00044 memset(mem, 0, sizeof(mem));
00045 for (uint64_t b = 0; b < 25 * 8; b += 25) {
00046 WriteInt25(mem, b, 25, test25);
00047 BOOST_CHECK_EQUAL(test25, ReadInt25(mem, b, 25, (1ULL << 25) - 1));
00048 }
00049 for (uint64_t b = 0; b < 25 * 8; b += 25) {
00050 BOOST_CHECK_EQUAL(test25, ReadInt25(mem, b, 25, (1ULL << 25) - 1));
00051 }
00052 }
00053
00054 BOOST_AUTO_TEST_CASE(Sanity) {
00055 BitPackingSanity();
00056 }
00057
00058 }
00059 }