Skip to content

Commit 418b04e

Browse files
authored
Merge pull request #3242 from pleroy/TMin
Fix t_min for a trajectory starting with empty segments
2 parents bbb86fb + fe5e392 commit 418b04e

File tree

2 files changed

+17
-1
lines changed

2 files changed

+17
-1
lines changed

physics/discrete_trajectory_body.hpp

+11-1
Original file line numberDiff line numberDiff line change
@@ -429,11 +429,21 @@ void DiscreteTrajectory<Frame>::Merge(DiscreteTrajectory<Frame> trajectory) {
429429

430430
template<typename Frame>
431431
Instant DiscreteTrajectory<Frame>::t_min() const {
432-
return segments_->front().t_min();
432+
if (empty()) {
433+
return InfiniteFuture;
434+
}
435+
for (auto sit = segments_->begin();; ++sit) {
436+
if (!sit->empty()) {
437+
return sit->t_min();
438+
}
439+
}
433440
}
434441

435442
template<typename Frame>
436443
Instant DiscreteTrajectory<Frame>::t_max() const {
444+
if (empty()) {
445+
return InfinitePast;
446+
}
437447
return segments_->back().t_max();
438448
}
439449

physics/discrete_trajectory_test.cpp

+6
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ using geometry::Displacement;
3232
using geometry::Frame;
3333
using geometry::Handedness;
3434
using geometry::Inertial;
35+
using geometry::InfiniteFuture;
3536
using geometry::Instant;
3637
using geometry::Velocity;
3738
using quantities::AngularFrequency;
@@ -523,16 +524,19 @@ TEST_F(DiscreteTrajectoryTest, ForgetBefore) {
523524
EXPECT_EQ(3, trajectory.segments().size());
524525
EXPECT_EQ(t0_ + 3 * Second, trajectory.begin()->time);
525526
EXPECT_EQ(t0_ + 14 * Second, trajectory.rbegin()->time);
527+
EXPECT_EQ(t0_ + 3 * Second, trajectory.t_min());
526528

527529
trajectory.ForgetBefore(t0_ + 6.1 * Second);
528530
EXPECT_EQ(3, trajectory.segments().size());
529531
EXPECT_EQ(t0_ + 7 * Second, trajectory.begin()->time);
530532
EXPECT_EQ(t0_ + 14 * Second, trajectory.rbegin()->time);
533+
EXPECT_EQ(t0_ + 7 * Second, trajectory.t_min());
531534

532535
trajectory.ForgetBefore(t0_ + 9 * Second);
533536
EXPECT_EQ(3, trajectory.segments().size());
534537
EXPECT_EQ(t0_ + 9 * Second, trajectory.begin()->time);
535538
EXPECT_EQ(t0_ + 14 * Second, trajectory.rbegin()->time);
539+
EXPECT_EQ(t0_ + 9 * Second, trajectory.t_min());
536540

537541
// The trajectory now has empty segments, so let's check that we can properly
538542
// iterate over those.
@@ -565,9 +569,11 @@ TEST_F(DiscreteTrajectoryTest, ForgetBefore) {
565569

566570
trajectory.ForgetBefore(t0_ + 99 * Second);
567571
EXPECT_TRUE(trajectory.empty());
572+
EXPECT_EQ(InfiniteFuture, trajectory.t_min());
568573

569574
trajectory.ForgetBefore(trajectory.end());
570575
EXPECT_TRUE(trajectory.empty());
576+
EXPECT_EQ(InfiniteFuture, trajectory.t_min());
571577
}
572578

573579
TEST_F(DiscreteTrajectoryTest, Merge) {

0 commit comments

Comments
 (0)