178 lines
4.4 KiB
C++
178 lines
4.4 KiB
C++
/*
|
|
* LineIteratorTest.cpp
|
|
*
|
|
* Created on: Sep 14, 2016
|
|
* Author: Dominic Jud
|
|
* Institute: ETH Zurich, ANYbotics
|
|
*/
|
|
|
|
#include "grid_map_core/iterators/LineIterator.hpp"
|
|
#include "grid_map_core/GridMap.hpp"
|
|
|
|
// gtest
|
|
#include <gtest/gtest.h>
|
|
|
|
namespace robot_grid_map {
|
|
|
|
TEST(LineIterator, StartOutsideMap) {
|
|
GridMap map( { "types" });
|
|
map.setGeometry(Length(8.0, 5.0), 1.0, Position(0.0, 0.0));
|
|
|
|
EXPECT_NO_THROW(LineIterator iterator(map, Position(2.0, 2.0), Position(0.0, 0.0)));
|
|
LineIterator iterator(map, Position(2.0, 2.0), Position(0.0, 0.0));
|
|
|
|
EXPECT_FALSE(iterator.isPastEnd());
|
|
EXPECT_EQ(2, (*iterator)(0));
|
|
EXPECT_EQ(0, (*iterator)(1));
|
|
|
|
++iterator;
|
|
EXPECT_FALSE(iterator.isPastEnd());
|
|
EXPECT_EQ(3, (*iterator)(0));
|
|
EXPECT_EQ(1, (*iterator)(1));
|
|
|
|
++iterator;
|
|
EXPECT_FALSE(iterator.isPastEnd());
|
|
EXPECT_EQ(4, (*iterator)(0));
|
|
EXPECT_EQ(2, (*iterator)(1));
|
|
|
|
++iterator;
|
|
EXPECT_TRUE(iterator.isPastEnd());
|
|
}
|
|
|
|
TEST(LineIterator, EndOutsideMap)
|
|
{
|
|
GridMap map( { "types" });
|
|
map.setGeometry(Length(8.0, 5.0), 1.0, Position(0.0, 0.0));
|
|
|
|
EXPECT_NO_THROW(LineIterator iterator(map, Position(0.0, 0.0), Position(9.0, 6.0)));
|
|
LineIterator iterator(map, Position(0.0, 0.0), Position(9.0, 6.0));
|
|
|
|
EXPECT_FALSE(iterator.isPastEnd());
|
|
EXPECT_EQ(4, (*iterator)(0));
|
|
EXPECT_EQ(2, (*iterator)(1));
|
|
|
|
++iterator;
|
|
EXPECT_FALSE(iterator.isPastEnd());
|
|
EXPECT_EQ(3, (*iterator)(0));
|
|
EXPECT_EQ(1, (*iterator)(1));
|
|
|
|
++iterator;
|
|
EXPECT_FALSE(iterator.isPastEnd());
|
|
EXPECT_EQ(2, (*iterator)(0));
|
|
EXPECT_EQ(1, (*iterator)(1));
|
|
|
|
++iterator;
|
|
EXPECT_FALSE(iterator.isPastEnd());
|
|
++iterator;
|
|
EXPECT_FALSE(iterator.isPastEnd());
|
|
++iterator;
|
|
EXPECT_TRUE(iterator.isPastEnd());
|
|
}
|
|
|
|
TEST(LineIterator, StartAndEndOutsideMap)
|
|
{
|
|
GridMap map( { "types" });
|
|
map.setGeometry(Length(8.0, 5.0), 1.0, Position(0.0, 0.0));
|
|
|
|
EXPECT_NO_THROW(LineIterator iterator(map, Position(-7.0, -9.0), Position(8.0, 8.0)));
|
|
LineIterator iterator(map, Position(-7.0, -9.0), Position(8.0, 8.0));
|
|
|
|
EXPECT_FALSE(iterator.isPastEnd());
|
|
EXPECT_EQ(5, (*iterator)(0));
|
|
EXPECT_EQ(4, (*iterator)(1));
|
|
|
|
++iterator;
|
|
EXPECT_FALSE(iterator.isPastEnd());
|
|
EXPECT_EQ(4, (*iterator)(0));
|
|
EXPECT_EQ(3, (*iterator)(1));
|
|
|
|
++iterator;
|
|
EXPECT_FALSE(iterator.isPastEnd());
|
|
EXPECT_EQ(3, (*iterator)(0));
|
|
EXPECT_EQ(2, (*iterator)(1));
|
|
|
|
++iterator;
|
|
++iterator;
|
|
++iterator;
|
|
EXPECT_TRUE(iterator.isPastEnd());
|
|
}
|
|
|
|
TEST(LineIterator, StartAndEndOutsideMapWithoutIntersectingMap)
|
|
{
|
|
GridMap map( { "types" });
|
|
map.setGeometry(Length(8.0, 5.0), 1.0, Position(0.0, 0.0));
|
|
|
|
EXPECT_THROW(LineIterator iterator(map, Position(-8.0, 8.0), Position(8.0, 8.0)), std::invalid_argument);
|
|
}
|
|
|
|
TEST(LineIterator, MovedMap)
|
|
{
|
|
GridMap map( { "types" });
|
|
map.setGeometry(Length(7.0, 5.0), 1.0, Position(0.0, 0.0));
|
|
map.move(Position(2.0, 2.0));
|
|
|
|
EXPECT_NO_THROW(LineIterator iterator(map, Position(0.0, 0.0), Position(2.0, 2.0)));
|
|
LineIterator iterator(map, Position(0.0, 0.0), Position(2.0, 2.0));
|
|
Position point;
|
|
|
|
EXPECT_FALSE(iterator.isPastEnd());
|
|
map.getPosition(*iterator, point);
|
|
EXPECT_EQ(0, point.x());
|
|
EXPECT_EQ(0, point.y());
|
|
|
|
++iterator;
|
|
EXPECT_FALSE(iterator.isPastEnd());
|
|
map.getPosition(*iterator, point);
|
|
EXPECT_EQ(1, point.x());
|
|
EXPECT_EQ(1, point.y());
|
|
|
|
++iterator;
|
|
EXPECT_FALSE(iterator.isPastEnd());
|
|
map.getPosition(*iterator, point);
|
|
EXPECT_EQ(2, point.x());
|
|
EXPECT_EQ(2, point.y());
|
|
|
|
++iterator;
|
|
EXPECT_TRUE(iterator.isPastEnd());
|
|
}
|
|
|
|
TEST(LineIterator, StartAndEndOutsideMovedMap)
|
|
{
|
|
GridMap map( { "types" });
|
|
map.setGeometry(Length(7.0, 5.0), 1.0, Position(0.0, 0.0));
|
|
map.move(Position(2.0, 2.0));
|
|
|
|
EXPECT_NO_THROW(LineIterator iterator(map, Position(0.0, 0.0), Position(8.0, 8.0)));
|
|
LineIterator iterator(map, Position(0.0, 0.0), Position(8.0, 8.0));
|
|
Position point;
|
|
|
|
EXPECT_FALSE(iterator.isPastEnd());
|
|
map.getPosition(*iterator, point);
|
|
EXPECT_EQ(0, point.x());
|
|
EXPECT_EQ(0, point.y());
|
|
|
|
++iterator;
|
|
map.getPosition(*iterator, point);
|
|
EXPECT_EQ(1, point.x());
|
|
EXPECT_EQ(1, point.y());
|
|
//
|
|
++iterator;
|
|
map.getPosition(*iterator, point);
|
|
EXPECT_EQ(2, point.x());
|
|
EXPECT_EQ(2, point.y());
|
|
//
|
|
++iterator;
|
|
map.getPosition(*iterator, point);
|
|
EXPECT_EQ(3, point.x());
|
|
EXPECT_EQ(3, point.y());
|
|
|
|
++iterator;
|
|
map.getPosition(*iterator, point);
|
|
EXPECT_EQ(4, point.x());
|
|
EXPECT_EQ(4, point.y());
|
|
|
|
++iterator;
|
|
EXPECT_TRUE(iterator.isPastEnd());
|
|
}
|
|
|
|
} // namespace robot_grid_map
|