From 25ad9d184de1b093a51e5a5302477bc2fae25431 Mon Sep 17 00:00:00 2001 From: zmiao Date: Tue, 24 Mar 2020 12:46:39 +0200 Subject: Add unit tests --- test/style/property_expression.test.cpp | 72 +++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) 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 propExpr(std::move(expression)); + + LineString testLine0{{-183, 5}, {-179, 1}}; + auto geoLine0 = convertGeometry(testLine0, canonicalTileID); + StubGeometryTileFeature lineFeature0(FeatureType::LineString, geoLine0); + + LineString 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 propExpr(std::move(expression)); + + auto getPointFeature = [&canonicalTileID](const Point& testPoint) -> StubGeometryTileFeature { + auto geoPoint = convertGeometry(testPoint, canonicalTileID); + StubGeometryTileFeature pointFeature(FeatureType::Point, geoPoint); + return pointFeature; + }; + + // check `within` algorithm + auto pointFeature = getPointFeature(Point(177, 62.5)); + auto evaluatedResult = + propExpr.evaluate(EvaluationContext(&pointFeature).withCanonicalTileID(&canonicalTileID)); + EXPECT_TRUE(evaluatedResult); + + pointFeature = getPointFeature(Point(180, 62.5)); + evaluatedResult = propExpr.evaluate(EvaluationContext(&pointFeature).withCanonicalTileID(&canonicalTileID)); + EXPECT_TRUE(evaluatedResult); + + pointFeature = getPointFeature(Point(-180, 62.5)); + evaluatedResult = propExpr.evaluate(EvaluationContext(&pointFeature).withCanonicalTileID(&canonicalTileID)); + EXPECT_TRUE(evaluatedResult); + + pointFeature = getPointFeature(Point(-190, 62.5)); + evaluatedResult = propExpr.evaluate(EvaluationContext(&pointFeature).withCanonicalTileID(&canonicalTileID)); + EXPECT_FALSE(evaluatedResult); + } +} -- cgit v1.2.1