Add last location memoization in Lua context
This commit is contained in:
@@ -1,5 +1,7 @@
|
||||
#include "extractor/location_dependent_data.hpp"
|
||||
|
||||
#include "../common/range_tools.hpp"
|
||||
|
||||
#include <boost/filesystem.hpp>
|
||||
#include <boost/test/test_case_template.hpp>
|
||||
#include <boost/test/unit_test.hpp>
|
||||
@@ -51,15 +53,20 @@ BOOST_AUTO_TEST_CASE(polygon_tests)
|
||||
|
||||
LocationDependentData data({fixture.temporary_file});
|
||||
|
||||
BOOST_CHECK_EQUAL(data(point_t(0, 0), "answer").which(), 0);
|
||||
BOOST_CHECK_EQUAL(boost::get<double>(data(point_t(1, 1), "answer")), 42);
|
||||
BOOST_CHECK_EQUAL(boost::get<double>(data(point_t(0, 1), "answer")), 42);
|
||||
BOOST_CHECK_EQUAL(boost::get<double>(data(point_t(0.5, -0.5), "answer")), 42);
|
||||
BOOST_CHECK_EQUAL(boost::get<double>(data(point_t(0, -3), "answer")), 42);
|
||||
BOOST_CHECK_EQUAL(boost::get<double>(data(point_t(-0.75, 0.75), "answer")), 42);
|
||||
BOOST_CHECK_EQUAL(boost::get<double>(data(point_t(2, 0), "answer")), 42.);
|
||||
BOOST_CHECK_EQUAL(boost::get<bool>(data(point_t(1, 7), "answer")), true);
|
||||
BOOST_CHECK_EQUAL(boost::get<bool>(data(point_t(-2, 6), "answer")), true);
|
||||
BOOST_CHECK(data.GetPropertyIndexes(point_t(0, 0)).empty());
|
||||
CHECK_EQUAL_RANGE(data.GetPropertyIndexes(point_t(1, 1)), 0);
|
||||
CHECK_EQUAL_RANGE(data.GetPropertyIndexes(point_t(0, 1)), 0);
|
||||
CHECK_EQUAL_RANGE(data.GetPropertyIndexes(point_t(0.5, -0.5)), 0);
|
||||
CHECK_EQUAL_RANGE(data.GetPropertyIndexes(point_t(0, -3)), 0);
|
||||
CHECK_EQUAL_RANGE(data.GetPropertyIndexes(point_t(-0.75, 0.75)), 0);
|
||||
CHECK_EQUAL_RANGE(data.GetPropertyIndexes(point_t(2, 0)), 0);
|
||||
CHECK_EQUAL_RANGE(data.GetPropertyIndexes(point_t(1, 7)), 1);
|
||||
CHECK_EQUAL_RANGE(data.GetPropertyIndexes(point_t(-2, 6)), 1);
|
||||
|
||||
BOOST_CHECK_EQUAL(data.FindByKey({}, "answer").which(), 0);
|
||||
BOOST_CHECK_EQUAL(data.FindByKey({0}, "foo").which(), 0);
|
||||
BOOST_CHECK_EQUAL(boost::get<double>(data.FindByKey({0}, "answer")), 42);
|
||||
BOOST_CHECK_EQUAL(boost::get<bool>(data.FindByKey({1}, "answer")), true);
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(multy_polygon_tests)
|
||||
@@ -82,11 +89,11 @@ BOOST_AUTO_TEST_CASE(multy_polygon_tests)
|
||||
|
||||
LocationDependentData data({fixture.temporary_file});
|
||||
|
||||
BOOST_CHECK_EQUAL(data(point_t(0, 2), "answer").which(), 0);
|
||||
BOOST_CHECK_EQUAL(data(point_t(0, -3), "answer").which(), 0);
|
||||
BOOST_CHECK_EQUAL(boost::get<double>(data(point_t(0, 0), "answer")), 42.);
|
||||
BOOST_CHECK_EQUAL(boost::get<double>(data(point_t(5, 0), "answer")), 42.);
|
||||
BOOST_CHECK_EQUAL(boost::get<double>(data(point_t(-5, 0), "answer")), 42.);
|
||||
BOOST_CHECK(data.GetPropertyIndexes(point_t(0, 2)).empty());
|
||||
BOOST_CHECK(data.GetPropertyIndexes(point_t(0, -3)).empty());
|
||||
BOOST_CHECK(!data.GetPropertyIndexes(point_t(0, 0)).empty());
|
||||
BOOST_CHECK(!data.GetPropertyIndexes(point_t(5, 0)).empty());
|
||||
BOOST_CHECK(!data.GetPropertyIndexes(point_t(-5, 0)).empty());
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(polygon_merging_tests)
|
||||
@@ -113,19 +120,26 @@ BOOST_AUTO_TEST_CASE(polygon_merging_tests)
|
||||
|
||||
LocationDependentData data({fixture.temporary_file});
|
||||
|
||||
BOOST_CHECK_EQUAL(boost::get<std::string>(data(point_t(-3, 3), "answer")), "a");
|
||||
BOOST_CHECK_EQUAL(boost::get<std::string>(data(point_t(-3, 1), "answer")), "a");
|
||||
BOOST_CHECK_EQUAL(boost::get<std::string>(data(point_t(-3, -3), "answer")), "a");
|
||||
BOOST_CHECK_EQUAL(boost::get<std::string>(data(point_t(0, 3), "answer")), "a");
|
||||
BOOST_CHECK_EQUAL(boost::get<std::string>(data(point_t(1, 0), "answer")), "a");
|
||||
BOOST_CHECK_EQUAL(boost::get<std::string>(data(point_t(2, -3), "answer")), "a");
|
||||
BOOST_CHECK_EQUAL(boost::get<std::string>(data(point_t(3, 0), "answer")), "a");
|
||||
BOOST_CHECK_EQUAL(boost::get<std::string>(data(point_t(4, 3), "answer")), "b");
|
||||
BOOST_CHECK_EQUAL(boost::get<std::string>(data(point_t(6, 1), "answer")), "b");
|
||||
BOOST_CHECK_EQUAL(boost::get<std::string>(data(point_t(7, 0), "answer")), "b");
|
||||
BOOST_CHECK_EQUAL(boost::get<std::string>(data(point_t(8, 3), "answer")), "c");
|
||||
BOOST_CHECK_EQUAL(boost::get<std::string>(data(point_t(8, -1), "answer")), "c");
|
||||
BOOST_CHECK_EQUAL(boost::get<std::string>(data(point_t(8, -3), "answer")), "c");
|
||||
CHECK_EQUAL_RANGE(data.GetPropertyIndexes(point_t(-3, 3)), 0);
|
||||
CHECK_EQUAL_RANGE(data.GetPropertyIndexes(point_t(-3, 1)), 0);
|
||||
CHECK_EQUAL_RANGE(data.GetPropertyIndexes(point_t(-3, -3)), 0);
|
||||
CHECK_EQUAL_RANGE(data.GetPropertyIndexes(point_t(0, 3)), 0);
|
||||
CHECK_EQUAL_RANGE(data.GetPropertyIndexes(point_t(1, 0)), 0, 1);
|
||||
CHECK_EQUAL_RANGE(data.GetPropertyIndexes(point_t(2, -3)), 0, 1, 2);
|
||||
CHECK_EQUAL_RANGE(data.GetPropertyIndexes(point_t(3, 0)), 0, 1, 2);
|
||||
CHECK_EQUAL_RANGE(data.GetPropertyIndexes(point_t(4, 3)), 1, 2);
|
||||
CHECK_EQUAL_RANGE(data.GetPropertyIndexes(point_t(6, 1)), 1, 2);
|
||||
CHECK_EQUAL_RANGE(data.GetPropertyIndexes(point_t(7, 0)), 1, 2);
|
||||
CHECK_EQUAL_RANGE(data.GetPropertyIndexes(point_t(8, 3)), 2);
|
||||
CHECK_EQUAL_RANGE(data.GetPropertyIndexes(point_t(8, -1)), 2);
|
||||
CHECK_EQUAL_RANGE(data.GetPropertyIndexes(point_t(8, -3)), 2);
|
||||
|
||||
BOOST_CHECK_EQUAL(boost::get<std::string>(data.FindByKey({0}, "answer")), "a");
|
||||
BOOST_CHECK_EQUAL(boost::get<std::string>(data.FindByKey({1}, "answer")), "b");
|
||||
BOOST_CHECK_EQUAL(boost::get<std::string>(data.FindByKey({2}, "answer")), "c");
|
||||
BOOST_CHECK_EQUAL(boost::get<std::string>(data.FindByKey({0, 1, 2}, "answer")), "a");
|
||||
BOOST_CHECK_EQUAL(boost::get<std::string>(data.FindByKey({1, 2}, "answer")), "b");
|
||||
BOOST_CHECK_EQUAL(boost::get<std::string>(data.FindByKey({2, 1, 0}, "answer")), "c");
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(staircase_polygon)
|
||||
@@ -143,31 +157,31 @@ BOOST_AUTO_TEST_CASE(staircase_polygon)
|
||||
LocationDependentData data({fixture.temporary_file});
|
||||
|
||||
// all corners
|
||||
BOOST_CHECK_NE(data(point_t(0, 0), "answer").which(), 0);
|
||||
BOOST_CHECK_NE(data(point_t(0, 1), "answer").which(), 0);
|
||||
BOOST_CHECK_NE(data(point_t(1, 1), "answer").which(), 0);
|
||||
BOOST_CHECK_NE(data(point_t(1, 2), "answer").which(), 0);
|
||||
BOOST_CHECK_NE(data(point_t(2, 2), "answer").which(), 0);
|
||||
BOOST_CHECK_NE(data(point_t(2, 3), "answer").which(), 0);
|
||||
BOOST_CHECK_NE(data(point_t(3, 3), "answer").which(), 0);
|
||||
BOOST_CHECK_NE(data(point_t(3, 0), "answer").which(), 0);
|
||||
BOOST_CHECK(!data.GetPropertyIndexes(point_t(0, 0)).empty());
|
||||
BOOST_CHECK(!data.GetPropertyIndexes(point_t(0, 1)).empty());
|
||||
BOOST_CHECK(!data.GetPropertyIndexes(point_t(1, 1)).empty());
|
||||
BOOST_CHECK(!data.GetPropertyIndexes(point_t(1, 2)).empty());
|
||||
BOOST_CHECK(!data.GetPropertyIndexes(point_t(2, 2)).empty());
|
||||
BOOST_CHECK(!data.GetPropertyIndexes(point_t(2, 3)).empty());
|
||||
BOOST_CHECK(!data.GetPropertyIndexes(point_t(3, 3)).empty());
|
||||
BOOST_CHECK(!data.GetPropertyIndexes(point_t(3, 0)).empty());
|
||||
|
||||
// // at x = 1
|
||||
BOOST_CHECK_EQUAL(data(point_t(1, -0.5), "answer").which(), 0);
|
||||
BOOST_CHECK_NE(data(point_t(1, 0), "answer").which(), 0);
|
||||
BOOST_CHECK_NE(data(point_t(1, 0.5), "answer").which(), 0);
|
||||
BOOST_CHECK_NE(data(point_t(1, 1.5), "answer").which(), 0);
|
||||
BOOST_CHECK_EQUAL(data(point_t(1, 2.5), "answer").which(), 0);
|
||||
BOOST_CHECK_EQUAL(data(point_t(3.5, 2), "answer").which(), 0);
|
||||
// at x = 1
|
||||
BOOST_CHECK(data.GetPropertyIndexes(point_t(1, -0.5)).empty());
|
||||
BOOST_CHECK(!data.GetPropertyIndexes(point_t(1, 0)).empty());
|
||||
BOOST_CHECK(!data.GetPropertyIndexes(point_t(1, 0.5)).empty());
|
||||
BOOST_CHECK(!data.GetPropertyIndexes(point_t(1, 1.5)).empty());
|
||||
BOOST_CHECK(data.GetPropertyIndexes(point_t(1, 2.5)).empty());
|
||||
BOOST_CHECK(data.GetPropertyIndexes(point_t(3.5, 2)).empty());
|
||||
|
||||
// // at y = 2
|
||||
BOOST_CHECK_EQUAL(data(point_t(0.5, 2), "answer").which(), 0);
|
||||
BOOST_CHECK_NE(data(point_t(1, 2), "answer").which(), 0);
|
||||
BOOST_CHECK_NE(data(point_t(1.5, 2), "answer").which(), 0);
|
||||
BOOST_CHECK_NE(data(point_t(2, 2), "answer").which(), 0);
|
||||
BOOST_CHECK_NE(data(point_t(2.5, 2), "answer").which(), 0);
|
||||
BOOST_CHECK_NE(data(point_t(3, 2), "answer").which(), 0);
|
||||
BOOST_CHECK_EQUAL(data(point_t(3.5, 2), "answer").which(), 0);
|
||||
// at y = 2
|
||||
BOOST_CHECK(data.GetPropertyIndexes(point_t(0.5, 2)).empty());
|
||||
BOOST_CHECK(!data.GetPropertyIndexes(point_t(1, 2)).empty());
|
||||
BOOST_CHECK(!data.GetPropertyIndexes(point_t(1.5, 2)).empty());
|
||||
BOOST_CHECK(!data.GetPropertyIndexes(point_t(2, 2)).empty());
|
||||
BOOST_CHECK(!data.GetPropertyIndexes(point_t(2.5, 2)).empty());
|
||||
BOOST_CHECK(!data.GetPropertyIndexes(point_t(3, 2)).empty());
|
||||
BOOST_CHECK(data.GetPropertyIndexes(point_t(3.5, 2)).empty());
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_SUITE_END()
|
||||
|
||||
Reference in New Issue
Block a user