public void TileFetcherShouldBehaveProperlyWithNoisyResponses() { // Arrange var schema = new GlobalSphericalMercator(); var tileSource = new TileSource(new SometimesFailingTileProvider(), schema); var memoryCache = new MemoryCache <Feature>(14, 17); var tileFetcher = new TileFetcher(tileSource, memoryCache); var random = new Random(31747074); var tiles = new List <Feature>(); // Act for (int i = 0; i < 100; i++) { var randomLevel = "5"; var randomCol = random.Next(schema.GetMatrixWidth(randomLevel)); var randomRow = random.Next(schema.GetMatrixHeight(randomLevel)); var tileRange = new TileRange(randomCol - 2, randomRow - 2, 5, 5); var unitsPerPixel = schema.Resolutions[randomLevel].UnitsPerPixel; var extent = TileTransform.TileToWorld(tileRange, randomLevel, schema); tileFetcher.ViewChanged(TileTransform.TileToWorld(tileRange, randomLevel, schema).ToBoundingBox(), unitsPerPixel); var tileInfos = schema.GetTileInfos(extent, randomLevel); foreach (var tileInfo in tileInfos) { tiles.Add(memoryCache.Find(tileInfo.Index)); } } // Assert Assert.True(tiles.Count > 0); Assert.True(memoryCache.TileCount == 0); }
private static ITileCache <Feature> PopulateMemoryCache(GlobalSphericalMercator schema, MemoryCache <Feature> cache, int levelId) { for (var i = levelId; i >= 0; i--) { var tiles = schema.GetTileInfos(schema.Extent, i.ToString(CultureInfo.InvariantCulture)); foreach (var tile in tiles) { if ((tile.Index.Col + tile.Index.Row) % 2 == 0) // Add only 50% of the tiles with the arbitrary rule. { cache.Add(tile.Index, new Feature()); } } } return(cache); }
private static ITileCache <IFeature?> PopulateMemoryCache(GlobalSphericalMercator schema, MemoryCache <IFeature?> cache, int levelId) { for (var i = levelId; i >= 0; i--) { var tiles = schema.GetTileInfos(schema.Extent, i); foreach (var tile in tiles) { if ((tile.Index.Col + tile.Index.Row) % 2 == 0) // Add only 50% of the tiles with the arbitrary rule. { cache.Add(tile.Index, new RasterFeature(new MRaster(Array.Empty <byte>(), new MRect(0, 0, 1, 1)))); } } } return(cache); }
public void GetTilesInViewWithBiggerExtentThanTileSchemaExtentReturnsCorrectNumberOfTiles() { // arrange var schema = new GlobalSphericalMercator(); var requestExtent = GrowExtent(schema.Extent, schema.Extent.Width); var counter = 0; foreach (var resolution in schema.Resolutions.OrderByDescending(r => r.Value.UnitsPerPixel)) { // act var tileInfos = schema.GetTileInfos(requestExtent, resolution.Value.Level).ToList(); // assert Assert.True(tileInfos.Count == (int)Math.Round(Math.Pow(4, counter++))); if (counter >= 6) { break; } } }