Skip to content
This repository has been archived by the owner on Aug 8, 2023. It is now read-only.

Commit

Permalink
[core] Add unit tests
Browse files Browse the repository at this point in the history
  • Loading branch information
alexshalamov committed Mar 28, 2020
1 parent 6142f09 commit 3cf0c92
Show file tree
Hide file tree
Showing 2 changed files with 109 additions and 2 deletions.
63 changes: 63 additions & 0 deletions test/algorithm/update_renderables.test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}
48 changes: 46 additions & 2 deletions test/style/source.test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -32,10 +32,11 @@
#include <mbgl/util/premultiply.hpp>
#include <mbgl/util/image.hpp>

#include <mbgl/util/tileset.hpp>
#include <mbgl/util/logging.hpp>
#include <mbgl/util/optional.hpp>
#include <mbgl/util/range.hpp>
#include <mbgl/util/tileset.hpp>
#include <mbgl/util/timer.hpp>

#include <mbgl/annotation/annotation_manager.hpp>
#include <mbgl/annotation/annotation_source.hpp>
Expand Down Expand Up @@ -775,7 +776,8 @@ class FakeTileSource : public RenderTileSetSource {
tileset.zoomRange,
tileset.bounds,
[&](const OverscaledTileID& tileID) { return std::make_unique<FakeTile>(*this, tileID); },
baseImpl->getPrefetchZoomDelta());
baseImpl->getPrefetchZoomDelta(),
baseImpl->getMaxOverscaleFactorForParentTiles());
}

const optional<Tileset>& getTileset() const override {
Expand Down Expand Up @@ -880,3 +882,45 @@ 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;

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> layerProperties =
makeMutable<RasterLayerProperties>(staticImmutableCast<RasterLayer::Impl>(layer.baseImpl));
std::vector<Immutable<LayerProperties>> 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();
}

0 comments on commit 3cf0c92

Please sign in to comment.