Index: Riskeer/HeightStructures/src/Riskeer.HeightStructures.Data/HeightStructuresFailureMechanismSectionResultDetailedAssessmentExtensions.cs
===================================================================
diff -u -rb0d25d2dab3c6ba9b1aff684a0cf41f842e0ec29 -rffa91975e2aa4e0c52b704eceef9a609ddd827b4
--- Riskeer/HeightStructures/src/Riskeer.HeightStructures.Data/HeightStructuresFailureMechanismSectionResultDetailedAssessmentExtensions.cs (.../HeightStructuresFailureMechanismSectionResultDetailedAssessmentExtensions.cs) (revision b0d25d2dab3c6ba9b1aff684a0cf41f842e0ec29)
+++ Riskeer/HeightStructures/src/Riskeer.HeightStructures.Data/HeightStructuresFailureMechanismSectionResultDetailedAssessmentExtensions.cs (.../HeightStructuresFailureMechanismSectionResultDetailedAssessmentExtensions.cs) (revision ffa91975e2aa4e0c52b704eceef9a609ddd827b4)
@@ -21,7 +21,11 @@
using System;
using System.Collections.Generic;
+using System.Linq;
+using Core.Common.Base.Data;
+using Core.Common.Base.Geometry;
using Riskeer.Common.Data.AssessmentSection;
+using Riskeer.Common.Data.Calculation;
using Riskeer.Common.Data.Probability;
using Riskeer.Common.Data.Structures;
@@ -78,5 +82,57 @@
return derivedOutput.Probability;
}
+
+ ///
+ /// Gets the total contribution of all relevant calculation scenarios.
+ ///
+ /// The section result to get the total contribution for.
+ /// The calculation scenarios to get the total contribution for.
+ /// The total contribution of all relevant calculation scenarios.
+ /// Thrown when any parameter is null.
+ public static RoundedDouble GetTotalContribution(this HeightStructuresFailureMechanismSectionResult sectionResult,
+ IEnumerable> calculationScenarios)
+ {
+ if (sectionResult == null)
+ {
+ throw new ArgumentNullException(nameof(sectionResult));
+ }
+
+ if (calculationScenarios == null)
+ {
+ throw new ArgumentNullException(nameof(calculationScenarios));
+ }
+
+ return (RoundedDouble) sectionResult
+ .GetCalculationScenarios(calculationScenarios)
+ .Aggregate(0, (current, calculationScenario) => current + calculationScenario.Contribution);
+ }
+
+ ///
+ /// Gets a collection of the relevant .
+ ///
+ /// The section result to get the relevant scenarios for.
+ /// The calculation scenarios to get the relevant scenarios from.
+ /// A collection of relevant calculation scenarios.
+ /// Thrown when any parameter is null.
+ public static IEnumerable> GetCalculationScenarios(
+ this HeightStructuresFailureMechanismSectionResult sectionResult,
+ IEnumerable> calculationScenarios)
+ {
+ if (sectionResult == null)
+ {
+ throw new ArgumentNullException(nameof(sectionResult));
+ }
+
+ if (calculationScenarios == null)
+ {
+ throw new ArgumentNullException(nameof(calculationScenarios));
+ }
+
+ IEnumerable lineSegments = Math2D.ConvertPointsToLineSegments(sectionResult.Section.Points);
+
+ return calculationScenarios
+ .Where(cs => cs.IsRelevant && cs.IsStructureIntersectionWithReferenceLineInSection(lineSegments));
+ }
}
}
\ No newline at end of file
Index: Riskeer/HeightStructures/test/Riskeer.HeightStructures.Data.Test/HeightStructuresFailureMechanismSectionResultDetailedAssessmentExtensionsTest.cs
===================================================================
diff -u -rb0d25d2dab3c6ba9b1aff684a0cf41f842e0ec29 -rffa91975e2aa4e0c52b704eceef9a609ddd827b4
--- Riskeer/HeightStructures/test/Riskeer.HeightStructures.Data.Test/HeightStructuresFailureMechanismSectionResultDetailedAssessmentExtensionsTest.cs (.../HeightStructuresFailureMechanismSectionResultDetailedAssessmentExtensionsTest.cs) (revision b0d25d2dab3c6ba9b1aff684a0cf41f842e0ec29)
+++ Riskeer/HeightStructures/test/Riskeer.HeightStructures.Data.Test/HeightStructuresFailureMechanismSectionResultDetailedAssessmentExtensionsTest.cs (.../HeightStructuresFailureMechanismSectionResultDetailedAssessmentExtensionsTest.cs) (revision ffa91975e2aa4e0c52b704eceef9a609ddd827b4)
@@ -20,7 +20,10 @@
// All rights reserved.
using System;
+using System.Collections.Generic;
using System.Linq;
+using Core.Common.Base.Data;
+using Core.Common.Base.Geometry;
using NUnit.Framework;
using Rhino.Mocks;
using Riskeer.Common.Data.AssessmentSection;
@@ -185,5 +188,132 @@
Assert.AreEqual(0.21185539858339669, detailedAssessmentProbability);
mocks.VerifyAll();
}
+
+ [Test]
+ public void GetTotalContribution_SectionResultNull_ThrowsArgumentNullException()
+ {
+ // Call
+ void Call() => ((HeightStructuresFailureMechanismSectionResult) null).GetTotalContribution(Enumerable.Empty>());
+
+ // Assert
+ var exception = Assert.Throws(Call);
+ Assert.AreEqual("sectionResult", exception.ParamName);
+ }
+
+ [Test]
+ public void GetTotalContribution_CalculationScenariosNull_ThrowsArgumentNullException()
+ {
+ // Setup
+ FailureMechanismSection section = FailureMechanismSectionTestFactory.CreateFailureMechanismSection();
+ var sectionResult = new HeightStructuresFailureMechanismSectionResult(section);
+
+ // Call
+ void Call() => sectionResult.GetTotalContribution(null);
+
+ // Assert
+ var exception = Assert.Throws(Call);
+ Assert.AreEqual("calculationScenarios", exception.ParamName);
+ }
+
+ [Test]
+ public void GetTotalContribution_WithScenarios_ReturnsTotalRelevantScenarioContribution()
+ {
+ // Setup
+ FailureMechanismSection section = FailureMechanismSectionTestFactory.CreateFailureMechanismSection();
+ var failureMechanismSectionResult = new HeightStructuresFailureMechanismSectionResult(section);
+
+ StructuresCalculationScenario calculationScenario = HeightStructuresCalculationScenarioTestFactory.CreateNotCalculatedHeightStructuresCalculationScenario(section);
+ calculationScenario.Contribution = (RoundedDouble) 0.3211;
+
+ StructuresCalculationScenario calculationScenario2 = HeightStructuresCalculationScenarioTestFactory.CreateNotCalculatedHeightStructuresCalculationScenario(section);
+ calculationScenario2.Contribution = (RoundedDouble) 0.5435;
+
+ StructuresCalculationScenario calculationScenario3 = HeightStructuresCalculationScenarioTestFactory.CreateNotCalculatedHeightStructuresCalculationScenario(section);
+ calculationScenario3.IsRelevant = false;
+
+ StructuresCalculationScenario[] calculationScenarios =
+ {
+ calculationScenario,
+ calculationScenario2,
+ calculationScenario3
+ };
+
+ // Call
+ RoundedDouble totalContribution = failureMechanismSectionResult.GetTotalContribution(calculationScenarios);
+
+ // Assert
+ Assert.AreEqual((RoundedDouble) 0.8646, totalContribution);
+ }
+
+ [Test]
+ public void GetCalculationScenarios_SectionResultNull_ThrowsArgumentNullException()
+ {
+ // Call
+ void Call() => ((HeightStructuresFailureMechanismSectionResult) null).GetCalculationScenarios(Enumerable.Empty>());
+
+ // Assert
+ var exception = Assert.Throws(Call);
+ Assert.AreEqual("sectionResult", exception.ParamName);
+ }
+
+ [Test]
+ public void GetCalculationScenarios_CalculationScenariosNull_ThrowsArgumentNullException()
+ {
+ // Setup
+ FailureMechanismSection section = FailureMechanismSectionTestFactory.CreateFailureMechanismSection();
+ var sectionResult = new HeightStructuresFailureMechanismSectionResult(section);
+
+ // Call
+ void Call() => sectionResult.GetCalculationScenarios(null);
+
+ // Assert
+ var exception = Assert.Throws(Call);
+ Assert.AreEqual("calculationScenarios", exception.ParamName);
+ }
+
+ [Test]
+ public void GetCalculationScenarios_WithRelevantAndIrrelevantScenarios_ReturnsRelevantCalculationScenarios()
+ {
+ // Setup
+ FailureMechanismSection section = FailureMechanismSectionTestFactory.CreateFailureMechanismSection();
+ var sectionResult = new HeightStructuresFailureMechanismSectionResult(section);
+ StructuresCalculationScenario calculationScenario = HeightStructuresCalculationScenarioTestFactory.CreateNotCalculatedHeightStructuresCalculationScenario(section);
+ StructuresCalculationScenario calculationScenario2 = HeightStructuresCalculationScenarioTestFactory.CreateNotCalculatedHeightStructuresCalculationScenario(section);
+ calculationScenario2.IsRelevant = false;
+
+ // Call
+ IEnumerable> relevantScenarios = sectionResult.GetCalculationScenarios(new[]
+ {
+ calculationScenario,
+ calculationScenario2
+ });
+
+ // AssertJep
+
+ Assert.AreEqual(calculationScenario, relevantScenarios.Single());
+ }
+
+ [Test]
+ public void GetCalculationScenarios_WithoutScenarioIntersectingSection_ReturnsNoCalculationScenarios()
+ {
+ // Setup
+ FailureMechanismSection section = FailureMechanismSectionTestFactory.CreateFailureMechanismSection(new[]
+ {
+ new Point2D(999, 999),
+ new Point2D(998, 998)
+ });
+ var sectionResult = new HeightStructuresFailureMechanismSectionResult(section);
+ StructuresCalculationScenario calculationScenario = HeightStructuresCalculationScenarioTestFactory.CreateNotCalculatedHeightStructuresCalculationScenario(
+ FailureMechanismSectionTestFactory.CreateFailureMechanismSection());
+
+ // Call
+ IEnumerable> relevantScenarios = sectionResult.GetCalculationScenarios(new[]
+ {
+ calculationScenario
+ });
+
+ // Assert
+ CollectionAssert.IsEmpty(relevantScenarios);
+ }
}
}
\ No newline at end of file