unittest ContainerBasePrivate::position()

This commit is contained in:
Robert Haschke 2018-02-22 13:55:08 +01:00
parent 9cd6efe46f
commit 6a3456f961
3 changed files with 36 additions and 2 deletions

View File

@ -73,7 +73,7 @@ public:
inline const container_type& children() const { return children_; }
/** Retrieve iterator into children_ pointing to indexed element.
* Negative index counts from end().
* Negative index counts from end(), i.e. -1 is end(), -2 is --end(), etc.
* Contrary to std::advance(), iterator limits are considered. */
const_iterator position(int index) const;

View File

@ -65,7 +65,7 @@ ContainerBasePrivate::const_iterator ContainerBasePrivate::position(int index) c
container_type::const_reverse_iterator from_end = children_.rbegin();
for (auto end = children_.rend(); index < 0 && from_end != end; ++index)
++from_end;
position = from_end.base();
position = index < 0 ? children_.end() : from_end.base();
}
return position;
}

View File

@ -66,6 +66,40 @@ void append(ContainerBase& c, const std::initializer_list<StageType>& types, int
}
class NamedStage : public GeneratorMockup {
public:
NamedStage(const std::string& name) : GeneratorMockup() {
setName(name);
}
};
TEST(ContainerBase, position) {
SerialContainer s;
SerialContainerPrivate *impl = s.pimpl();
EXPECT_EQ(impl->position(0), impl->children().end());
EXPECT_EQ(impl->position(1), impl->children().end());
EXPECT_EQ(impl->position(-1), impl->children().end());
EXPECT_EQ(impl->position(-2), impl->children().end());
s.insert(std::make_unique<NamedStage>("0"));
EXPECT_STREQ((*impl->position(0))->name().c_str(), "0");
EXPECT_EQ(impl->position(-1), impl->children().end());
EXPECT_STREQ((*impl->position(-2))->name().c_str(), "0");
EXPECT_EQ(impl->position(-3), impl->children().end());
s.insert(std::make_unique<NamedStage>("1"));
EXPECT_STREQ((*impl->position(0))->name().c_str(), "0");
EXPECT_STREQ((*impl->position(1))->name().c_str(), "1");
EXPECT_EQ(impl->position(2), impl->children().end());
EXPECT_EQ(impl->position(-1), impl->children().end());
EXPECT_STREQ((*impl->position(-2))->name().c_str(), "1");
EXPECT_STREQ((*impl->position(-3))->name().c_str(), "0");
EXPECT_EQ(impl->position(-4), impl->children().end());
}
class SerialTest : public ::testing::Test {
protected:
moveit::core::RobotModelConstPtr robot_model;