Add datalayout tests

This commit is contained in:
Patrick Niklaus 2018-03-23 12:20:05 +00:00 committed by Patrick Niklaus
parent 4a9fdca7b2
commit 9e97748700
2 changed files with 54 additions and 13 deletions

View File

@ -8,7 +8,7 @@
#include <cmath>
BOOST_AUTO_TEST_SUITE(serialization)
BOOST_AUTO_TEST_SUITE(data_layout)
using namespace osrm;
using namespace osrm::storage;
@ -17,16 +17,17 @@ BOOST_AUTO_TEST_CASE(layout_write_test)
{
DataLayout layout;
Block block_1 {20, 8*20};
Block block_2 {1, 4*1};
Block block_3 {100, static_cast<std::uint64_t>(std::ceil(100/8.))};
Block block_1{20, 8 * 20};
Block block_2{1, 4 * 1};
Block block_3{100, static_cast<std::uint64_t>(std::ceil(100 / 64.))};
layout.SetBlock("block1", block_1);
layout.SetBlock("block2", block_2);
layout.SetBlock("block3", block_3);
// Canary and alignment change layout size
BOOST_CHECK_GT(layout.GetSizeOfLayout(), block_1.byte_size + block_2.byte_size + block_3.byte_size);
BOOST_CHECK_GT(layout.GetSizeOfLayout(),
block_1.byte_size + block_2.byte_size + block_3.byte_size);
BOOST_CHECK_EQUAL(layout.GetBlockSize("block1"), block_1.byte_size);
BOOST_CHECK_EQUAL(layout.GetBlockSize("block2"), block_2.byte_size);
@ -39,16 +40,27 @@ BOOST_AUTO_TEST_CASE(layout_write_test)
{
auto block_1_ptr = layout.GetBlockPtr<std::uint64_t, true>(buffer.data(), "block1");
auto block_2_ptr = layout.GetBlockPtr<std::uint32_t, true>(buffer.data(), "block2");
auto block_3_ptr = layout.GetBlockPtr<unsigned char, true>(buffer.data(), "block3");
auto block_3_ptr = layout.GetBlockPtr<std::uint64_t, true>(buffer.data(), "block3");
BOOST_CHECK_LT(smallest_addr, block_1_ptr);
BOOST_CHECK_GT(biggest_addr, block_1_ptr + layout.GetBlockEntries("block1"));
BOOST_CHECK_LT(smallest_addr, block_2_ptr);
BOOST_CHECK_GT(biggest_addr, block_2_ptr + layout.GetBlockEntries("block3"));
BOOST_CHECK_LT(smallest_addr, block_3_ptr);
BOOST_CHECK_GT(biggest_addr, block_3_ptr + layout.GetBlockEntries("block3"));
BOOST_CHECK_LT(reinterpret_cast<std::size_t>(smallest_addr),
reinterpret_cast<std::size_t>(block_1_ptr));
BOOST_CHECK_GT(
reinterpret_cast<std::size_t>(biggest_addr),
reinterpret_cast<std::size_t>(block_1_ptr + layout.GetBlockEntries("block1")));
BOOST_CHECK_LT(reinterpret_cast<std::size_t>(smallest_addr),
reinterpret_cast<std::size_t>(block_2_ptr));
BOOST_CHECK_GT(
reinterpret_cast<std::size_t>(biggest_addr),
reinterpret_cast<std::size_t>(block_2_ptr + layout.GetBlockEntries("block2")));
BOOST_CHECK_LT(reinterpret_cast<std::size_t>(smallest_addr),
reinterpret_cast<std::size_t>(block_3_ptr));
BOOST_CHECK_GT(reinterpret_cast<std::size_t>(biggest_addr),
reinterpret_cast<std::size_t>(
block_3_ptr + static_cast<std::size_t>(
std::ceil(layout.GetBlockEntries("block3") / 64))));
}
}
BOOST_AUTO_TEST_SUITE_END()

View File

@ -115,4 +115,33 @@ BOOST_AUTO_TEST_CASE(tar_serialize_deallocting_vector)
}
}
BOOST_AUTO_TEST_CASE(buffer_serialize_map)
{
std::map<std::string, std::int32_t> map = {
{"foo", 1},
{"barrrr", 2},
{"bal", 3},
{"bazbar", 4},
{"foofofofo", 5},
};
std::string buffer;
{
io::BufferWriter writer;
storage::serialization::write(writer, map);
buffer = writer.GetBuffer();
}
std::map<std::string, std::int32_t> result;
{
io::BufferReader reader(buffer);
storage::serialization::read(reader, result);
}
for (auto &pair : map)
{
BOOST_CHECK_EQUAL(pair.second, result[pair.first]);
}
}
BOOST_AUTO_TEST_SUITE_END()