diff --git a/coding/streams_sink.hpp b/coding/streams_sink.hpp index 3e44c870c4..85f7dc22ad 100644 --- a/coding/streams_sink.hpp +++ b/coding/streams_sink.hpp @@ -85,6 +85,11 @@ namespace stream WriteToSink(m_writer, t); return (*this); } + SinkWriterStream & operator << (uint16_t t) + { + WriteToSink(m_writer, t); + return (*this); + } SinkWriterStream & operator << (int64_t t) { WriteToSink(m_writer, t); @@ -95,6 +100,11 @@ namespace stream WriteToSink(m_writer, t); return (*this); } + SinkWriterStream & operator << (int16_t t) + { + WriteToSink(m_writer, t); + return (*this); + } SinkWriterStream & operator << (bool t) { diff --git a/coding/write_to_sink.hpp b/coding/write_to_sink.hpp index cf64f9d17f..1f291d9c8b 100644 --- a/coding/write_to_sink.hpp +++ b/coding/write_to_sink.hpp @@ -25,6 +25,12 @@ template void WriteToSink(TSink & sink, uint16_t v) sink.Write(&t, 2); } +template void WriteToSink(TSink & sink, int16_t v) +{ + int16_t t = SwapIfBigEndian(v); + sink.Write(&t, 2); +} + template void WriteToSink(TSink & sink, int32_t v) { int32_t t = SwapIfBigEndian(v); diff --git a/storage/storage_tests/country_test.cpp b/storage/storage_tests/country_test.cpp index 5c6898575d..3cb0e56c1b 100644 --- a/storage/storage_tests/country_test.cpp +++ b/storage/storage_tests/country_test.cpp @@ -40,3 +40,41 @@ UNIT_TEST(CountrySerialization) // FileWriter::DeleteFile(TEST_FILE_NAME); } + +UNIT_TEST(TilesSerialization) +{ + static string const FILE = "tiles_serialization_test"; + int32_t const level = 8; + TDataFiles::value_type const v1(55000, 55000); + TDataFiles::value_type const v2(15000, 15000); + TDataFiles::value_type const v3(5, 5); + TCommonFiles::value_type const vv1("str2", 456); + TCommonFiles::value_type const vv2("str1", 123); + { + TDataFiles dataFiles; + dataFiles.push_back(v1); + dataFiles.push_back(v2); + dataFiles.push_back(v3); + TCommonFiles commonFiles; + commonFiles.push_back(vv1); + commonFiles.push_back(vv2); + + SaveTiles(FILE, level, dataFiles, commonFiles); + } + + { + TTilesContainer tiles; + TEST( LoadTiles(tiles, FILE), ()); + TEST_EQUAL( tiles.size(), 5, ()); + TEST_EQUAL( tiles[0], TTilesContainer::value_type( + CountryCellId::FromBitsAndLevel(5, level).ToString(), 5), ()); + TEST_EQUAL( tiles[1], TTilesContainer::value_type( + CountryCellId::FromBitsAndLevel(15000, level).ToString(), 15000), ()); + TEST_EQUAL( tiles[2], TTilesContainer::value_type( + CountryCellId::FromBitsAndLevel(55000, level).ToString(), 55000), ()); + TEST_EQUAL( tiles[3], TTilesContainer::value_type("str1", 123), ()); + TEST_EQUAL( tiles[4], TTilesContainer::value_type("str2", 456), ()); + } + + FileWriter::DeleteFile(FILE); +}