diff --git a/routing_common/routing_common_tests/transit_test.cpp b/routing_common/routing_common_tests/transit_test.cpp index 8e258b5c65..49fcb1ecee 100644 --- a/routing_common/routing_common_tests/transit_test.cpp +++ b/routing_common/routing_common_tests/transit_test.cpp @@ -47,6 +47,40 @@ void TestSerialization(Obj const & obj) TestCommonSerialization>>, Deserializer>>(obj); } + +UNIT_TEST(Transit_HeaderRewriting) +{ + TransitHeader const bigHeader(1 /* version */, 1000 /* gatesOffset */, 200000 /* edgesOffset */, + 300000 /* transfersOffset */, 400000 /* linesOffset */, + 5000000 /* shapesOffset */, 6000000 /* networksOffset */, + 700000000 /* endOffset */); + + TransitHeader header; + vector buffer; + MemWriter> writer(buffer); + + // Writing. + auto const startOffset = writer.Pos(); + FixSizeNumberSerializer>> serializer(writer); + header.Visit(serializer); + auto const endOffset = writer.Pos(); + + // Rewriting. + header = bigHeader; + + writer.Seek(startOffset); + header.Visit(serializer); + writer.Seek(endOffset); + + // Reading. + MemReader reader(buffer.data(), buffer.size()); + ReaderSource src(reader); + TransitHeader deserializedHeader; + FixSizeNumberDeserializer> deserializer(src); + deserializedHeader.Visit(deserializer); + + TEST(deserializedHeader.IsEqualForTesting(bigHeader), (deserializedHeader, bigHeader)); +} } // namespace transit } // namespace routing diff --git a/routing_common/transit_types.hpp b/routing_common/transit_types.hpp index 395da67b9e..915132ed69 100644 --- a/routing_common/transit_types.hpp +++ b/routing_common/transit_types.hpp @@ -48,7 +48,8 @@ Weight constexpr kInvalidWeight = -1.0; std::string const & osmIdsToFeatureIdPath, \ std::string const & transitDir); \ template \ - void friend TestCommonSerialization(Obj const & obj); \ + friend void TestCommonSerialization(Obj const & obj); \ + friend void UnitTest_Transit_HeaderRewriting(); \ struct TransitHeader {