//[InlineData(0, 0, 25.540275049115913, 2.226588081204977, 72.2331368696791, 353.04240000000004)] public async Task Test_DetailedPassCountStatistics_SiteModelWithSingleTAGFile_FullExtents (ushort minTarget, ushort maxTarget, double percentBelow, double percentWithin, double percentAbove, double totalArea) { AddClusterComputeGridRouting(); AddApplicationGridRouting(); var tagFiles = new[] { Path.Combine(TestHelper.CommonTestDataPath, "TestTAGFile.tag"), }; var siteModel = DITAGFileAndSubGridRequestsFixture.BuildModel(tagFiles, out _); var operation = new PassCountStatisticsOperation(); var arg = SimplePassCountStatisticsArgument(siteModel, minTarget, maxTarget); arg.PassCountDetailValues = new[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 }; var passCountDetailResult = await operation.ExecuteAsync(arg); passCountDetailResult.Should().NotBeNull(); // Checks counts and percentages long[] expectedCounts = { 755, 442, 663, 1038, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; // long[] expectedCounts = { 93, 687, 68, 385, 57, 598, 65, 986, 52, 63, 0, 0, 0, 0, 0 }; long expectedCountsSum = 0; for (int i = 0; i < expectedCounts.Length; i++) { expectedCountsSum += (i + 1) * expectedCounts[i]; } // Is sum of counts the same? long passCountDetailResultSum = 0; for (int i = 0; i < passCountDetailResult.Counts.Length; i++) { passCountDetailResultSum += (i + 1) * passCountDetailResult.Counts[i]; } passCountDetailResultSum.Should().Be(expectedCountsSum); // Are all counts the same and do percentages match? long totalCount = passCountDetailResult.Counts.Sum(); for (int i = 0; i < expectedCounts.Length; i++) { expectedCounts[i].Should().Be(passCountDetailResult.Counts[i]); passCountDetailResult.Percents[i].Should().BeApproximately(100.0 * expectedCounts[i] / (1.0 * totalCount), 0.001); } // Check summary related fields are zero passCountDetailResult.ResultStatus.Should().Be(RequestErrorStatus.OK); passCountDetailResult.ReturnCode.Should().Be(MissingTargetDataResultType.NoResult); passCountDetailResult.BelowTargetPercent.Should().BeApproximately(percentBelow, 0.001); passCountDetailResult.AboveTargetPercent.Should().BeApproximately(percentAbove, 0.001); passCountDetailResult.WithinTargetPercent.Should().BeApproximately(percentWithin, 0.001); passCountDetailResult.TotalAreaCoveredSqMeters.Should().BeApproximately(totalArea, 0.000001); passCountDetailResult.IsTargetPassCountConstant.Should().BeTrue(); }
public async Task Test_DetailedPassCountStatistics_SiteModelWithSingleCell_FullExtents (ushort minTarget, ushort maxTarget, double percentBelow, double percentWithin, double percentAbove) { AddClusterComputeGridRouting(); AddApplicationGridRouting(); var siteModel = BuildModelForSingleCellPassCount(HEIGHT_INCREMENT_0_5); var operation = new PassCountStatisticsOperation(); var arg = SimplePassCountStatisticsArgument(siteModel, minTarget, maxTarget); arg.PassCountDetailValues = new[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 }; var passCountDetailResult = await operation.ExecuteAsync(arg); passCountDetailResult.Should().NotBeNull(); // Checks counts and percentages passCountDetailResult.Counts.Sum().Should().Be(1); passCountDetailResult.Counts[9].Should().Be(1); passCountDetailResult.Percents.Sum().Should().BeApproximately(100.0, 0.000001); passCountDetailResult.Percents[9].Should().BeApproximately(100.0, 0.000001); // Check summary related fields are zero passCountDetailResult.ResultStatus.Should().Be(RequestErrorStatus.OK); passCountDetailResult.ReturnCode.Should().Be(MissingTargetDataResultType.PartialResultMissingTarget); passCountDetailResult.BelowTargetPercent.Should().BeApproximately(percentBelow, 0.001); passCountDetailResult.AboveTargetPercent.Should().BeApproximately(percentAbove, 0.001); passCountDetailResult.WithinTargetPercent.Should().BeApproximately(percentWithin, 0.001); passCountDetailResult.TotalAreaCoveredSqMeters.Should().BeApproximately(0, 0.000001); // This being zero seems strange... passCountDetailResult.IsTargetPassCountConstant.Should().BeTrue(); }
public async Task Test_SummaryPassCountStatistics_SiteModelWithSingleTAGFile_FullExtents_WithPassCountTargetOverrides (ushort minTarget, ushort maxTarget, double percentBelow, double percentWithin, double percentAbove, double totalArea) { AddClusterComputeGridRouting(); AddApplicationGridRouting(); var tagFiles = new[] { Path.Combine(TestHelper.CommonTestDataPath, "TestTAGFile.tag"), }; var siteModel = DITAGFileAndSubGridRequestsFixture.BuildModel(tagFiles, out _); var operation = new PassCountStatisticsOperation(); var passCountSummaryResult = await operation.ExecuteAsync(SimplePassCountStatisticsArgument(siteModel, minTarget, maxTarget)); passCountSummaryResult.Should().NotBeNull(); passCountSummaryResult.ResultStatus.Should().Be(RequestErrorStatus.OK); passCountSummaryResult.ReturnCode.Should().Be(MissingTargetDataResultType.NoResult); passCountSummaryResult.BelowTargetPercent.Should().BeApproximately(percentBelow, 0.001); passCountSummaryResult.AboveTargetPercent.Should().BeApproximately(percentAbove, 0.001); passCountSummaryResult.WithinTargetPercent.Should().BeApproximately(percentWithin, 0.001); passCountSummaryResult.TotalAreaCoveredSqMeters.Should().BeApproximately(totalArea, 0.000001); passCountSummaryResult.IsTargetPassCountConstant.Should().BeTrue(); passCountSummaryResult.Counts.Should().BeNull(); passCountSummaryResult.Percents.Should().BeNull(); }
public async Task <JsonResult> GetPassCountDetails([FromRoute] string siteModelID, [FromBody] OverrideParameters overrides) { string resultToReturn; if (!Guid.TryParse(siteModelID, out var UID)) { resultToReturn = $"<b>Invalid Site Model UID: {siteModelID}</b>"; } else { var siteModel = DIContext.Obtain <ISiteModels>().GetSiteModel(UID, false); var passCountBands = new[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 }; if (siteModel == null) { resultToReturn = $"<b>Site model {UID} is unavailable</b>"; } else { var sw = new Stopwatch(); sw.Start(); var operation = new PassCountStatisticsOperation(); var result = await operation.ExecuteAsync( new PassCountStatisticsArgument() { ProjectID = siteModel.ID, Filters = new FilterSet() { Filters = new[] { new CombinedFilter() } }, PassCountDetailValues = passCountBands, Overrides = overrides } ); if (result != null) { string resultString = $"<b>Pass Count Details Results (in {sw.Elapsed}) :</b><br/>"; resultString += "<b>================================================</b><br/>"; var anyTwoDigitsNumber = passCountBands.ToList().Find(s => s >= TWO_DIGITS_NUMBER); for (int i = 0; i < passCountBands.Length; i++) { string space = anyTwoDigitsNumber > 0 && passCountBands[i] < TWO_DIGITS_NUMBER ? " " : string.Empty; resultString += $"<b>{space}{passCountBands[i]}</b> - {result.Percents[i]:##0.#0}%<br/>"; } resultToReturn = resultString; } else { resultToReturn = "<b>No result</b>"; } } } return(new JsonResult(resultToReturn)); }
public async Task <JsonResult> GetPassCountSummary([FromRoute] string siteModelID, [FromBody] OverrideParameters overrides) { string resultToReturn; if (!Guid.TryParse(siteModelID, out var UID)) { resultToReturn = $"<b>Invalid Site Model UID: {siteModelID}</b>"; } else { var siteModel = DIContext.Obtain <ISiteModels>().GetSiteModel(UID, false); if (siteModel == null) { resultToReturn = $"<b>Site model {UID} is unavailable</b>"; } else { var sw = new Stopwatch(); sw.Start(); var operation = new PassCountStatisticsOperation(); var result = await operation.ExecuteAsync( new PassCountStatisticsArgument() { ProjectID = siteModel.ID, Filters = new FilterSet() { Filters = new[] { new CombinedFilter() } }, Overrides = overrides } ); if (result != null) { string resultString = $"<b>Pass Count Summary Results (in {sw.Elapsed}) :</b><br/>"; resultString += "<b>================================================</b><br/>"; resultString += $"<b>Above Pass Count Percentage:</b> {result.AboveTargetPercent}<br/>"; resultString += $"<b>Within Pass Count Percentage Range:</b> {result.WithinTargetPercent}<br/>"; resultString += $"<b>Below Pass Count Percentage:</b> {result.BelowTargetPercent}<br/>"; resultString += $"<b>Total Area Covered in Sq Meters:</b> {result.TotalAreaCoveredSqMeters}<br/>"; resultToReturn = resultString; } else { resultToReturn = "<b>No result</b>"; } } } return(new JsonResult(resultToReturn)); }
public async Task Test_SummaryPassCountStatistics_EmptySiteModel_FullExtents_NoPassCountTargetOverride() { AddClusterComputeGridRouting(); AddApplicationGridRouting(); var siteModel = DITAGFileAndSubGridRequestsWithIgniteFixture.NewEmptyModel(); var operation = new PassCountStatisticsOperation(); var passCountSummaryResult = await operation.ExecuteAsync(SimplePassCountStatisticsArgument(siteModel, 0, 0)); passCountSummaryResult.Should().NotBeNull(); passCountSummaryResult.ResultStatus.Should().Be(RequestErrorStatus.FailedToRequestDatamodelStatistics); }
public async Task Test_SummaryPassCountStatistics_SiteModelWithSingleCell_FullExtents_NoPassCountTargetOverride() { AddClusterComputeGridRouting(); AddApplicationGridRouting(); var siteModel = BuildModelForSingleCellPassCount(HEIGHT_INCREMENT_0_5); var operation = new PassCountStatisticsOperation(); var passCountSummaryResult = await operation.ExecuteAsync(SimplePassCountStatisticsArgument(siteModel, 0, 0)); passCountSummaryResult.Should().NotBeNull(); passCountSummaryResult.ResultStatus.Should().Be(RequestErrorStatus.OK); passCountSummaryResult.ReturnCode.Should().Be(MissingTargetDataResultType.PartialResultMissingTarget); }
protected override async Task <ContractExecutionResult> ProcessAsyncEx <T>(T item) { var request = item as PassCountDetailsRequest; if (request == null) { ThrowRequestTypeCastException <PassCountDetailsRequest>(); } var siteModel = GetSiteModel(request.ProjectUid); var filter = ConvertFilter(request.Filter, siteModel); var operation = new PassCountStatisticsOperation(); var passCountDetailsResult = await operation.ExecuteAsync(new PassCountStatisticsArgument() { ProjectID = siteModel.ID, Filters = new FilterSet(filter), PassCountDetailValues = UpdatePassCounts(request.PassCounts), Overrides = AutoMapperUtility.Automapper.Map <OverrideParameters>(request.Overrides), LiftParams = ConvertLift(request.LiftSettings, request.Filter?.LayerType) }); if (passCountDetailsResult != null) { if (passCountDetailsResult.ResultStatus == RequestErrorStatus.OK) { return(new PassCountDetailedResult( new TargetPassCountRange( passCountDetailsResult.ConstantTargetPassCountRange.Min, passCountDetailsResult.ConstantTargetPassCountRange.Max), passCountDetailsResult.IsTargetPassCountConstant, passCountDetailsResult.Percents, passCountDetailsResult.TotalAreaCoveredSqMeters )); } throw CreateServiceException <DetailedPassCountExecutor>(passCountDetailsResult.ResultStatus); } throw CreateServiceException <DetailedPassCountExecutor>(); }
public async Task Test_SummaryPassCountStatistics_SiteModelWithSingleCell_FullExtents_WithPassCountTargetOverrides (ushort minTarget, ushort maxTarget, double percentBelow, double percentWithin, double percentAbove) { AddClusterComputeGridRouting(); AddApplicationGridRouting(); var siteModel = BuildModelForSingleCellPassCount(HEIGHT_INCREMENT_0_5); var operation = new PassCountStatisticsOperation(); var passCountSummaryResult = await operation.ExecuteAsync(SimplePassCountStatisticsArgument(siteModel, minTarget, maxTarget)); passCountSummaryResult.Should().NotBeNull(); passCountSummaryResult.ResultStatus.Should().Be(RequestErrorStatus.OK); passCountSummaryResult.ReturnCode.Should().Be(MissingTargetDataResultType.NoResult); passCountSummaryResult.BelowTargetPercent.Should().BeApproximately(percentBelow, 0.001); passCountSummaryResult.AboveTargetPercent.Should().BeApproximately(percentAbove, 0.001); passCountSummaryResult.WithinTargetPercent.Should().BeApproximately(percentWithin, 0.001); passCountSummaryResult.TotalAreaCoveredSqMeters.Should().BeApproximately(SubGridTreeConsts.DefaultCellSize * SubGridTreeConsts.DefaultCellSize, 0.000001); passCountSummaryResult.IsTargetPassCountConstant.Should().BeTrue(); passCountSummaryResult.Counts.Should().BeNull(); passCountSummaryResult.Percents.Should().BeNull(); }
public async Task Test_SummaryPassCountStatistics_SiteModelWithSingleCell_FullExtents_NoPassCountTargetOverride_WithMachinePassCountTarget() { AddClusterComputeGridRouting(); AddApplicationGridRouting(); var siteModel = BuildModelForSingleCellPassCount(HEIGHT_INCREMENT_0_5); siteModel.MachinesTargetValues[0].TargetPassCountStateEvents.PutValueAtDate(VSS.TRex.Common.Consts.MIN_DATETIME_AS_UTC, 10); var operation = new PassCountStatisticsOperation(); var passCountSummaryResult = await operation.ExecuteAsync(SimplePassCountStatisticsArgument(siteModel, 0, 0)); passCountSummaryResult.Should().NotBeNull(); passCountSummaryResult.ResultStatus.Should().Be(RequestErrorStatus.OK); passCountSummaryResult.ReturnCode.Should().Be(MissingTargetDataResultType.NoResult); passCountSummaryResult.BelowTargetPercent.Should().Be(0); passCountSummaryResult.AboveTargetPercent.Should().Be(0); passCountSummaryResult.WithinTargetPercent.Should().Be(100); passCountSummaryResult.TotalAreaCoveredSqMeters.Should().BeApproximately(SubGridTreeConsts.DefaultCellSize * SubGridTreeConsts.DefaultCellSize, 0.000001); passCountSummaryResult.IsTargetPassCountConstant.Should().BeTrue(); passCountSummaryResult.Counts.Should().BeNull(); passCountSummaryResult.Percents.Should().BeNull(); }
protected override async Task <ContractExecutionResult> ProcessAsyncEx <T>(T item) { var request = item as PassCountSummaryRequest; if (request == null) { ThrowRequestTypeCastException <PassCountSummaryRequest>(); } var siteModel = GetSiteModel(request.ProjectUid); var filter = ConvertFilter(request.Filter, siteModel); var operation = new PassCountStatisticsOperation(); var passCountSummaryResult = await operation.ExecuteAsync( new PassCountStatisticsArgument { ProjectID = siteModel.ID, Filters = new FilterSet(filter), Overrides = AutoMapperUtility.Automapper.Map <OverrideParameters>(request.Overrides), LiftParams = ConvertLift(request.LiftSettings, request.Filter?.LayerType) } ); if (passCountSummaryResult != null) { if (passCountSummaryResult.ResultStatus == RequestErrorStatus.OK) { return(ConvertResult(passCountSummaryResult)); } throw CreateServiceException <SummaryPassCountExecutor>(passCountSummaryResult.ResultStatus); } throw CreateServiceException <SummaryPassCountExecutor>(); }
public void Test_SummaryPassCountStatistics_Creation() { var operation = new PassCountStatisticsOperation(); operation.Should().NotBeNull(); }