summaryrefslogtreecommitdiff
path: root/test/util/tile_cover.test.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'test/util/tile_cover.test.cpp')
-rw-r--r--test/util/tile_cover.test.cpp169
1 files changed, 146 insertions, 23 deletions
diff --git a/test/util/tile_cover.test.cpp b/test/util/tile_cover.test.cpp
index ba39bfa61b..2401608d45 100644
--- a/test/util/tile_cover.test.cpp
+++ b/test/util/tile_cover.test.cpp
@@ -37,9 +37,7 @@ TEST(TileCover, Pitch) {
transform.jumpTo(CameraOptions().withCenter(LatLng { 0.1, -0.1, }).withZoom(2.0).withBearing(5.0).withPitch(40.0));
- EXPECT_EQ((std::vector<UnwrappedTileID>{
- { 2, 1, 1 }, { 2, 2, 1 }, { 2, 1, 2 }, { 2, 2, 2 }
- }),
+ EXPECT_EQ((std::vector<OverscaledTileID>{{2, 1, 1}, {2, 2, 1}, {2, 1, 2}, {2, 2, 2}}),
util::tileCover(transform.getState(), 2));
}
@@ -51,25 +49,23 @@ TEST(TileCover, PitchIssue15442) {
.withZoom(2.0551126748417214).withBearing(0.74963938256567264 * util::RAD2DEG)
.withPitch(1.0471975511965976 * util::RAD2DEG));
- EXPECT_EQ((std::vector<UnwrappedTileID>{
- { 2, 3, 1 }, { 2, 2, 1 }, { 2, 3, 0 }, { 2, 2, 0 }, { 1, { 2, 0, 0 } }, { 1, { 2, 1, 0 } }
- }),
+ EXPECT_EQ((std::vector<OverscaledTileID>{
+ {2, 3, 1}, {2, 2, 1}, {2, 3, 0}, {2, 2, 0}, {2, 1, {2, 0, 0}}, {2, 1, {2, 1, 0}}}),
util::tileCover(transform.getState(), 2));
}
TEST(TileCover, PitchOverAllowedByContentInsets) {
Transform transform;
- transform.resize({ 512, 512 });
+ transform.resize({512, 512});
transform.jumpTo(CameraOptions().withCenter(LatLng { 0.1, -0.1 }).withPadding(EdgeInsets { 376, 0, 0, 0 })
.withZoom(8.0).withBearing(45.0).withPitch(60.0));
// Top padding of 376 leads to capped pitch. See Transform::getMaxPitchForEdgeInsets.
EXPECT_LE(transform.getPitch() + 0.001, util::DEG2RAD * 60);
- EXPECT_EQ((std::vector<UnwrappedTileID>{
- { 3, 4, 3 }, { 3, 3, 3 }, { 3, 4, 4 }, { 3, 3, 4 }, { 3, 4, 2 }, { 3, 5, 3 }, { 3, 5, 2 }
- }),
- util::tileCover(transform.getState(), 3));
+ EXPECT_EQ(
+ (std::vector<OverscaledTileID>{{3, 4, 3}, {3, 3, 3}, {3, 4, 4}, {3, 3, 4}, {3, 4, 2}, {3, 5, 3}, {3, 5, 2}}),
+ util::tileCover(transform.getState(), 3));
}
TEST(TileCover, PitchWithLargerResultSet) {
@@ -84,29 +80,156 @@ TEST(TileCover, PitchWithLargerResultSet) {
auto cover = util::tileCover(transform.getState(), 5);
// Returned vector has above 100 elements, we check first 16 as there is a
// plan to return lower LOD for distant tiles.
- EXPECT_EQ((std::vector<UnwrappedTileID> {
- { 5, 15, 16 }, { 5, 15, 17 }, { 5, 14, 16 }, { 5, 14, 17 },
- { 5, 16, 16 }, { 5, 16, 17 }, { 5, 15, 15 }, { 5, 14, 15 },
- { 5, 15, 18 }, { 5, 14, 18 }, { 5, 16, 15 }, { 5, 13, 16 },
- { 5, 13, 17 }, { 5, 16, 18 }, { 5, 13, 18 }, { 5, 15, 19 }
- }), (std::vector<UnwrappedTileID> { cover.begin(), cover.begin() + 16}) );
+ EXPECT_EQ((std::vector<OverscaledTileID>{{5, 15, 16},
+ {5, 15, 17},
+ {5, 14, 16},
+ {5, 14, 17},
+ {5, 16, 16},
+ {5, 16, 17},
+ {5, 15, 15},
+ {5, 14, 15},
+ {5, 15, 18},
+ {5, 14, 18},
+ {5, 16, 15},
+ {5, 13, 16},
+ {5, 13, 17},
+ {5, 16, 18},
+ {5, 13, 18},
+ {5, 15, 19}}),
+ (std::vector<OverscaledTileID>{cover.begin(), cover.begin() + 16}));
}
TEST(TileCover, WorldZ1) {
EXPECT_EQ((std::vector<UnwrappedTileID>{
- { 1, 0, 0 }, { 1, 0, 1 }, { 1, 1, 0 }, { 1, 1, 1 },
- }),
+ {1, 0, 0},
+ {1, 0, 1},
+ {1, 1, 0},
+ {1, 1, 1},
+ }),
util::tileCover(LatLngBounds::world(), 1));
}
TEST(TileCover, SingletonZ0) {
- EXPECT_EQ((std::vector<UnwrappedTileID>{}),
- util::tileCover(LatLngBounds::singleton({ 0, 0 }), 0));
+ EXPECT_EQ((std::vector<UnwrappedTileID>{}), util::tileCover(LatLngBounds::singleton({0, 0}), 0));
}
TEST(TileCover, SingletonZ1) {
- EXPECT_EQ((std::vector<UnwrappedTileID>{}),
- util::tileCover(LatLngBounds::singleton({ 0, 0 }), 1));
+ EXPECT_EQ((std::vector<UnwrappedTileID>{}), util::tileCover(LatLngBounds::singleton({0, 0}), 1));
+}
+
+TEST(TileCover, CoordinatesAreUnwrapped) {
+ Transform transform;
+ transform.resize({512, 512});
+ transform.jumpTo(CameraOptions()
+ .withCenter(LatLng{
+ 0.1,
+ -180.1,
+ })
+ .withZoom(1.0));
+
+ EXPECT_EQ(
+ (std::vector<OverscaledTileID>{{1, 0, {1, 1, 0}}, {1, 1, {1, 0, 0}}, {1, 0, {1, 1, 1}}, {1, 1, {1, 0, 1}}}),
+ util::tileCover(transform.getState(), 1));
+}
+
+TEST(TileCover, DifferentOverscaledZ) {
+ Transform transform;
+ transform.resize({512, 512});
+ // slightly offset center so that tile order is better defined
+
+ transform.jumpTo(CameraOptions()
+ .withCenter(LatLng{
+ 0.1,
+ -0.1,
+ })
+ .withZoom(2.0));
+
+ EXPECT_EQ(
+ (std::vector<OverscaledTileID>{{3, 0, {2, 1, 1}}, {3, 0, {2, 2, 1}}, {3, 0, {2, 1, 2}}, {3, 0, {2, 2, 2}}}),
+ util::tileCover(transform.getState(), 2, 3));
+}
+
+TEST(TileCover, DifferentOverscaledZWithPitch) {
+ Transform transform;
+ transform.resize({512, 512});
+ transform.jumpTo(CameraOptions()
+ .withCenter(LatLng{
+ 30.0,
+ -10.0,
+ })
+ .withZoom(3.5)
+ .withPitch(60));
+
+ EXPECT_EQ((std::vector<OverscaledTileID>{{5, 0, {3, 3, 3}},
+ {5, 0, {3, 4, 3}},
+ {5, 0, {3, 3, 2}},
+ {5, 0, {3, 4, 2}},
+ {5, 0, {3, 3, 1}},
+ {5, 0, {3, 4, 1}},
+ {5, 0, {3, 2, 1}}}),
+ util::tileCover(transform.getState(), 3, 5));
+}
+
+TEST(TileCover, DifferentOverscaledZWrapped) {
+ Transform transform;
+ transform.resize({512, 512});
+ transform.jumpTo(CameraOptions()
+ .withCenter(LatLng{
+ 0.1,
+ -180.1,
+ })
+ .withZoom(1.0));
+
+ EXPECT_EQ(
+ (std::vector<OverscaledTileID>{{2, 0, {1, 1, 0}}, {2, 1, {1, 0, 0}}, {2, 0, {1, 1, 1}}, {2, 1, {1, 0, 1}}}),
+ util::tileCover(transform.getState(), 1, 2));
+}
+
+TEST(TileCover, FlippedY) {
+ Transform transform;
+ transform.resize({512, 512});
+ transform.setViewportMode(ViewportMode::FlippedY);
+ transform.jumpTo(CameraOptions()
+ .withCenter(LatLng{
+ 0.2,
+ -0.1,
+ })
+ .withZoom(1.0));
+
+ EXPECT_EQ((std::vector<OverscaledTileID>{{1, 0, 0}, {1, 1, 0}, {1, 0, 1}, {1, 1, 1}}),
+ util::tileCover(transform.getState(), 1));
+}
+
+TEST(TileCover, FlippedYPitch) {
+ Transform transform;
+ transform.resize({512, 512});
+ transform.setViewportMode(ViewportMode::FlippedY);
+ transform.jumpTo(CameraOptions()
+ .withCenter(LatLng{
+ 0.1,
+ -0.1,
+ })
+ .withZoom(2.0)
+ .withBearing(5.0)
+ .withPitch(40.0));
+
+ EXPECT_EQ((std::vector<OverscaledTileID>{{2, 1, 1}, {2, 2, 1}, {2, 1, 2}, {2, 2, 2}}),
+ util::tileCover(transform.getState(), 2));
+}
+
+TEST(TileCover, FlippedYHelsinki) {
+ Transform transform;
+ transform.resize({512, 512});
+ transform.setViewportMode(ViewportMode::FlippedY);
+ transform.jumpTo(CameraOptions()
+ .withCenter(LatLng{
+ 60.167231,
+ 24.942063,
+ })
+ .withZoom(11.447425));
+
+ EXPECT_EQ((std::vector<OverscaledTileID>{{11, 1165, 592}, {11, 1166, 592}, {11, 1165, 593}, {11, 1166, 593}}),
+ util::tileCover(transform.getState(), 11));
}
TEST(TileCoverStream, Arctic) {