Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: mockingbirdnest/Principia
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: 9de6bdcca9a2
Choose a base ref
...
head repository: mockingbirdnest/Principia
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: 43037ba09a57
Choose a head ref
  • 3 commits
  • 2 files changed
  • 1 contributor

Commits on Oct 30, 2021

  1. Copy the full SHA
    25f77a9 View commit details
  2. Copy the full SHA
    c074297 View commit details
  3. Merge pull request #3182 from pleroy/Forget

    Fix some bugs related to forgetting
    pleroy authored Oct 30, 2021
    Copy the full SHA
    43037ba View commit details
Showing with 24 additions and 6 deletions.
  1. +16 −5 physics/discrete_traject0ry_body.hpp
  2. +8 −1 physics/discrete_traject0ry_test.cpp
21 changes: 16 additions & 5 deletions physics/discrete_traject0ry_body.hpp
Original file line number Diff line number Diff line change
@@ -269,9 +269,14 @@ void DiscreteTraject0ry<Frame>::ForgetAfter(Instant const& t) {
// Here |sit| designates a segment starting at or after |t|. If |t| is
// exactly at the beginning of the segment,
// |DiscreteTrajectorySegment::ForgetAfter| will leave it empty. In that
// case we drop the segment entirely.
// case we drop the segment entirely, unless it is the only one in the
// trajectory.
if (sit->empty()) {
segments_->erase(sit, segments_->end());
if (sit == segments_->begin()) {
segments_->erase(std::next(sit), segments_->end());
} else {
segments_->erase(sit, segments_->end());
}
segment_by_left_endpoint_.erase(leit, segment_by_left_endpoint_.end());
} else {
segments_->erase(std::next(sit), segments_->end());
@@ -284,7 +289,9 @@ void DiscreteTraject0ry<Frame>::ForgetAfter(Instant const& t) {

template<typename Frame>
void DiscreteTraject0ry<Frame>::ForgetAfter(iterator const it) {
ForgetAfter(it->time);
if (it != end()) {
ForgetAfter(it->time);
}
}

template<typename Frame>
@@ -321,7 +328,11 @@ void DiscreteTraject0ry<Frame>::ForgetBefore(Instant const& t) {

template<typename Frame>
void DiscreteTraject0ry<Frame>::ForgetBefore(iterator const it) {
ForgetBefore(it->time);
if (it == end()) {
clear();
} else {
ForgetBefore(it->time);
}
}

template<typename Frame>
@@ -576,7 +587,7 @@ absl::Status DiscreteTraject0ry<Frame>::ConsistencyStatus() const {
}
}
}
{
if (!segments_->empty()) {
int i = 0;
for (auto sit = segments_->cbegin();
sit != std::prev(segments_->cend());
9 changes: 8 additions & 1 deletion physics/discrete_traject0ry_test.cpp
Original file line number Diff line number Diff line change
@@ -467,6 +467,9 @@ TEST_F(DiscreteTraject0ryTest, DeleteSegments) {
TEST_F(DiscreteTraject0ryTest, ForgetAfter) {
auto trajectory = MakeTrajectory();

trajectory.ForgetAfter(trajectory.end());
EXPECT_EQ(3, trajectory.segments().size());

trajectory.ForgetAfter(t0_ + 12 * Second);
EXPECT_EQ(3, trajectory.segments().size());
EXPECT_EQ(t0_, trajectory.begin()->time);
@@ -482,8 +485,9 @@ TEST_F(DiscreteTraject0ryTest, ForgetAfter) {
EXPECT_EQ(t0_, trajectory.begin()->time);
EXPECT_EQ(t0_ + 4 * Second, trajectory.rbegin()->time);

trajectory.ForgetAfter(t0_ - 99 * Second);
trajectory.ForgetAfter(t0_);
EXPECT_TRUE(trajectory.empty());
EXPECT_EQ(1, trajectory.segments().size());
}

TEST_F(DiscreteTraject0ryTest, ForgetBefore) {
@@ -535,6 +539,9 @@ TEST_F(DiscreteTraject0ryTest, ForgetBefore) {

trajectory.ForgetBefore(t0_ + 99 * Second);
EXPECT_TRUE(trajectory.empty());

trajectory.ForgetBefore(trajectory.end());
EXPECT_TRUE(trajectory.empty());
}

TEST_F(DiscreteTraject0ryTest, TMinTMaxEvaluate) {