diff --git a/CHANGELOG.md b/CHANGELOG.md index 7d71c2845c..434a573cfe 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,10 @@ ### 0.3.0 (201X-XX-XX) +* Common + + * Fixed bug in StepSequence::getMaxSteps(): [#305](https://github.com/personalrobotics/aikido/pull/305) + * State Space * Refactored JointStateSpace and MetaSkeletonStateSpace: [#278](https://github.com/personalrobotics/aikido/pull/278) diff --git a/src/common/StepSequence.cpp b/src/common/StepSequence.cpp index 828983f740..caaf37416b 100644 --- a/src/common/StepSequence.cpp +++ b/src/common/StepSequence.cpp @@ -59,24 +59,12 @@ StepSequence::const_iterator StepSequence::end() int StepSequence::getMaxSteps() const { int numSteps = (mEndPoint - mStartPoint) / mStepSize; - if (!mIncludeEndpoints) - { - // Return numSteps + 1 for the start - return numSteps + 1; - } - else + + if (std::abs(mStartPoint + mStepSize * numSteps - mEndPoint) > 1e-7) { - if (fabs(mStartPoint + mStepSize * numSteps - mEndPoint) < 1e-7) - { - // Return numSteps + 1 for the start (endpt already included) - return numSteps + 1; - } - else - { - // Return numSteps + 1 for the start + 1 for the end - return numSteps + 2; - } + numSteps++; } + return numSteps + mIncludeEndpoints; } //============================================================================== diff --git a/tests/common/test_StepSequence.cpp b/tests/common/test_StepSequence.cpp index c068393342..4c299ce1c7 100644 --- a/tests/common/test_StepSequence.cpp +++ b/tests/common/test_StepSequence.cpp @@ -72,6 +72,15 @@ TEST(StepSequence, IteratorStop) } EXPECT_EQ(5, count); + + std::size_t count2 = 0; + StepSequence seq2(0.2, false); + for (double v : seq2) + { + DART_UNUSED(v); + count2++; + } + EXPECT_EQ(5, count2); } TEST(StepSequence, IteratorStopAlternateRange) @@ -93,7 +102,7 @@ TEST(StepSequence, MaxSteps) EXPECT_EQ(6, seq1.getMaxSteps()); StepSequence seq2(0.2, false); - EXPECT_EQ(6, seq2.getMaxSteps()); + EXPECT_EQ(5, seq2.getMaxSteps()); StepSequence seq3(0.3, true); EXPECT_EQ(5, seq3.getMaxSteps()); @@ -108,11 +117,11 @@ TEST(StepSequence, MaxStepsAlternateRanges) EXPECT_EQ(21, seq1.getMaxSteps()); StepSequence seq2(0.2, false, 3, 7); - EXPECT_EQ(21, seq2.getMaxSteps()); + EXPECT_EQ(20, seq2.getMaxSteps()); StepSequence seq3(0.3, true, 2, 4); EXPECT_EQ(8, seq3.getMaxSteps()); StepSequence seq4(0.3, false, 2, 5); - EXPECT_EQ(11, seq4.getMaxSteps()); + EXPECT_EQ(10, seq4.getMaxSteps()); }