public void GetHashCode_IsNotEqual() { var result1 = new StatisticsCalculationResult(42, 42, 45, 45, 3, 3, 9, 9, 100); var result2 = new StatisticsCalculationResult(21, 21, 45, 45, 3, 3, 9, 9, 100); Assert.NotEqual(result1.GetHashCode(), result2.GetHashCode()); }
public void CalculateStatistics_IsCalledWithAlsoBlockTiles_ShouldIgnoreBlockTilesInCalculation() { // Arrange var helper = GetHelper(); var expected = new StatisticsCalculationResult(minX: 42, minY: 42, maxX: 45, maxY: 45, usedAreaWidth: 3, usedAreaHeight: 3, usedTiles: 9, minTiles: 9, efficiency: 100); var objects = new List <AnnoObject> { new AnnoObject { Template = "Blocker" }, new AnnoObject { Template = "Dummy", Position = new System.Windows.Point(42, 42), Size = new System.Windows.Size(3, 3), Road = false } }; // Act var result = helper.CalculateStatistics(objects); // Assert Assert.Equal(expected, result); }
public void Equals_IsNotEqual() { var result1 = new StatisticsCalculationResult(42, 42, 45, 45, 3, 3, 9, 9, 100); var result2 = new StatisticsCalculationResult(21, 21, 45, 45, 3, 3, 9, 9, 100); Assert.False(result1.Equals(result2)); Assert.False(result1.Equals((object)result2)); Assert.False(result1.Equals(null)); }
public void Equals_IsEqual() { var result1 = new StatisticsCalculationResult(42, 42, 45, 45, 3, 3, 9, 9, 100); var result2 = new StatisticsCalculationResult(42, 42, 45, 45, 3, 3, 9, 9, 100); Assert.True(result1.Equals(result2)); Assert.True(result1.Equals((object)result2)); Assert.True(result1.Equals(result1)); }
public void CalculateStatistics_IsCalledWithEmptyList_ShouldNotThrowAndNotReturnNull() { // Arrange var helper = GetHelper(); var result = new StatisticsCalculationResult(); // Act var ex = Record.Exception(() => result = helper.CalculateStatistics(new List <AnnoObject>())); // Assert Assert.Null(ex); Assert.NotNull(result); }
public void CalculateStatistics_IsCalledWithNull_ShouldNotThrowAndReturnNull() { // Arrange var helper = GetHelper(); var result = new StatisticsCalculationResult(); // Act var ex = Record.Exception(() => result = helper.CalculateStatistics(null)); // Assert Assert.Null(ex); Assert.Null(result); }
public void CalculateStatistics_IsCalledWithKnownLayout_IgnoreNothing_ShouldReturnCorrectResult() { // Arrange ILayoutLoader loader = new LayoutLoader(); using var streamWithLayout = new MemoryStream(Encoding.UTF8.GetBytes(testData_layout_with_blocking_tiles)); var loadedLayout = loader.LoadLayout(streamWithLayout, true); var helper = GetHelper(); var expected = new StatisticsCalculationResult(minX: 1, minY: 1, maxX: 38, maxY: 33, usedAreaWidth: 37, usedAreaHeight: 32, usedTiles: 1184, minTiles: 1057, efficiency: 89); // Act var result = helper.CalculateStatistics(loadedLayout.Objects, includeRoads: true, includeIgnoredObjects: true); // Assert Assert.Equal(expected, result); }
public void CalculateStatistics_IsCalledWithKnownLayout_IgnoreRoadsAndBlockTiles_ShouldReturnCorrectResult() { // Arrange ILayoutLoader loader = new LayoutLoader(); using var streamWithLayout = new MemoryStream(Encoding.UTF8.GetBytes(testData_layout_with_blocking_tiles)); var loadedLayout = loader.LoadLayout(streamWithLayout, true); var helper = GetHelper(); var expected = new StatisticsCalculationResult(minX: 3, minY: 3, maxX: 36, maxY: 31, usedAreaWidth: 33, usedAreaHeight: 28, usedTiles: 924, minTiles: 736, efficiency: 80); // Act var result = helper.CalculateStatistics(loadedLayout.Objects); // Assert Assert.Equal(expected, result); }
public StatisticsCalculationResult CalculateStatistics(List <AnnoObject> placedObjects) { var result = new StatisticsCalculationResult(); // calculate bouding box var boxX = placedObjects.Max(_ => _.Position.X + _.Size.Width) - placedObjects.Min(_ => _.Position.X); var boxY = placedObjects.Max(_ => _.Position.Y + _.Size.Height) - placedObjects.Min(_ => _.Position.Y); // calculate area of all buildings var minTiles = placedObjects.Where(_ => !_.Road).Sum(_ => _.Size.Width * _.Size.Height); result.UsedAreaX = boxX; result.UsedAreaY = boxY; result.UsedTiles = boxX * boxY; result.MinTiles = minTiles; result.Efficiency = Math.Round(minTiles / boxX / boxY * 100); return(result); }
public StatisticsCalculationResult CalculateStatistics(IEnumerable <AnnoObject> placedObjects) { if (placedObjects == null) { return(null); } var result = new StatisticsCalculationResult(); if (!placedObjects.Any()) { return(result); } /* old logic is easier to understand, but slower * // calculate bouding box * var boxX = placedObjects.Max(_ => _.Position.X + _.Size.Width) - placedObjects.Min(_ => _.Position.X); * var boxY = placedObjects.Max(_ => _.Position.Y + _.Size.Height) - placedObjects.Min(_ => _.Position.Y); * // calculate area of all buildings * var minTiles = placedObjects.Where(_ => !_.Road).Sum(_ => _.Size.Width * _.Size.Height); */ var maxX = double.MinValue; var maxY = double.MinValue; var minX = double.MaxValue; var minY = double.MaxValue; var sum = 0d; foreach (var curObject in placedObjects) { var curPosX = curObject.Position.X; var curPosY = curObject.Position.Y; var curSize = curObject.Size; var curMaxX = curPosX + curSize.Width; var curMaxY = curPosY + curSize.Height; if (curMaxX > maxX) { maxX = curMaxX; } if (curPosX < minX) { minX = curPosX; } if (curMaxY > maxY) { maxY = curMaxY; } if (curPosY < minY) { minY = curPosY; } if (!curObject.Road) { sum += (curSize.Width * curSize.Height); } } // calculate bouding box var boxX = maxX - minX; var boxY = maxY - minY; // calculate area of all buildings var minTiles = sum; result.UsedAreaX = boxX; result.UsedAreaY = boxY; result.UsedTiles = boxX * boxY; result.MinTiles = minTiles; result.Efficiency = Math.Round(minTiles / boxX / boxY * 100); return(result); }