diff options
author | Alexander Shalamov <alexander.shalamov@mapbox.com> | 2019-12-09 10:41:27 +0200 |
---|---|---|
committer | Tobrun <tobrun.van.nuland@gmail.com> | 2019-12-18 13:36:44 +0100 |
commit | cd337ffa27caff425045c5b492cc14ed9cf0e36d (patch) | |
tree | 429c8679f7619be52ec793babadf8a9c5727ecab /test/text | |
parent | 8e9538110a4fc7a69762f96f0d6ab08ed4c77432 (diff) | |
download | qtlocation-mapboxgl-cd337ffa27caff425045c5b492cc14ed9cf0e36d.tar.gz |
[core] Add unit test for getAnchors and remove unused field
Diffstat (limited to 'test/text')
-rw-r--r-- | test/text/get_anchors.test.cpp | 130 | ||||
-rw-r--r-- | test/text/quads.test.cpp | 4 |
2 files changed, 132 insertions, 2 deletions
diff --git a/test/text/get_anchors.test.cpp b/test/text/get_anchors.test.cpp new file mode 100644 index 0000000000..84dea4394f --- /dev/null +++ b/test/text/get_anchors.test.cpp @@ -0,0 +1,130 @@ +#include <mbgl/test/util.hpp> + +#include <mbgl/text/get_anchors.hpp> + +using namespace mbgl; + +namespace mbgl { +constexpr inline bool operator==(const Anchor& rhs, const Anchor& lhs) { + return rhs.point == lhs.point && rhs.angle == lhs.angle && rhs.segment == lhs.segment; +} +} // namespace mbgl + +namespace { +const auto makeLine = [](std::size_t shift = 0u) { + GeometryCoordinates line; + for (std::size_t i = shift; i < 10u + shift; ++i) { + line.push_back({1, static_cast<int16_t>(i)}); + } + return line; +}; + +const GeometryCoordinates continuedLine = makeLine(); +const GeometryCoordinates nonContinuedLine = makeLine(1u); + +const float smallSpacing = 2.0f; +const float bigSpacing = 3.0f; +const float textLeft = -1.0f; +const float textRight = 1.0f; +const float iconLeft = -0.5f; +const float iconRight = 0.5f; +const float glyphSize = 0.1f; +const float boxScale = 1.0f; +const float overscaling = 1.0f; +} // namespace + +TEST(getAnchors, NonContinuedLineShortLabels) { + const Anchors anchors = getAnchors( + nonContinuedLine, bigSpacing, M_PI, textLeft, textRight, iconLeft, iconRight, glyphSize, boxScale, overscaling); + const Anchors expected_anchors = {Anchor(1.0f, 2.0f, 1.570796371f, 1u), + Anchor(1.0f, 5.0f, 1.570796371f, 4u), + Anchor(1.0f, 8.0f, 1.570796371f, 7u)}; + + EXPECT_EQ(anchors, expected_anchors); +} + +TEST(getAnchors, NonContinuedLineLongLabels) { + const Anchors anchors = getAnchors(nonContinuedLine, + smallSpacing, + M_PI, + textLeft, + textRight, + iconLeft, + iconRight, + glyphSize, + boxScale, + overscaling); + const Anchors expected_anchors = {Anchor(1.0f, 2.0f, 1.570796371f, 1u), + Anchor(1.0f, 5.0f, 1.570796371f, 3u), + Anchor(1.0f, 7.0f, 1.570796371f, 6u)}; + + EXPECT_EQ(anchors, expected_anchors); +} + +TEST(getAnchors, ContinuedLineShortLabels) { + const Anchors anchors = getAnchors( + continuedLine, bigSpacing, M_PI, textLeft, textRight, iconLeft, iconRight, glyphSize, boxScale, overscaling); + const Anchors expected_anchors = {Anchor(1.0f, 2.0f, 1.570796371f, 1u), + Anchor(1.0f, 5.0f, 1.570796371f, 4u), + Anchor(1.0f, 8.0f, 1.570796371f, 7u)}; + + EXPECT_EQ(anchors, expected_anchors); +} + +TEST(getAnchors, ContinuedLineLongLabels) { + const Anchors anchors = getAnchors( + continuedLine, smallSpacing, M_PI, textLeft, textRight, iconLeft, iconRight, glyphSize, boxScale, overscaling); + const Anchors expected_anchors = {Anchor(1.0f, 1.0f, 1.570796371f, 1u), + Anchor(1.0f, 4.0f, 1.570796371f, 3u), + Anchor(1.0f, 6.0f, 1.570796371f, 6u)}; + + EXPECT_EQ(anchors, expected_anchors); +} + +TEST(getAnchors, OverscaledAnchorsInParent) { + const Anchors anchors = getAnchors( + nonContinuedLine, bigSpacing, M_PI, textLeft, textRight, iconLeft, iconRight, glyphSize, boxScale, overscaling); + const Anchors childAnchors = getAnchors(nonContinuedLine, + bigSpacing / 2, + M_PI, + textLeft, + textRight, + iconLeft, + iconRight, + glyphSize, + 0.5f /*boxScale*/, + 2.0f /*overscaling*/); + for (const auto& anchor : anchors) { + EXPECT_TRUE(std::find(childAnchors.begin(), childAnchors.end(), anchor) != childAnchors.end()); + } +} + +TEST(getAnchors, UseMidpointForShortLine) { + const GeometryCoordinates shortLine = {Point<int16_t>{1, 1}, Point<int16_t>{1, 3}}; + const Anchors anchors = getAnchors( + shortLine, smallSpacing, M_PI, textLeft, textRight, iconLeft, iconRight, glyphSize, boxScale, overscaling); + const Anchors expected_anchors = {Anchor(1.0f, 2.0f, 1.570796371f, 0u)}; + + EXPECT_EQ(anchors, expected_anchors); +} + +TEST(getAnchors, GetCenterAnchor) { + const GeometryCoordinates line = { + Point<int16_t>{1, 1}, Point<int16_t>{1, 3}, Point<int16_t>{3, 6}, Point<int16_t>{4, 7}}; + const auto anchor = getCenterAnchor(line, M_PI, textLeft, textRight, iconLeft, iconRight, glyphSize, boxScale); + EXPECT_TRUE(anchor); + EXPECT_EQ(*anchor, Anchor(2.0f, 4.0f, .982793748f, 1u)); +} + +TEST(getAnchors, GetCenterAnchorOutsideTileBounds) { + const GeometryCoordinates line = {Point<int16_t>{-10, -10}, Point<int16_t>{5, 5}}; + const auto anchor = getCenterAnchor(line, M_PI, textLeft, textRight, iconLeft, iconRight, glyphSize, boxScale); + EXPECT_TRUE(anchor); + EXPECT_EQ(*anchor, Anchor(-3.0f, -3.0f, .785398185f, 0u)); +} + +TEST(getAnchors, GetCenterAnchorFailMaxAngle) { + const GeometryCoordinates line = {Point<int16_t>{1, 1}, Point<int16_t>{1, 3}, Point<int16_t>{3, 3}}; + const auto anchor = getCenterAnchor(line, M_PI / 4, textLeft, textRight, iconLeft, iconRight, glyphSize, boxScale); + EXPECT_FALSE(anchor); +} diff --git a/test/text/quads.test.cpp b/test/text/quads.test.cpp index 64255c72db..5a78195faa 100644 --- a/test/text/quads.test.cpp +++ b/test/text/quads.test.cpp @@ -12,7 +12,7 @@ using namespace mbgl::style; TEST(getIconQuads, normal) { SymbolLayoutProperties::Evaluated layout; - Anchor anchor(2.0, 3.0, 0.0, 0.5f, 0); + Anchor anchor(2.0, 3.0, 0.0, 0); ImagePosition image = { mapbox::Bin(-1, 15, 11, 0, 0, 0, 0), style::Image::Impl("test", PremultipliedImage({1,1}), 1.0) @@ -35,7 +35,7 @@ TEST(getIconQuads, normal) { } TEST(getIconQuads, style) { - Anchor anchor(0.0, 0.0, 0.0, 0.5f, 0); + Anchor anchor(0.0, 0.0, 0.0, 0); const ImagePosition image = {mapbox::Bin(-1, 20, 20, 0, 0, 0, 0), style::Image::Impl("test", PremultipliedImage({1, 1}), 1.0)}; |