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: 3838ec75ea62
Choose a base ref
...
head repository: mockingbirdnest/Principia
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: 7bf8c909bca3
Choose a head ref
  • 4 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
  4. Copy the full SHA
    7bf8c90 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) {