summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorzmiao <miao.zhao@mapbox.com>2020-03-24 12:46:39 +0200
committerzmiao <miao.zhao@mapbox.com>2020-03-26 14:13:59 +0200
commit25ad9d184de1b093a51e5a5302477bc2fae25431 (patch)
tree0ac2ff2b338428f3300e9f8d5d6fc63027d74ed4
parent848f48ac274afc52614d22b940d6ad31717e027a (diff)
downloadqtlocation-mapboxgl-25ad9d184de1b093a51e5a5302477bc2fae25431.tar.gz
Add unit tests
-rw-r--r--test/style/property_expression.test.cpp72
1 files changed, 72 insertions, 0 deletions
diff --git a/test/style/property_expression.test.cpp b/test/style/property_expression.test.cpp
index c4531c73aa..558ce4e685 100644
--- a/test/style/property_expression.test.cpp
+++ b/test/style/property_expression.test.cpp
@@ -389,3 +389,75 @@ TEST(PropertyExpression, WithinExpression) {
EXPECT_FALSE(evaluatedResult);
}
}
+
+TEST(PropertyExpression, WithinExpressionAntiMeridain) {
+ CanonicalTileID canonicalTileID(0, 0, 0);
+
+ // evaluation test with line geometries
+ {
+ static const std::string polygon1 = R"data(
+ {
+ "type": "Polygon",
+ "coordinates": [[[-190, 0], [-178, 0], [-178, 10], [-190, 10], [-190, 0]]]
+ })data";
+ // evaluation test with valid geojson source
+ std::stringstream ss;
+ ss << std::string(R"(["within", )") << polygon1 << std::string(R"( ])");
+ auto expression = createExpression(ss.str().c_str());
+ ASSERT_TRUE(expression);
+ PropertyExpression<bool> propExpr(std::move(expression));
+
+ LineString<double> testLine0{{-183, 5}, {-179, 1}};
+ auto geoLine0 = convertGeometry(testLine0, canonicalTileID);
+ StubGeometryTileFeature lineFeature0(FeatureType::LineString, geoLine0);
+
+ LineString<double> testLine1{{183, 5}, {181, 1}};
+ auto geoLine1 = convertGeometry(testLine1, canonicalTileID);
+ StubGeometryTileFeature lineFeature1(FeatureType::LineString, geoLine1);
+
+ auto evaluatedResult =
+ propExpr.evaluate(EvaluationContext(&lineFeature0).withCanonicalTileID(&canonicalTileID));
+ EXPECT_TRUE(evaluatedResult);
+ evaluatedResult = propExpr.evaluate(EvaluationContext(&lineFeature1).withCanonicalTileID(&canonicalTileID));
+ EXPECT_FALSE(evaluatedResult);
+ }
+
+ // evaluation test with point geometries
+ {
+ static const std::string polygon2 = R"data(
+ {
+ "type": "Polygon",
+ "coordinates": [[[-185.0, 60.0], [-175.0, 60.0], [-175.0, 65.0], [-185.0, 65.0], [-185.0, 60.0]]]
+ })data";
+ // evaluation test with valid geojson source
+ std::stringstream ss;
+ ss << std::string(R"(["within", )") << polygon2 << std::string(R"( ])");
+ auto expression = createExpression(ss.str().c_str());
+ ASSERT_TRUE(expression);
+ PropertyExpression<bool> propExpr(std::move(expression));
+
+ auto getPointFeature = [&canonicalTileID](const Point<double>& testPoint) -> StubGeometryTileFeature {
+ auto geoPoint = convertGeometry(testPoint, canonicalTileID);
+ StubGeometryTileFeature pointFeature(FeatureType::Point, geoPoint);
+ return pointFeature;
+ };
+
+ // check `within` algorithm
+ auto pointFeature = getPointFeature(Point<double>(177, 62.5));
+ auto evaluatedResult =
+ propExpr.evaluate(EvaluationContext(&pointFeature).withCanonicalTileID(&canonicalTileID));
+ EXPECT_TRUE(evaluatedResult);
+
+ pointFeature = getPointFeature(Point<double>(180, 62.5));
+ evaluatedResult = propExpr.evaluate(EvaluationContext(&pointFeature).withCanonicalTileID(&canonicalTileID));
+ EXPECT_TRUE(evaluatedResult);
+
+ pointFeature = getPointFeature(Point<double>(-180, 62.5));
+ evaluatedResult = propExpr.evaluate(EvaluationContext(&pointFeature).withCanonicalTileID(&canonicalTileID));
+ EXPECT_TRUE(evaluatedResult);
+
+ pointFeature = getPointFeature(Point<double>(-190, 62.5));
+ evaluatedResult = propExpr.evaluate(EvaluationContext(&pointFeature).withCanonicalTileID(&canonicalTileID));
+ EXPECT_FALSE(evaluatedResult);
+ }
+}