From 22d1f63ac067ec22d56598348bb4c4b0ac5b13eb Mon Sep 17 00:00:00 2001 From: Aditya Mandalika Date: Fri, 13 Sep 2019 01:58:00 -0700 Subject: [PATCH 1/4] raise failing test and fix --- src/common/VanDerCorput.cpp | 2 +- tests/common/test_VanDerCorput.cpp | 17 +++++++---------- 2 files changed, 8 insertions(+), 11 deletions(-) diff --git a/src/common/VanDerCorput.cpp b/src/common/VanDerCorput.cpp index f5a40e2f64..796cb67e2d 100644 --- a/src/common/VanDerCorput.cpp +++ b/src/common/VanDerCorput.cpp @@ -164,7 +164,7 @@ void VanDerCorput::const_iterator::increment() { ++mN; mCurr = (*mSeq)[mN]; - if (mCurr.second <= mSeq->mMinResolution) + if (mCurr.second*mSeq->mSpan <= mSeq->mMinResolution) { mFinalIter = true; } diff --git a/tests/common/test_VanDerCorput.cpp b/tests/common/test_VanDerCorput.cpp index 791c640d3c..d3baeeb0e6 100644 --- a/tests/common/test_VanDerCorput.cpp +++ b/tests/common/test_VanDerCorput.cpp @@ -99,16 +99,13 @@ TEST(VanDerCorput, FirstNineIteratorValuesWithEndpoints) EXPECT_DOUBLE_EQ(7. / 8, *itr); } -TEST(VanDerCorput, ScaleProperlyOverSpan) -{ - VanDerCorput vdc{2}; - EXPECT_DOUBLE_EQ(2.0 / 2, vdc[0].first); - EXPECT_DOUBLE_EQ(2.0 / 4, vdc[1].first); - EXPECT_DOUBLE_EQ(6.0 / 4, vdc[2].first); - EXPECT_DOUBLE_EQ(2.0 / 8, vdc[3].first); - EXPECT_DOUBLE_EQ(10. / 8, vdc[4].first); - EXPECT_DOUBLE_EQ(6.0 / 8, vdc[5].first); - EXPECT_DOUBLE_EQ(14. / 8, vdc[6].first); +TEST(VanDerCorput, ScaleProperlyOverSpanWithResolution) +{ + VanDerCorput vdc{2, false, false, 0.5}; + EXPECT_EQ(vdc.getLength(), 3); + EXPECT_DOUBLE_EQ(1.0, vdc[0].first); + EXPECT_DOUBLE_EQ(0.5, vdc[1].first); + EXPECT_DOUBLE_EQ(1.5, vdc[2].first); } TEST(VanDerCorput, ScaleProperlyOverSpanWithEndpoints) From 73ef1d240d2e7752c977452b143a45a0850355b0 Mon Sep 17 00:00:00 2001 From: Aditya Vamsikrishna Mandalika Date: Mon, 7 Oct 2019 20:56:33 -0400 Subject: [PATCH 2/4] corrections + unit test --- src/common/VanDerCorput.cpp | 11 ++++--- tests/common/test_VanDerCorput.cpp | 49 ++++++++++++++++++++++++++---- 2 files changed, 49 insertions(+), 11 deletions(-) diff --git a/src/common/VanDerCorput.cpp b/src/common/VanDerCorput.cpp index 796cb67e2d..11eea928f6 100644 --- a/src/common/VanDerCorput.cpp +++ b/src/common/VanDerCorput.cpp @@ -45,12 +45,12 @@ pair VanDerCorput::operator[](int n) const if (n == 0) { val_res.first = 0.0; - val_res.second = mSpan; + val_res.second = 1.0; } else if (n == 1) { val_res.first = 1.0; - val_res.second = mSpan; + val_res.second = 1.0; } else { @@ -60,12 +60,12 @@ pair VanDerCorput::operator[](int n) const else if (mIncludeStartpoint && n == 0) { val_res.first = 0.0; - val_res.second = mSpan; + val_res.second = 1.0; } else if (mIncludeEndpoint && n == 0) { val_res.first = 1.0; - val_res.second = mSpan; + val_res.second = 1.0; } else { @@ -80,6 +80,7 @@ pair VanDerCorput::operator[](int n) const } val_res.first *= mSpan; + val_res.second *= mSpan; return val_res; } @@ -164,7 +165,7 @@ void VanDerCorput::const_iterator::increment() { ++mN; mCurr = (*mSeq)[mN]; - if (mCurr.second*mSeq->mSpan <= mSeq->mMinResolution) + if (mCurr.second <= mSeq->mMinResolution) { mFinalIter = true; } diff --git a/tests/common/test_VanDerCorput.cpp b/tests/common/test_VanDerCorput.cpp index d3baeeb0e6..f95a4d84c8 100644 --- a/tests/common/test_VanDerCorput.cpp +++ b/tests/common/test_VanDerCorput.cpp @@ -99,13 +99,16 @@ TEST(VanDerCorput, FirstNineIteratorValuesWithEndpoints) EXPECT_DOUBLE_EQ(7. / 8, *itr); } -TEST(VanDerCorput, ScaleProperlyOverSpanWithResolution) +TEST(VanDerCorput, ScaleProperlyOverSpan) { - VanDerCorput vdc{2, false, false, 0.5}; - EXPECT_EQ(vdc.getLength(), 3); - EXPECT_DOUBLE_EQ(1.0, vdc[0].first); - EXPECT_DOUBLE_EQ(0.5, vdc[1].first); - EXPECT_DOUBLE_EQ(1.5, vdc[2].first); + VanDerCorput vdc{2}; + EXPECT_DOUBLE_EQ(2.0 / 2, vdc[0].first); + EXPECT_DOUBLE_EQ(2.0 / 4, vdc[1].first); + EXPECT_DOUBLE_EQ(6.0 / 4, vdc[2].first); + EXPECT_DOUBLE_EQ(2.0 / 8, vdc[3].first); + EXPECT_DOUBLE_EQ(10. / 8, vdc[4].first); + EXPECT_DOUBLE_EQ(6.0 / 8, vdc[5].first); + EXPECT_DOUBLE_EQ(14. / 8, vdc[6].first); } TEST(VanDerCorput, ScaleProperlyOverSpanWithEndpoints) @@ -213,3 +216,37 @@ TEST(VanDerCorput, IterationEndsWhenMinimumResolutionReached) EXPECT_EQ(7, iterations); EXPECT_EQ(7, vdc_0_125.getLength()); } + +TEST(VanDerCorput, ScaleAndIterateProperlyOverSpanWithResolution) +{ + // Check that with a non-unit span, iteration stops appropriately. + VanDerCorput vdc{2, false, false, 0.25}; + int iterations = 0; + EXPECT_NO_THROW({ + for (VanDerCorput::const_iterator itr = vdc.begin(); itr != vdc.end(); + ++itr) + { + ++iterations; + } + }); + EXPECT_EQ(7, iterations); + EXPECT_EQ(7, vdc.getLength()); + + // Check that with a non-unit span, the vdc values are correct. + EXPECT_DOUBLE_EQ(1.00, vdc[0].first); + EXPECT_DOUBLE_EQ(0.50, vdc[1].first); + EXPECT_DOUBLE_EQ(1.50, vdc[2].first); + EXPECT_DOUBLE_EQ(0.25, vdc[3].first); + EXPECT_DOUBLE_EQ(1.25, vdc[4].first); + EXPECT_DOUBLE_EQ(0.75, vdc[5].first); + EXPECT_DOUBLE_EQ(1.75, vdc[6].first); + + // Check that with a non-unit span, the resolution is computed correctly. + EXPECT_DOUBLE_EQ(1.00, vdc[0].second); + EXPECT_DOUBLE_EQ(1.00, vdc[1].second); + EXPECT_DOUBLE_EQ(0.50, vdc[2].second); + EXPECT_DOUBLE_EQ(0.50, vdc[3].second); + EXPECT_DOUBLE_EQ(0.50, vdc[4].second); + EXPECT_DOUBLE_EQ(0.50, vdc[5].second); + EXPECT_DOUBLE_EQ(0.25, vdc[6].second); +} \ No newline at end of file From db233e61f2043c62ce9d1bc583cb2b156b86f20e Mon Sep 17 00:00:00 2001 From: Aditya Vamsikrishna Mandalika Date: Mon, 7 Oct 2019 21:00:52 -0400 Subject: [PATCH 3/4] update changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index e2b3509f4b..2a82cc6339 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,7 @@ * Cleaned up doxygen errors: [#357](https://github.com/personalrobotics/aikido/pull/357) * Fixed bug in compiling with Boost 1.58 on Kinetic + Xenial: [#490](https://github.com/personalrobotics/aikido/pull/490) * Fixed bug in Interpolated::addWaypoint(): [#483](https://github.com/personalrobotics/aikido/pull/483) + * Fixed bug in VanDerCorput sequence generator in handling non-unit Span: [#552](https://github.com/personalrobotics/aikido/pull/552) * Distance From 84d78563360a86457bc220682c10fec1937b2f12 Mon Sep 17 00:00:00 2001 From: Aditya Vamsikrishna Mandalika Date: Tue, 8 Oct 2019 14:17:15 -0400 Subject: [PATCH 4/4] Update CHANGELOG.md Co-Authored-By: Brian Hou --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2a82cc6339..ef21d1a258 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,7 +9,7 @@ * Cleaned up doxygen errors: [#357](https://github.com/personalrobotics/aikido/pull/357) * Fixed bug in compiling with Boost 1.58 on Kinetic + Xenial: [#490](https://github.com/personalrobotics/aikido/pull/490) * Fixed bug in Interpolated::addWaypoint(): [#483](https://github.com/personalrobotics/aikido/pull/483) - * Fixed bug in VanDerCorput sequence generator in handling non-unit Span: [#552](https://github.com/personalrobotics/aikido/pull/552) + * Fixed bug in VanDerCorput sequence generator to handle non-unit span: [#552](https://github.com/personalrobotics/aikido/pull/552) * Distance