Index: Riskeer/Common/src/Riskeer.Common.Data/AssemblyTool/FailureMechanismSectionAssemblyGroupFactory.cs
===================================================================
diff -u -r72c58e97845795fe3929d4ebaa7c6475b200eddb -r5aa18a89c72c1635e9d276b11c68753e7df93398
--- Riskeer/Common/src/Riskeer.Common.Data/AssemblyTool/FailureMechanismSectionAssemblyGroupFactory.cs (.../FailureMechanismSectionAssemblyGroupFactory.cs) (revision 72c58e97845795fe3929d4ebaa7c6475b200eddb)
+++ Riskeer/Common/src/Riskeer.Common.Data/AssemblyTool/FailureMechanismSectionAssemblyGroupFactory.cs (.../FailureMechanismSectionAssemblyGroupFactory.cs) (revision 5aa18a89c72c1635e9d276b11c68753e7df93398)
@@ -164,6 +164,47 @@
}
///
+ /// Assembles the failure mechanism section based on the input arguments.
+ ///
+ /// The the section belongs to.
+ /// The indicator whether the section is relevant.
+ /// The of the section.
+ /// The initial probability for the profile.
+ /// The initial probability for the section.
+ /// The indicator whether the section needs further analysis.
+ /// The refined probability for the profile.
+ /// The refined probability for the section.
+ /// Thrown when is null.
+ /// Thrown when is invalid.
+ /// Thrown when the section could not be successfully assembled.
+ public static FailureMechanismSectionAssemblyResult AssembleSection(
+ IAssessmentSection assessmentSection,
+ bool isRelevant, NonAdoptableInitialFailureMechanismResultType initialFailureMechanismResultType,
+ double initialProfileProbability, double initialSectionProbability,
+ bool furtherAnalysisNeeded,
+ double refinedProfileProbability, double refinedSectionProbability)
+ {
+ if (assessmentSection == null)
+ {
+ throw new ArgumentNullException(nameof(assessmentSection));
+ }
+
+ if (!Enum.IsDefined(typeof(NonAdoptableInitialFailureMechanismResultType), initialFailureMechanismResultType))
+ {
+ throw new InvalidEnumArgumentException(nameof(initialFailureMechanismResultType),
+ (int) initialFailureMechanismResultType,
+ typeof(NonAdoptableInitialFailureMechanismResultType));
+ }
+
+ FailureMechanismSectionAssemblyInput input = CreateInput(
+ assessmentSection, isRelevant, initialFailureMechanismResultType,
+ initialProfileProbability, initialSectionProbability, furtherAnalysisNeeded,
+ refinedProfileProbability, refinedSectionProbability);
+
+ return PerformAssembly(input);
+ }
+
+ ///
/// Performs the assembly based on the .
///
/// The input to use in the assembly.
Index: Riskeer/Common/test/Riskeer.Common.Data.Test/AssemblyTool/FailureMechanismSectionAssemblyGroupFactoryTest.cs
===================================================================
diff -u -rb4f2bb1d7e6a8e2028af63b32a6f2ea3d9b6e24e -r5aa18a89c72c1635e9d276b11c68753e7df93398
--- Riskeer/Common/test/Riskeer.Common.Data.Test/AssemblyTool/FailureMechanismSectionAssemblyGroupFactoryTest.cs (.../FailureMechanismSectionAssemblyGroupFactoryTest.cs) (revision b4f2bb1d7e6a8e2028af63b32a6f2ea3d9b6e24e)
+++ Riskeer/Common/test/Riskeer.Common.Data.Test/AssemblyTool/FailureMechanismSectionAssemblyGroupFactoryTest.cs (.../FailureMechanismSectionAssemblyGroupFactoryTest.cs) (revision 5aa18a89c72c1635e9d276b11c68753e7df93398)
@@ -39,17 +39,17 @@
[TestFixture]
public class FailureMechanismSectionAssemblyGroupFactoryTest
{
- #region Assemble section with non-adoptable initial failure mechanism result type and without profile probability
+ #region Assemble section with adoptable initial failure mechanism result type and without profile probability
[Test]
- public void AssembleSectionNonAdoptableWithoutProfileProbability_AssessmentSectionNull_ThrowsArgumentNullException()
+ public void AssembleSectionAdoptableWithoutProfileProbability_AssessmentSectionNull_ThrowsArgumentNullException()
{
// Setup
var random = new Random(21);
// Call
void Call() => FailureMechanismSectionAssemblyGroupFactory.AssembleSection(
- null, random.NextBoolean(), random.NextEnumValue(),
+ null, random.NextBoolean(), random.NextEnumValue(),
random.NextDouble(), random.NextBoolean(), random.NextDouble());
// Assert
@@ -58,7 +58,7 @@
}
[Test]
- public void AssembleSectionNonAdoptableWithoutProfileProbability_InvalidInitialFailureMechanismResultType_ThrowsInvalidEnumArgumentException()
+ public void AssembleSectionAdoptableWithoutProfileProbability_InvalidInitialFailureMechanismResultType_ThrowsInvalidEnumArgumentException()
{
// Setup
var random = new Random(21);
@@ -76,10 +76,11 @@
}
[Test]
- [TestCase(NonAdoptableInitialFailureMechanismResultType.Manual, true)]
- [TestCase(NonAdoptableInitialFailureMechanismResultType.NoFailureProbability, false)]
- public void AssembleSectionNonAdoptableWithoutProfileProbability_WithInput_SetsInputOnCalculator(NonAdoptableInitialFailureMechanismResultType initialFailureMechanismResultType,
- bool expectedHasProbabilitySpecified)
+ [TestCase(AdoptableInitialFailureMechanismResultType.Adopt, true)]
+ [TestCase(AdoptableInitialFailureMechanismResultType.Manual, true)]
+ [TestCase(AdoptableInitialFailureMechanismResultType.NoFailureProbability, false)]
+ public void AssembleSectionAdoptableWithoutProfileProbability_WithInput_SetsInputOnCalculator(AdoptableInitialFailureMechanismResultType initialFailureMechanismResultType,
+ bool expectedHasProbabilitySpecified)
{
// Setup
var random = new Random(21);
@@ -117,7 +118,7 @@
}
[Test]
- public void AssembleSectionNonAdoptableWithoutProfileProbability_CalculatorRan_ReturnsOutput()
+ public void AssembleSectionAdoptableWithoutProfileProbability_CalculatorRan_ReturnsOutput()
{
// Setup
var random = new Random(21);
@@ -129,7 +130,7 @@
// Call
FailureMechanismSectionAssemblyResult output =
FailureMechanismSectionAssemblyGroupFactory.AssembleSection(
- new AssessmentSectionStub(), random.NextBoolean(), random.NextEnumValue(),
+ new AssessmentSectionStub(), random.NextBoolean(), random.NextEnumValue(),
random.NextDouble(), random.NextBoolean(), random.NextDouble());
// Assert
@@ -142,7 +143,7 @@
}
[Test]
- public void AssembleSectionNonAdoptableWithoutProfileProbability_CalculatorThrowsException_ThrowsAssemblyException()
+ public void AssembleSectionAdoptableWithoutProfileProbability_CalculatorThrowsException_ThrowsAssemblyException()
{
// Setup
var random = new Random(21);
@@ -154,7 +155,7 @@
// Call
void Call() => FailureMechanismSectionAssemblyGroupFactory.AssembleSection(
- new AssessmentSectionStub(), random.NextBoolean(), random.NextEnumValue(),
+ new AssessmentSectionStub(), random.NextBoolean(), random.NextEnumValue(),
random.NextDouble(), random.NextBoolean(), random.NextDouble());
// Assert
@@ -167,17 +168,17 @@
#endregion
- #region Assemble section with adoptable initial failure mechanism result type and without profile probability
+ #region Assemble section with non-adoptable initial failure mechanism result type and without profile probability
[Test]
- public void AssembleSectionAdoptableWithoutProfileProbability_AssessmentSectionNull_ThrowsArgumentNullException()
+ public void AssembleSectionNonAdoptableWithoutProfileProbability_AssessmentSectionNull_ThrowsArgumentNullException()
{
// Setup
var random = new Random(21);
// Call
void Call() => FailureMechanismSectionAssemblyGroupFactory.AssembleSection(
- null, random.NextBoolean(), random.NextEnumValue(),
+ null, random.NextBoolean(), random.NextEnumValue(),
random.NextDouble(), random.NextBoolean(), random.NextDouble());
// Assert
@@ -186,7 +187,7 @@
}
[Test]
- public void AssembleSectionAdoptableWithoutProfileProbability_InvalidInitialFailureMechanismResultType_ThrowsInvalidEnumArgumentException()
+ public void AssembleSectionNonAdoptableWithoutProfileProbability_InvalidInitialFailureMechanismResultType_ThrowsInvalidEnumArgumentException()
{
// Setup
var random = new Random(21);
@@ -204,11 +205,10 @@
}
[Test]
- [TestCase(AdoptableInitialFailureMechanismResultType.Adopt, true)]
- [TestCase(AdoptableInitialFailureMechanismResultType.Manual, true)]
- [TestCase(AdoptableInitialFailureMechanismResultType.NoFailureProbability, false)]
- public void AssembleSectionAdoptableWithoutProfileProbability_WithInput_SetsInputOnCalculator(AdoptableInitialFailureMechanismResultType initialFailureMechanismResultType,
- bool expectedHasProbabilitySpecified)
+ [TestCase(NonAdoptableInitialFailureMechanismResultType.Manual, true)]
+ [TestCase(NonAdoptableInitialFailureMechanismResultType.NoFailureProbability, false)]
+ public void AssembleSectionNonAdoptableWithoutProfileProbability_WithInput_SetsInputOnCalculator(NonAdoptableInitialFailureMechanismResultType initialFailureMechanismResultType,
+ bool expectedHasProbabilitySpecified)
{
// Setup
var random = new Random(21);
@@ -246,7 +246,7 @@
}
[Test]
- public void AssembleSectionAdoptableWithoutProfileProbability_CalculatorRan_ReturnsOutput()
+ public void AssembleSectionNonAdoptableWithoutProfileProbability_CalculatorRan_ReturnsOutput()
{
// Setup
var random = new Random(21);
@@ -258,7 +258,7 @@
// Call
FailureMechanismSectionAssemblyResult output =
FailureMechanismSectionAssemblyGroupFactory.AssembleSection(
- new AssessmentSectionStub(), random.NextBoolean(), random.NextEnumValue(),
+ new AssessmentSectionStub(), random.NextBoolean(), random.NextEnumValue(),
random.NextDouble(), random.NextBoolean(), random.NextDouble());
// Assert
@@ -271,7 +271,7 @@
}
[Test]
- public void AssembleSectionAdoptableWithoutProfileProbability_CalculatorThrowsException_ThrowsAssemblyException()
+ public void AssembleSectionNonAdoptableWithoutProfileProbability_CalculatorThrowsException_ThrowsAssemblyException()
{
// Setup
var random = new Random(21);
@@ -283,7 +283,7 @@
// Call
void Call() => FailureMechanismSectionAssemblyGroupFactory.AssembleSection(
- new AssessmentSectionStub(), random.NextBoolean(), random.NextEnumValue(),
+ new AssessmentSectionStub(), random.NextBoolean(), random.NextEnumValue(),
random.NextDouble(), random.NextBoolean(), random.NextDouble());
// Assert
@@ -299,7 +299,7 @@
#region Assemble section with adoptable initial failure mechanism result type and with profile probability
[Test]
- public void AssembleSectionWithProfileProbability_AssessmentSectionNull_ThrowsArgumentNullException()
+ public void AssembleSectionAdoptableWithProfileProbability_AssessmentSectionNull_ThrowsArgumentNullException()
{
// Setup
var random = new Random(21);
@@ -316,7 +316,7 @@
}
[Test]
- public void AssembleSectionWithProfileProbability_InvalidInitialFailureMechanismResultType_ThrowsInvalidEnumArgumentException()
+ public void AssembleSectionAdoptableWithProfileProbability_InvalidInitialFailureMechanismResultType_ThrowsInvalidEnumArgumentException()
{
// Setup
var random = new Random(21);
@@ -335,7 +335,7 @@
}
[Test]
- public void AssembleSectionWithProfileProbability_InvalidProbabilityRefinementType_ThrowsInvalidEnumArgumentException()
+ public void AssembleSectionAdoptableWithProfileProbability_InvalidProbabilityRefinementType_ThrowsInvalidEnumArgumentException()
{
// Setup
var random = new Random(21);
@@ -357,8 +357,8 @@
[TestCase(AdoptableInitialFailureMechanismResultType.Adopt, true)]
[TestCase(AdoptableInitialFailureMechanismResultType.Manual, true)]
[TestCase(AdoptableInitialFailureMechanismResultType.NoFailureProbability, false)]
- public void AssembleSectionWithProfileProbability_WithInput_SetsInputOnCalculator(AdoptableInitialFailureMechanismResultType initialFailureMechanismResultType,
- bool expectedHasProbabilitySpecified)
+ public void AssembleSectionAdoptableWithProfileProbability_WithInput_SetsInputOnCalculator(AdoptableInitialFailureMechanismResultType initialFailureMechanismResultType,
+ bool expectedHasProbabilitySpecified)
{
// Setup
var random = new Random(21);
@@ -402,7 +402,7 @@
[TestCase(ProbabilityRefinementType.Both, 1.5, 1.6)]
[TestCase(ProbabilityRefinementType.Profile, 1.5, 3.0)]
[TestCase(ProbabilityRefinementType.Section, 0.8, 1.6)]
- public void AssembleSectionWithProfileProbability_WithRefinedProbabilities_SetsInputOnCalculator(
+ public void AssembleSectionAdoptableWithProfileProbability_WithRefinedProbabilities_SetsInputOnCalculator(
ProbabilityRefinementType probabilityRefinementType, double expectedRefinedProfileProbability, double expectedRefinedSectionProbability)
{
// Setup
@@ -430,7 +430,7 @@
}
[Test]
- public void AssembleSectionWithProfileProbability_CalculatorRan_ReturnsOutput()
+ public void AssembleSectionAdoptableWithProfileProbability_CalculatorRan_ReturnsOutput()
{
// Setup
var random = new Random(21);
@@ -456,7 +456,7 @@
}
[Test]
- public void AssembleSectionWithProfileProbability_CalculatorThrowsException_ThrowsAssemblyException()
+ public void AssembleSectionAdoptableWithProfileProbability_CalculatorThrowsException_ThrowsAssemblyException()
{
// Setup
var random = new Random(21);
@@ -481,5 +481,135 @@
}
#endregion
+
+ #region Assemble section with non-adoptable initial failure mechanism result type and with profile probability
+
+ [Test]
+ public void AssembleSectionNonAdoptableWithProfileProbability_AssessmentSectionNull_ThrowsArgumentNullException()
+ {
+ // Setup
+ var random = new Random(21);
+
+ // Call
+ void Call() => FailureMechanismSectionAssemblyGroupFactory.AssembleSection(
+ null, random.NextBoolean(), random.NextEnumValue(), random.NextDouble(),
+ random.NextDouble(), random.NextBoolean(), random.NextDouble(), random.NextDouble());
+
+ // Assert
+ var exception = Assert.Throws(Call);
+ Assert.AreEqual("assessmentSection", exception.ParamName);
+ }
+
+ [Test]
+ public void AssembleSectionNonAdoptableWithProfileProbability_InvalidInitialFailureMechanismResultType_ThrowsInvalidEnumArgumentException()
+ {
+ // Setup
+ var random = new Random(21);
+
+ const NonAdoptableInitialFailureMechanismResultType initialFailureMechanismResultType = (NonAdoptableInitialFailureMechanismResultType) 99;
+
+ // Call
+ void Call() => FailureMechanismSectionAssemblyGroupFactory.AssembleSection(
+ new AssessmentSectionStub(), random.NextBoolean(), initialFailureMechanismResultType,
+ random.NextDouble(), random.NextDouble(), random.NextBoolean(), random.NextDouble(), random.NextDouble());
+
+ // Assert
+ var expectedMessage = $"The value of argument 'initialFailureMechanismResultType' ({initialFailureMechanismResultType}) is invalid for Enum type '{nameof(NonAdoptableInitialFailureMechanismResultType)}'.";
+ TestHelper.AssertThrowsArgumentExceptionAndTestMessage(Call, expectedMessage);
+ }
+
+ [Test]
+ [TestCase(NonAdoptableInitialFailureMechanismResultType.Manual, true)]
+ [TestCase(NonAdoptableInitialFailureMechanismResultType.NoFailureProbability, false)]
+ public void AssembleSectionNonAdoptableWithProfileProbability_WithInput_SetsInputOnCalculator(NonAdoptableInitialFailureMechanismResultType initialFailureMechanismResultType,
+ bool expectedHasProbabilitySpecified)
+ {
+ // Setup
+ var random = new Random(21);
+ bool isRelevant = random.NextBoolean();
+ double profileProbability = random.NextDouble();
+ double sectionProbability = random.NextDouble();
+ bool furtherAnalysisNeeded = random.NextBoolean();
+ double refinedProfileProbability = random.NextDouble();
+ double refinedSectionProbability = random.NextDouble();
+
+ var assessmentSection = new AssessmentSectionStub();
+
+ using (new AssemblyToolCalculatorFactoryConfig())
+ {
+ var calculatorFactory = (TestAssemblyToolCalculatorFactory) AssemblyToolCalculatorFactory.Instance;
+ FailureMechanismSectionAssemblyCalculatorStub calculator = calculatorFactory.LastCreatedFailureMechanismSectionAssemblyCalculator;
+
+ // Call
+ FailureMechanismSectionAssemblyGroupFactory.AssembleSection(
+ assessmentSection, isRelevant, initialFailureMechanismResultType, profileProbability, sectionProbability,
+ furtherAnalysisNeeded, refinedProfileProbability, refinedSectionProbability);
+
+ // Assert
+ FailureMechanismSectionAssemblyInput calculatorInput = calculator.FailureMechanismSectionAssemblyInput;
+ FailureMechanismContribution failureMechanismContribution = assessmentSection.FailureMechanismContribution;
+ Assert.AreEqual(failureMechanismContribution.SignalingNorm, calculatorInput.SignalingNorm);
+ Assert.AreEqual(failureMechanismContribution.LowerLimitNorm, calculatorInput.LowerLimitNorm);
+
+ Assert.AreEqual(isRelevant, calculatorInput.IsRelevant);
+ Assert.AreEqual(expectedHasProbabilitySpecified, calculatorInput.HasProbabilitySpecified);
+ Assert.AreEqual(profileProbability, calculatorInput.InitialProfileProbability);
+ Assert.AreEqual(sectionProbability, calculatorInput.InitialSectionProbability);
+ Assert.AreEqual(furtherAnalysisNeeded, calculatorInput.FurtherAnalysisNeeded);
+ Assert.AreEqual(refinedProfileProbability, calculatorInput.RefinedProfileProbability);
+ Assert.AreEqual(refinedSectionProbability, calculatorInput.RefinedSectionProbability);
+ }
+ }
+
+ [Test]
+ public void AssembleSectionNonAdoptableWithProfileProbability_CalculatorRan_ReturnsOutput()
+ {
+ // Setup
+ var random = new Random(21);
+ using (new AssemblyToolCalculatorFactoryConfig())
+ {
+ var calculatorFactory = (TestAssemblyToolCalculatorFactory) AssemblyToolCalculatorFactory.Instance;
+ FailureMechanismSectionAssemblyCalculatorStub calculator = calculatorFactory.LastCreatedFailureMechanismSectionAssemblyCalculator;
+
+ // Call
+ FailureMechanismSectionAssemblyResult output =
+ FailureMechanismSectionAssemblyGroupFactory.AssembleSection(
+ new AssessmentSectionStub(), random.NextBoolean(), random.NextEnumValue(),
+ random.NextDouble(), random.NextDouble(), random.NextBoolean(), random.NextDouble(), random.NextDouble());
+
+ // Assert
+ FailureMechanismSectionAssemblyResult calculatorOutput = calculator.FailureMechanismSectionAssemblyResultOutput;
+ Assert.AreEqual(calculatorOutput.N, output.N);
+ Assert.AreEqual(calculatorOutput.AssemblyGroup, output.AssemblyGroup);
+ Assert.AreEqual(calculatorOutput.ProfileProbability, output.ProfileProbability);
+ Assert.AreEqual(calculatorOutput.SectionProbability, output.SectionProbability);
+ }
+ }
+
+ [Test]
+ public void AssembleSectionNonAdoptableWithProfileProbability_CalculatorThrowsException_ThrowsAssemblyException()
+ {
+ // Setup
+ var random = new Random(21);
+ using (new AssemblyToolCalculatorFactoryConfig())
+ {
+ var calculatorFactory = (TestAssemblyToolCalculatorFactory) AssemblyToolCalculatorFactory.Instance;
+ FailureMechanismSectionAssemblyCalculatorStub calculator = calculatorFactory.LastCreatedFailureMechanismSectionAssemblyCalculator;
+ calculator.ThrowExceptionOnCalculate = true;
+
+ // Call
+ void Call() => FailureMechanismSectionAssemblyGroupFactory.AssembleSection(
+ new AssessmentSectionStub(), random.NextBoolean(), random.NextEnumValue(),
+ random.NextDouble(), random.NextDouble(), random.NextBoolean(), random.NextDouble(), random.NextDouble());
+
+ // Assert
+ var exception = Assert.Throws(Call);
+ Exception innerException = exception.InnerException;
+ Assert.IsInstanceOf(innerException);
+ Assert.AreEqual(innerException.Message, exception.Message);
+ }
+ }
+
+ #endregion
}
}
\ No newline at end of file