From 6009e06f1134f6907d8384da5077b8a307c400f8 Mon Sep 17 00:00:00 2001 From: pleroy Date: Sat, 30 Oct 2021 01:22:44 +0200 Subject: [PATCH] Serialization of empty segments. --- physics/discrete_trajectory_segment_body.hpp | 6 ++++-- physics/discrete_trajectory_segment_test.cpp | 12 ++++++++++++ 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/physics/discrete_trajectory_segment_body.hpp b/physics/discrete_trajectory_segment_body.hpp index d2f51af920..4a13c69a5d 100644 --- a/physics/discrete_trajectory_segment_body.hpp +++ b/physics/discrete_trajectory_segment_body.hpp @@ -213,8 +213,10 @@ void DiscreteTrajectorySegment::WriteToMessage( for (auto const it : exact) { exact_set.insert(&*it); } - exact_set.insert(&*timeline_.cbegin()); - exact_set.insert(&*timeline_.crbegin()); + if (!timeline_.empty()) { + exact_set.insert(&*timeline_.cbegin()); + exact_set.insert(&*timeline_.crbegin()); + } // Serialize the exact points. for (auto const* ptr : exact_set) { diff --git a/physics/discrete_trajectory_segment_test.cpp b/physics/discrete_trajectory_segment_test.cpp index b42499dec4..b23ac502db 100644 --- a/physics/discrete_trajectory_segment_test.cpp +++ b/physics/discrete_trajectory_segment_test.cpp @@ -443,5 +443,17 @@ TEST_F(DiscreteTrajectorySegmentTest, SerializationRoundTrip) { EXPECT_THAT(message2, EqualsProto(message1)); } +TEST_F(DiscreteTrajectorySegmentTest, SerializationEmpty) { + DiscreteTrajectorySegment segment; + serialization::DiscreteTrajectorySegment message; + segment.WriteToMessage(&message, /*exact=*/{}); + auto const deserialized_segments = MakeSegments(1); + auto& deserialized_segment = *deserialized_segments->begin(); + deserialized_segment = DiscreteTrajectorySegment::ReadFromMessage( + message, + /*self=*/MakeIterator(deserialized_segments.get(), + deserialized_segments->begin())); +} + } // namespace physics } // namespace principia