Exemplo n.º 1
0
void test_block_codec()
{
    std::vector<size_t> sizes = {1, 16, BlockCodec::block_size - 1, BlockCodec::block_size};
    for (auto size: sizes) {
        std::vector<uint32_t> values(size);
        std::generate(values.begin(), values.end(), []() { return (uint32_t)rand() % (1 << 12); });

        for (size_t tcase = 0; tcase < 2; ++tcase) {
            // test both undefined and given sum_of_values
            uint32_t sum_of_values(-1);
            if (tcase == 1) {
                sum_of_values = std::accumulate(values.begin(), values.end(), 0);
            }
            std::vector<uint8_t> encoded;
            BlockCodec::encode(values.data(), sum_of_values, values.size(), encoded);

            std::vector<uint32_t> decoded(values.size());
            uint8_t const* out = BlockCodec::decode(encoded.data(), decoded.data(),
                                                    sum_of_values, values.size());

            BOOST_REQUIRE_EQUAL(encoded.size(), out - encoded.data());
            BOOST_REQUIRE_EQUAL_COLLECTIONS(values.begin(), values.end(),
                                            decoded.begin(), decoded.end());
        }
    }
}
Exemplo n.º 2
0
void test_block_codec()
{
    std::vector<size_t> sizes = {1, 16, BlockCodec::block_size - 1, BlockCodec::block_size};
    for(size_t mag=1;mag<25;mag++) {
        for (auto size: sizes) {
            std::vector<uint32_t> values(size);
            std::mt19937 gen(12345);
            std::uniform_int_distribution<uint32_t> dis(0, (1<<mag));
            std::generate(values.begin(), values.end(), [&]() { return dis(gen); });
            for (size_t tcase = 0; tcase < 2; ++tcase) {
                // test both undefined and given sum_of_values
                uint32_t sum_of_values(-1);
                if (tcase == 1) {
                    sum_of_values = std::accumulate(values.begin(), values.end(), 0);
                }
                std::vector<uint8_t> encoded;
                BlockCodec::encode(values.data(), sum_of_values, values.size(), encoded);

                std::vector<uint32_t> decoded(values.size() + BlockCodec::overflow);
                uint8_t const* out = BlockCodec::decode(encoded.data(), decoded.data(),
                                                        sum_of_values, values.size());

                BOOST_REQUIRE_EQUAL(encoded.size(), out - encoded.data());
                BOOST_REQUIRE_EQUAL_COLLECTIONS(values.begin(), values.end(),
                                                decoded.begin(), decoded.begin()+ values.size());
            }
        }
    }
}