Index: Riskeer/Common/src/Riskeer.Common.Data/FailureMechanism/FailureMechanismSectionResult.cs =================================================================== diff -u -r66b3865041fe3f402f54cd48c5aa9fe19179e627 -rd8e61e1c316db2f6f06f05f4911fd26ea072a0a1 --- Riskeer/Common/src/Riskeer.Common.Data/FailureMechanism/FailureMechanismSectionResult.cs (.../FailureMechanismSectionResult.cs) (revision 66b3865041fe3f402f54cd48c5aa9fe19179e627) +++ Riskeer/Common/src/Riskeer.Common.Data/FailureMechanism/FailureMechanismSectionResult.cs (.../FailureMechanismSectionResult.cs) (revision d8e61e1c316db2f6f06f05f4911fd26ea072a0a1) @@ -21,6 +21,8 @@ using System; using Core.Common.Base; +using Riskeer.Common.Data.Probability; +using Riskeer.Common.Data.Properties; namespace Riskeer.Common.Data.FailureMechanism { @@ -29,6 +31,8 @@ /// public abstract class FailureMechanismSectionResult : Observable { + private double manualInitialFailureMechanismResultSectionProbability; + /// /// Creates a new instance of . /// @@ -44,6 +48,7 @@ Section = section; IsRelevant = true; InitialFailureMechanismResult = InitialFailureMechanismResultType.Adopt; + ManualInitialFailureMechanismResultSectionProbability = double.NaN; } /// @@ -60,5 +65,21 @@ /// Gets or sets the initial failure mechanism result. /// public InitialFailureMechanismResultType InitialFailureMechanismResult { get; set; } + + /// + /// Gets or sets the value of the manual initial failure mechanism result per failure mechanism section as a probability. + /// + /// Thrown when is not in range [0,1]. + public double ManualInitialFailureMechanismResultSectionProbability + { + get => manualInitialFailureMechanismResultSectionProbability; + set + { + ProbabilityHelper.ValidateProbability(value, null, + Resources.ArbitraryProbabilityFailureMechanismSectionResult_AssessmentProbability_Value_needs_to_be_in_Range_0_, + true); + manualInitialFailureMechanismResultSectionProbability = value; + } + } } } \ No newline at end of file Index: Riskeer/Common/test/Riskeer.Common.Data.Test/FailureMechanism/FailureMechanismSectionResultTest.cs =================================================================== diff -u -r66b3865041fe3f402f54cd48c5aa9fe19179e627 -rd8e61e1c316db2f6f06f05f4911fd26ea072a0a1 --- Riskeer/Common/test/Riskeer.Common.Data.Test/FailureMechanism/FailureMechanismSectionResultTest.cs (.../FailureMechanismSectionResultTest.cs) (revision 66b3865041fe3f402f54cd48c5aa9fe19179e627) +++ Riskeer/Common/test/Riskeer.Common.Data.Test/FailureMechanism/FailureMechanismSectionResultTest.cs (.../FailureMechanismSectionResultTest.cs) (revision d8e61e1c316db2f6f06f05f4911fd26ea072a0a1) @@ -21,6 +21,7 @@ using System; using Core.Common.Base; +using Core.Common.TestUtil; using NUnit.Framework; using Riskeer.Common.Data.FailureMechanism; using Riskeer.Common.Data.TestUtil; @@ -44,6 +45,7 @@ Assert.AreSame(section, sectionResult.Section); Assert.IsTrue(sectionResult.IsRelevant); Assert.AreEqual(InitialFailureMechanismResultType.Adopt, sectionResult.InitialFailureMechanismResult); + Assert.IsNaN(sectionResult.ManualInitialFailureMechanismResultSectionProbability); } [Test] @@ -56,7 +58,47 @@ var exception = Assert.Throws(Call); Assert.AreEqual("section", exception.ParamName); } + + [Test] + [SetCulture("nl-NL")] + [TestCase(-20)] + [TestCase(-1e-6)] + [TestCase(1 + 1e-6)] + [TestCase(12)] + public void ManualInitialFailureMechanismResultSectionProbability_InvalidValue_ThrowsArgumentOutOfRangeException(double newValue) + { + // Setup + FailureMechanismSection section = FailureMechanismSectionTestFactory.CreateFailureMechanismSection(); + var result = new TestFailureMechanismSectionResult(section); + // Call + void Call() => result.ManualInitialFailureMechanismResultSectionProbability = newValue; + + // Assert + const string message = "De waarde voor de faalkans moet in het bereik [0,0, 1,0] liggen."; + TestHelper.AssertThrowsArgumentExceptionAndTestMessage(Call, message); + } + + [Test] + [TestCase(0)] + [TestCase(1e-6)] + [TestCase(0.5)] + [TestCase(1 - 1e-6)] + [TestCase(1)] + [TestCase(double.NaN)] + public void ManualInitialFailureMechanismResultSectionProbability_ValidValue_NewValueSet(double newValue) + { + // Setup + FailureMechanismSection section = FailureMechanismSectionTestFactory.CreateFailureMechanismSection(); + var result = new TestFailureMechanismSectionResult(section); + + // Call + result.ManualInitialFailureMechanismResultSectionProbability = newValue; + + // Assert + Assert.AreEqual(newValue, result.ManualInitialFailureMechanismResultSectionProbability); + } + private class TestFailureMechanismSectionResult : FailureMechanismSectionResult { public TestFailureMechanismSectionResult(FailureMechanismSection section) : base(section) {} Index: Riskeer/Piping/src/Riskeer.Piping.Data/PipingFailureMechanismSectionResult.cs =================================================================== diff -u -r896749236261cd0956021990f904a353362f6bd5 -rd8e61e1c316db2f6f06f05f4911fd26ea072a0a1 --- Riskeer/Piping/src/Riskeer.Piping.Data/PipingFailureMechanismSectionResult.cs (.../PipingFailureMechanismSectionResult.cs) (revision 896749236261cd0956021990f904a353362f6bd5) +++ Riskeer/Piping/src/Riskeer.Piping.Data/PipingFailureMechanismSectionResult.cs (.../PipingFailureMechanismSectionResult.cs) (revision d8e61e1c316db2f6f06f05f4911fd26ea072a0a1) @@ -19,7 +19,10 @@ // Stichting Deltares and remain full property of Stichting Deltares at all times. // All rights reserved. +using System; using Riskeer.Common.Data.FailureMechanism; +using Riskeer.Common.Data.Probability; +using RiskeerCommonDataResources = Riskeer.Common.Data.Properties.Resources; namespace Riskeer.Piping.Data { @@ -29,11 +32,32 @@ /// public class PipingFailureMechanismSectionResult : FailureMechanismSectionResult { + private double manualInitialFailureMechanismResultProfileProbability; + /// /// /// Creates a new instance of . /// public PipingFailureMechanismSectionResult(FailureMechanismSection section) - : base(section) {} + : base(section) + { + ManualInitialFailureMechanismResultProfileProbability = double.NaN; + } + + /// + /// Gets or sets the value of the manual initial failure mechanism result per profile as a probability. + /// + /// Thrown when is not in range [0,1]. + public double ManualInitialFailureMechanismResultProfileProbability + { + get => manualInitialFailureMechanismResultProfileProbability; + set + { + ProbabilityHelper.ValidateProbability(value, null, + RiskeerCommonDataResources.ArbitraryProbabilityFailureMechanismSectionResult_AssessmentProbability_Value_needs_to_be_in_Range_0_, + true); + manualInitialFailureMechanismResultProfileProbability = value; + } + } } } \ No newline at end of file Index: Riskeer/Piping/test/Riskeer.Piping.Data.Test/PipingFailureMechanismSectionResultTest.cs =================================================================== diff -u -r896749236261cd0956021990f904a353362f6bd5 -rd8e61e1c316db2f6f06f05f4911fd26ea072a0a1 --- Riskeer/Piping/test/Riskeer.Piping.Data.Test/PipingFailureMechanismSectionResultTest.cs (.../PipingFailureMechanismSectionResultTest.cs) (revision 896749236261cd0956021990f904a353362f6bd5) +++ Riskeer/Piping/test/Riskeer.Piping.Data.Test/PipingFailureMechanismSectionResultTest.cs (.../PipingFailureMechanismSectionResultTest.cs) (revision d8e61e1c316db2f6f06f05f4911fd26ea072a0a1) @@ -19,6 +19,8 @@ // Stichting Deltares and remain full property of Stichting Deltares at all times. // All rights reserved. +using System; +using Core.Common.TestUtil; using NUnit.Framework; using Riskeer.Common.Data.FailureMechanism; using Riskeer.Common.Data.TestUtil; @@ -36,6 +38,47 @@ // Assert Assert.IsInstanceOf(sectionResult); + Assert.IsNaN(sectionResult.ManualInitialFailureMechanismResultProfileProbability); } + + [Test] + [SetCulture("nl-NL")] + [TestCase(-20)] + [TestCase(-1e-6)] + [TestCase(1 + 1e-6)] + [TestCase(12)] + public void ManualInitialFailureMechanismResultProfileProbability_InvalidValue_ThrowsArgumentOutOfRangeException(double newValue) + { + // Setup + FailureMechanismSection section = FailureMechanismSectionTestFactory.CreateFailureMechanismSection(); + var result = new PipingFailureMechanismSectionResult(section); + + // Call + void Call() => result.ManualInitialFailureMechanismResultProfileProbability = newValue; + + // Assert + const string message = "De waarde voor de faalkans moet in het bereik [0,0, 1,0] liggen."; + TestHelper.AssertThrowsArgumentExceptionAndTestMessage(Call, message); + } + + [Test] + [TestCase(0)] + [TestCase(1e-6)] + [TestCase(0.5)] + [TestCase(1 - 1e-6)] + [TestCase(1)] + [TestCase(double.NaN)] + public void ManualInitialFailureMechanismResultProfileProbability_ValidValue_NewValueSet(double newValue) + { + // Setup + FailureMechanismSection section = FailureMechanismSectionTestFactory.CreateFailureMechanismSection(); + var result = new PipingFailureMechanismSectionResult(section); + + // Call + result.ManualInitialFailureMechanismResultProfileProbability = newValue; + + // Assert + Assert.AreEqual(newValue, result.ManualInitialFailureMechanismResultProfileProbability); + } } } \ No newline at end of file