From f3e9c4733afaa5313f0cc7d346afe4b63f8f705a Mon Sep 17 00:00:00 2001 From: Alexander Shalamov Date: Fri, 27 Mar 2020 15:18:39 +0200 Subject: [core] Add unit tests --- test/algorithm/update_renderables.test.cpp | 63 ++++++++++++++++++++++++++++++ test/style/source.test.cpp | 60 ++++++++++++++++++++++++++-- 2 files changed, 119 insertions(+), 4 deletions(-) (limited to 'test') diff --git a/test/algorithm/update_renderables.test.cpp b/test/algorithm/update_renderables.test.cpp index 22d8d79443..6958f21ea2 100644 --- a/test/algorithm/update_renderables.test.cpp +++ b/test/algorithm/update_renderables.test.cpp @@ -1309,3 +1309,66 @@ TEST(UpdateRenderables, LoadOverscaledMaxZoomTile) { }), log); } + +TEST(UpdateRenderables, MaxParentOverscaleFactor) { + ActionLog log; + MockSource source; + auto getTileData = getTileDataFn(log, source.dataTiles); + auto createTileData = createTileDataFn(log, source.dataTiles); + auto retainTileData = retainTileDataFn(log); + auto renderTile = renderTileFn(log); + + source.idealTiles.emplace(UnwrappedTileID{4, 0, 0}); + source.idealTiles.emplace(UnwrappedTileID{4, 1, 0}); + + auto tile_0_0_0_0 = source.createTileData(OverscaledTileID{0, 0, 0}); + tile_0_0_0_0->renderable = true; + + // Set max parent overscale factor to 4, so that tile 0,0,0 would be rendered + algorithm::updateRenderables( + getTileData, createTileData, retainTileData, renderTile, source.idealTiles, source.zoomRange, 4, 4); + EXPECT_EQ(ActionLog({GetTileDataAction{{4, 0, {4, 0, 0}}, NotFound}, // ideal tile + CreateTileDataAction{{4, 0, {4, 0, 0}}}, + RetainTileDataAction{{4, 0, {4, 0, 0}}, TileNecessity::Required}, + GetTileDataAction{{5, 0, {5, 0, 0}}, NotFound}, // child tiles + GetTileDataAction{{5, 0, {5, 0, 1}}, NotFound}, + GetTileDataAction{{5, 0, {5, 1, 0}}, NotFound}, + GetTileDataAction{{5, 0, {5, 1, 1}}, NotFound}, + GetTileDataAction{{3, 0, {3, 0, 0}}, NotFound}, // ascent + GetTileDataAction{{2, 0, {2, 0, 0}}, NotFound}, + GetTileDataAction{{1, 0, {1, 0, 0}}, NotFound}, + GetTileDataAction{{0, 0, {0, 0, 0}}, Found}, + RetainTileDataAction{{0, 0, {0, 0, 0}}, TileNecessity::Optional}, + RenderTileAction{{0, 0, 0}, *tile_0_0_0_0}, // render tile 0,0,0 + GetTileDataAction{{4, 0, {4, 1, 0}}, NotFound}, // ideal tile + CreateTileDataAction{{4, 0, {4, 1, 0}}}, + RetainTileDataAction{{4, 0, {4, 1, 0}}, TileNecessity::Required}, + GetTileDataAction{{5, 0, {5, 2, 0}}, NotFound}, // child tiles + GetTileDataAction{{5, 0, {5, 2, 1}}, NotFound}, + GetTileDataAction{{5, 0, {5, 3, 0}}, NotFound}, + GetTileDataAction{{5, 0, {5, 3, 1}}, NotFound}}), + log); + + log.clear(); + + // Set max parent overscale factor to 3. + // Parent tile 0,0,0 should not be requested / rendered. + algorithm::updateRenderables( + getTileData, createTileData, retainTileData, renderTile, source.idealTiles, source.zoomRange, 4, 3); + EXPECT_EQ(ActionLog({GetTileDataAction{{4, 0, {4, 0, 0}}, Found}, // ideal tile + RetainTileDataAction{{4, 0, {4, 0, 0}}, TileNecessity::Required}, + GetTileDataAction{{5, 0, {5, 0, 0}}, NotFound}, // child tiles + GetTileDataAction{{5, 0, {5, 0, 1}}, NotFound}, + GetTileDataAction{{5, 0, {5, 1, 0}}, NotFound}, + GetTileDataAction{{5, 0, {5, 1, 1}}, NotFound}, + GetTileDataAction{{3, 0, {3, 0, 0}}, NotFound}, // ascent + GetTileDataAction{{2, 0, {2, 0, 0}}, NotFound}, + GetTileDataAction{{1, 0, {1, 0, 0}}, NotFound}, + GetTileDataAction{{4, 0, {4, 1, 0}}, Found}, // ideal tile + RetainTileDataAction{{4, 0, {4, 1, 0}}, TileNecessity::Required}, + GetTileDataAction{{5, 0, {5, 2, 0}}, NotFound}, // child tiles + GetTileDataAction{{5, 0, {5, 2, 1}}, NotFound}, + GetTileDataAction{{5, 0, {5, 3, 0}}, NotFound}, + GetTileDataAction{{5, 0, {5, 3, 1}}, NotFound}}), + log); +} diff --git a/test/style/source.test.cpp b/test/style/source.test.cpp index 37f87fb982..dae2aef9ca 100644 --- a/test/style/source.test.cpp +++ b/test/style/source.test.cpp @@ -1,7 +1,8 @@ -#include +#include #include -#include #include +#include +#include #include #include @@ -32,10 +33,11 @@ #include #include -#include #include #include #include +#include +#include #include #include @@ -775,7 +777,8 @@ public: tileset.zoomRange, tileset.bounds, [&](const OverscaledTileID& tileID) { return std::make_unique(*this, tileID); }, - baseImpl->getPrefetchZoomDelta()); + baseImpl->getPrefetchZoomDelta(), + baseImpl->getMaxOverscaleFactorForParentTiles()); } const optional& getTileset() const override { @@ -880,3 +883,52 @@ TEST(Source, GeoJSONSourceTilesAfterDataReset) { .update(source.baseImpl, layers, true, true, test.tileParameters(MapMode::Static)); EXPECT_TRUE(renderSource.isLoaded()); // Tiles are reset in static mode. } + +TEST(Source, SetMaxParentOverscaleFactor) { + SourceTest test; + test.transform.jumpTo(CameraOptions().withCenter(LatLng()).withZoom(8.0)); + test.transformState = test.transform.getState(); + util::Timer timer; + FixtureLog log; + + test.fileSource->tileResponse = [&](const Resource& res) { + if (res.tileData->z == 5) { + timer.start(Milliseconds(10), Duration::zero(), [&] { test.end(); }); + } + // No tiles above zoom level 5 should be requested. + EXPECT_LE(5, int(res.tileData->z)); + Response response; + response.noContent = true; + return response; + }; + + RasterLayer layer("id", "source"); + Immutable layerProperties = + makeMutable(staticImmutableCast(layer.baseImpl)); + std::vector> layers{layerProperties}; + + Tileset tileset; + tileset.tiles = {"tiles"}; + + RasterSource source("source", tileset, 512); + ASSERT_EQ(nullopt, source.getMaxOverscaleFactorForParentTiles()); + source.setMaxOverscaleFactorForParentTiles(3); + ASSERT_EQ(3, *source.getMaxOverscaleFactorForParentTiles()); + source.loadDescription(*test.fileSource); + + auto renderSource = RenderSource::create(source.baseImpl); + renderSource->setObserver(&test.renderSourceObserver); + renderSource->update(source.baseImpl, layers, true, true, test.tileParameters()); + + test.renderSourceObserver.tileChanged = [&](RenderSource&, const OverscaledTileID&) { + renderSource->update(source.baseImpl, layers, true, true, test.tileParameters()); + }; + + test.run(); + + EXPECT_EQ( + 1u, + log.count( + {EventSeverity::Warning, Event::Style, -1, "Parent tile overscale factor will cap prefetch delta to 3"})); + EXPECT_EQ(0u, log.uncheckedCount()); +} -- cgit v1.2.1