Index: Riskeer/Common/src/Riskeer.Common.Data/AssemblyTool/FailureMechanismSectionAssemblyGroupFactory.cs
===================================================================
diff -u -r9f244919473b0a2faf72a567c632d0f39a2cff2e -r1630d6c8d176e19206db5bdd3622809d498aa127
--- Riskeer/Common/src/Riskeer.Common.Data/AssemblyTool/FailureMechanismSectionAssemblyGroupFactory.cs (.../FailureMechanismSectionAssemblyGroupFactory.cs) (revision 9f244919473b0a2faf72a567c632d0f39a2cff2e)
+++ Riskeer/Common/src/Riskeer.Common.Data/AssemblyTool/FailureMechanismSectionAssemblyGroupFactory.cs (.../FailureMechanismSectionAssemblyGroupFactory.cs) (revision 1630d6c8d176e19206db5bdd3622809d498aa127)
@@ -20,13 +20,15 @@
// All rights reserved.
using System;
+using System.ComponentModel;
using Riskeer.AssemblyTool.Data;
using Riskeer.AssemblyTool.KernelWrapper.Calculators;
using Riskeer.AssemblyTool.KernelWrapper.Calculators.Assembly;
using Riskeer.AssemblyTool.KernelWrapper.Kernels;
using Riskeer.Common.Data.AssessmentSection;
using Riskeer.Common.Data.Contribution;
using Riskeer.Common.Data.Exceptions;
+using Riskeer.Common.Data.FailureMechanism;
namespace Riskeer.Common.Data.AssemblyTool
{
@@ -40,15 +42,17 @@
///
/// 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,
+ bool isRelevant, InitialFailureMechanismResultType initialFailureMechanismResultType,
double initialProfileProbability, double initialSectionProbability,
bool furtherAnalysisNeeded,
double refinedProfileProbability, double refinedSectionProbability)
@@ -58,16 +62,21 @@
throw new ArgumentNullException(nameof(assessmentSection));
}
+ if (!Enum.IsDefined(typeof(InitialFailureMechanismResultType), initialFailureMechanismResultType))
+ {
+ throw new InvalidEnumArgumentException(nameof(initialFailureMechanismResultType),
+ (int) initialFailureMechanismResultType,
+ typeof(InitialFailureMechanismResultType));
+ }
+
IFailureMechanismSectionAssemblyCalculator calculator = AssemblyToolCalculatorFactory.Instance.CreateFailureMechanismSectionAssemblyCalculator(
AssemblyToolKernelFactory.Instance);
try
{
- FailureMechanismSectionAssemblyInput input = CreateInput(assessmentSection,
- isRelevant,
- initialProfileProbability, initialSectionProbability,
- furtherAnalysisNeeded,
- refinedProfileProbability, refinedSectionProbability);
+ FailureMechanismSectionAssemblyInput input = CreateInput(
+ assessmentSection, isRelevant, initialFailureMechanismResultType != InitialFailureMechanismResultType.NoFailureProbability,
+ initialProfileProbability, initialSectionProbability, furtherAnalysisNeeded, refinedProfileProbability, refinedSectionProbability);
return calculator.AssembleFailureMechanismSection(input);
}
@@ -78,17 +87,17 @@
}
private static FailureMechanismSectionAssemblyInput CreateInput(IAssessmentSection assessmentSection,
- bool isRelevant,
+ bool isRelevant, bool hasProbabilitySpecified,
double initialProfileProbability, double initialSectionProbability,
bool furtherAnalysisNeeded,
double refinedProfileProbability, double refinedSectionProbability)
{
FailureMechanismContribution failureMechanismContribution = assessmentSection.FailureMechanismContribution;
- return new FailureMechanismSectionAssemblyInput(failureMechanismContribution.LowerLimitNorm,
- failureMechanismContribution.SignalingNorm,
- isRelevant, initialProfileProbability,
- initialSectionProbability,
- furtherAnalysisNeeded, refinedProfileProbability, refinedSectionProbability);
+ return new FailureMechanismSectionAssemblyInput(failureMechanismContribution.LowerLimitNorm, failureMechanismContribution.SignalingNorm,
+ isRelevant, hasProbabilitySpecified,
+ initialProfileProbability, initialSectionProbability,
+ furtherAnalysisNeeded,
+ refinedProfileProbability, refinedSectionProbability);
}
}
}
\ No newline at end of file
Index: Riskeer/Common/test/Riskeer.Common.Data.Test/AssemblyTool/FailureMechanismSectionAssemblyGroupFactoryTest.cs
===================================================================
diff -u -r877f80f8669e3bae22e1a5151480634ebf4c3d0d -r1630d6c8d176e19206db5bdd3622809d498aa127
--- Riskeer/Common/test/Riskeer.Common.Data.Test/AssemblyTool/FailureMechanismSectionAssemblyGroupFactoryTest.cs (.../FailureMechanismSectionAssemblyGroupFactoryTest.cs) (revision 877f80f8669e3bae22e1a5151480634ebf4c3d0d)
+++ Riskeer/Common/test/Riskeer.Common.Data.Test/AssemblyTool/FailureMechanismSectionAssemblyGroupFactoryTest.cs (.../FailureMechanismSectionAssemblyGroupFactoryTest.cs) (revision 1630d6c8d176e19206db5bdd3622809d498aa127)
@@ -20,6 +20,7 @@
// All rights reserved.
using System;
+using System.ComponentModel;
using Core.Common.TestUtil;
using NUnit.Framework;
using Riskeer.AssemblyTool.Data;
@@ -30,6 +31,7 @@
using Riskeer.Common.Data.AssemblyTool;
using Riskeer.Common.Data.Contribution;
using Riskeer.Common.Data.Exceptions;
+using Riskeer.Common.Data.FailureMechanism;
using Riskeer.Common.Data.TestUtil;
namespace Riskeer.Common.Data.Test.AssemblyTool
@@ -44,19 +46,17 @@
var random = new Random(21);
// Call
- void Call() => FailureMechanismSectionAssemblyGroupFactory.AssembleSection(null,
- random.NextBoolean(),
- random.NextDouble(), random.NextDouble(),
- random.NextBoolean(),
- random.NextDouble(), random.NextDouble());
+ 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 AssembleSection_WithInput_SetsInputOnCalculator()
+ public void AssembleSection_InvalidInitialFailureMechanismResultType_ThrowsInvalidEnumArgumentException()
{
// Setup
var random = new Random(21);
@@ -69,17 +69,45 @@
var assessmentSection = new AssessmentSectionStub();
+ const InitialFailureMechanismResultType initialFailureMechanismResultType = (InitialFailureMechanismResultType) 99;
+
+ // Call
+ void Call() => FailureMechanismSectionAssemblyGroupFactory.AssembleSection(
+ assessmentSection, isRelevant, initialFailureMechanismResultType, profileProbability, sectionProbability,
+ furtherAnalysisNeeded, refinedProfileProbability, refinedSectionProbability);
+
+ // Assert
+ var expectedMessage = $"The value of argument 'initialFailureMechanismResultType' ({initialFailureMechanismResultType}) is invalid for Enum type '{nameof(InitialFailureMechanismResultType)}'.";
+ TestHelper.AssertThrowsArgumentExceptionAndTestMessage(Call, expectedMessage);
+ }
+
+ [Test]
+ [TestCase(InitialFailureMechanismResultType.Adopt, true)]
+ [TestCase(InitialFailureMechanismResultType.Manual, true)]
+ [TestCase(InitialFailureMechanismResultType.NoFailureProbability, false)]
+ public void AssembleSection_WithInput_SetsInputOnCalculator(InitialFailureMechanismResultType 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,
- profileProbability, sectionProbability,
- furtherAnalysisNeeded,
- refinedProfileProbability, refinedSectionProbability);
+ FailureMechanismSectionAssemblyGroupFactory.AssembleSection(
+ assessmentSection, isRelevant, initialFailureMechanismResultType, profileProbability, sectionProbability,
+ furtherAnalysisNeeded, refinedProfileProbability, refinedSectionProbability);
// Assert
FailureMechanismSectionAssemblyInput calculatorInput = calculator.FailureMechanismSectionAssemblyInput;
@@ -88,6 +116,7 @@
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);
@@ -108,11 +137,9 @@
// Call
FailureMechanismSectionAssemblyResult output =
- FailureMechanismSectionAssemblyGroupFactory.AssembleSection(new AssessmentSectionStub(),
- random.NextBoolean(),
- random.NextDouble(), random.NextDouble(),
- random.NextBoolean(),
- random.NextDouble(), random.NextDouble());
+ FailureMechanismSectionAssemblyGroupFactory.AssembleSection(
+ new AssessmentSectionStub(), random.NextBoolean(), random.NextEnumValue(),
+ random.NextDouble(), random.NextDouble(), random.NextBoolean(), random.NextDouble(), random.NextDouble());
// Assert
FailureMechanismSectionAssemblyResult calculatorOutput = calculator.FailureMechanismSectionAssemblyResultOutput;
@@ -135,11 +162,9 @@
calculator.ThrowExceptionOnCalculate = true;
// Call
- void Call() => FailureMechanismSectionAssemblyGroupFactory.AssembleSection(new AssessmentSectionStub(),
- random.NextBoolean(),
- random.NextDouble(), random.NextDouble(),
- random.NextBoolean(),
- random.NextDouble(), random.NextDouble());
+ 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);