Example #1
0
inline void
invoke_reuse(uint32_t symbols, uint32_t symbol_size)
{
    // Common setting
    typename Encoder::factory encoder_factory(symbols, symbol_size);
    typename Decoder::factory decoder_factory(symbols, symbol_size);

    for(uint32_t i = 0; i < 4; ++i)
    {
        uint32_t coders = rand_nonzero(10);

        std::vector<typename Encoder::pointer> encoders;
        std::vector<typename Decoder::pointer> decoders;

        for(uint32_t j = 0; j < coders; ++j)
        {
            encoders.push_back(encoder_factory.build());
            decoders.push_back(decoder_factory.build());

        }

        for(uint32_t j = 0; j < coders; ++j)
        {
            invoke_reuse_helper(encoders[j], decoders[j]);
        }

    }

    return;

    // Test with differing symbols and symbol sizes
    for(uint32_t i = 0; i < 4; ++i)
    {
        uint32_t coders = rand_nonzero(10);

        std::vector<typename Encoder::pointer> encoders;
        std::vector<typename Decoder::pointer> decoders;

        for(uint32_t j = 0; j < coders; ++j)
        {
            uint32_t s = rand_symbols(encoder_factory.max_symbols());
            uint32_t l = rand_symbol_size(encoder_factory.max_symbol_size());

            encoder_factory.set_symbols(s);
            encoder_factory.set_symbol_size(l);
            decoder_factory.set_symbols(s);
            decoder_factory.set_symbol_size(l);

            encoders.push_back(encoder_factory.build());
            decoders.push_back(decoder_factory.build());
        }

        for(uint32_t j = 0; j < coders; ++j)
        {
            invoke_reuse_helper(encoders[j], decoders[j]);
        }

    }

}
Example #2
0
void invoke_object(uint32_t max_symbols,
                   uint32_t max_symbol_size,
                   uint32_t multiplier)
{

    typedef kodo::object_encoder<ObjectData, Encoder, Partitioning>
        object_encoder;

    typedef kodo::object_decoder<Decoder, Partitioning>
        object_decoder;

    typedef Partitioning partitioning;

    uint32_t object_size = rand_nonzero(max_symbols*max_symbol_size*multiplier);

    dummy_object_data data(object_size);
    partitioning p(max_symbols, max_symbol_size, object_size);

    typename Encoder::factory encoder_factory(max_symbols, max_symbol_size);
    typename Decoder::factory decoder_factory(max_symbols, max_symbol_size);

    object_encoder obj_encoder(encoder_factory, data);
    object_decoder obj_decoder(decoder_factory, obj_encoder.object_size());

    EXPECT_EQ(p.blocks(), obj_encoder.encoders());
    EXPECT_EQ(p.blocks(), obj_decoder.decoders());

    EXPECT_TRUE(obj_encoder.encoders() == obj_decoder.decoders());

    EXPECT_EQ(p.object_size(), obj_decoder.object_size());
    EXPECT_EQ(p.object_size(), obj_decoder.object_size());

    for(uint32_t i = 0; i < obj_encoder.encoders(); ++i)
    {
        typename Encoder::pointer encoder = obj_encoder.build(i);
        typename Decoder::pointer decoder = obj_decoder.build(i);

        EXPECT_EQ(p.symbols(i), encoder->symbols());
        EXPECT_EQ(p.symbols(i), decoder->symbols());

        EXPECT_EQ(p.symbol_size(i), encoder->symbol_size());
        EXPECT_EQ(p.symbol_size(i), decoder->symbol_size());

        EXPECT_EQ(p.block_size(i), encoder->block_size());
        EXPECT_EQ(p.block_size(i), decoder->block_size());

        EXPECT_EQ(p.byte_offset(i), encoder->byte_offset());

        EXPECT_EQ(p.bytes_used(i), encoder->bytes_used());
        EXPECT_EQ(p.bytes_used(i), decoder->bytes_used());
    }

}
Example #3
0
/// Tests:
///  - object_encoder::encoders() const
///  - object_decoder::decoders() const
///  - object_encoder::build(uint32_t)
///  - object_decoder::build(uint32_t)
TEST(TestObjectCoder, construct_and_invoke_the_basic_api)
{
    test_object_coders(32, 1600, 2);
    test_object_coders(1, 1600, 2);

    uint32_t symbols = rand_symbols();
    uint32_t symbol_size = rand_symbol_size();

    // Multiplies the data to be encoded so that the object encoder
    // is expected to contain multiplier encoders.
    uint32_t multiplier = rand_nonzero(10);

    test_object_coders(symbols, symbol_size, multiplier);
}
Example #4
0
/// Tests:
///  - storage_reader::size() const
///  - storage_reader::read(pointer, uint32_t, uint32_t)
TEST(TestStorageReader, test_storage_reader)
{
    uint32_t data_size = 1000;

    std::vector<uint8_t> data = random_vector(data_size);
    sak::const_storage data_storage = sak::storage(data);

    kodo::storage_reader<dummy_encoder> reader(data_storage);

    EXPECT_EQ(reader.size(), data_size);

    auto encoder = boost::make_shared<dummy_encoder>();

    reader.read(encoder, 10U, 10U);

    EXPECT_EQ(encoder->m_bytes_used, 10U);
    EXPECT_TRUE(sak::equal(encoder->m_symbol_storage,
                           sak::storage(&data[10], 10U)));

    reader.read(encoder, 57U, 101U);

    EXPECT_EQ(encoder->m_bytes_used, 101U);
    EXPECT_TRUE(sak::equal(encoder->m_symbol_storage,
                           sak::storage(&data[57], 101U)));

    // Try with some random values
    uint32_t random_offset = rand_nonzero(data_size - 1);
    uint32_t random_size = rand_nonzero(data_size - random_offset);

    reader.read(encoder, random_offset, random_size);

    EXPECT_EQ(encoder->m_bytes_used, random_size);
    EXPECT_TRUE(sak::equal(encoder->m_symbol_storage,
                           sak::storage(&data[random_offset], random_size)));

}