Index: Ringtoets/DuneErosion/src/Ringtoets.DuneErosion.Data/DuneErosionFailureMechanismExtensions.cs
===================================================================
diff -u -r330f2e86f2fb575c436cdbb46b6d31bc246ef6fc -r430632f92b4e3ca3f4634108e2e30a36d26befe9
--- Ringtoets/DuneErosion/src/Ringtoets.DuneErosion.Data/DuneErosionFailureMechanismExtensions.cs (.../DuneErosionFailureMechanismExtensions.cs) (revision 330f2e86f2fb575c436cdbb46b6d31bc246ef6fc)
+++ Ringtoets/DuneErosion/src/Ringtoets.DuneErosion.Data/DuneErosionFailureMechanismExtensions.cs (.../DuneErosionFailureMechanismExtensions.cs) (revision 430632f92b4e3ca3f4634108e2e30a36d26befe9)
@@ -20,6 +20,10 @@
// All rights reserved.
using System;
+using System.ComponentModel;
+using Ringtoets.Common.Data.AssessmentSection;
+using Ringtoets.Common.Data.FailureMechanism;
+using Ringtoets.Common.Util;
namespace Ringtoets.DuneErosion.Data
{
@@ -28,22 +32,34 @@
///
public static class DuneErosionFailureMechanismExtensions
{
+ private const double failureMechanismSpecificNormFactor = 2.15;
+
///
- /// Gets the norm which is needed in the calculations within .
+ /// Gets the norm based on .
///
- /// The to get the failure mechanism norm for.
- /// The assessment section norm.
- /// The value of the failure mechanism norm.
- /// Thrown when any parameter is null.
- public static double GetMechanismSpecificNorm(this DuneErosionFailureMechanism failureMechanism, double norm)
+ /// The failure mechanism to get the norm from.
+ /// The assessment section to get the norm from.
+ /// The category type to use while obtaining the norm.
+ /// The norm corresponding to the provided category type.
+ /// Thrown when
+ /// or is null.
+ /// Thrown when
+ /// is an invalid .
+ /// Thrown when
+ /// is a valid but unsupported .
+ public static double GetNorm(this DuneErosionFailureMechanism failureMechanism,
+ IAssessmentSection assessmentSection,
+ FailureMechanismCategoryType categoryType)
{
if (failureMechanism == null)
{
throw new ArgumentNullException(nameof(failureMechanism));
}
- return 2.15 * (failureMechanism.Contribution / 100)
- * norm / failureMechanism.GeneralInput.N;
+ return failureMechanismSpecificNormFactor * FailureMechanismNormHelper.GetNorm(assessmentSection,
+ categoryType,
+ failureMechanism.Contribution,
+ failureMechanism.GeneralInput.N);
}
}
}
\ No newline at end of file
Index: Ringtoets/DuneErosion/src/Ringtoets.DuneErosion.Data/Ringtoets.DuneErosion.Data.csproj
===================================================================
diff -u -rbbbfacd9e38cf43c98dba73e39694850fb932a66 -r430632f92b4e3ca3f4634108e2e30a36d26befe9
--- Ringtoets/DuneErosion/src/Ringtoets.DuneErosion.Data/Ringtoets.DuneErosion.Data.csproj (.../Ringtoets.DuneErosion.Data.csproj) (revision bbbfacd9e38cf43c98dba73e39694850fb932a66)
+++ Ringtoets/DuneErosion/src/Ringtoets.DuneErosion.Data/Ringtoets.DuneErosion.Data.csproj (.../Ringtoets.DuneErosion.Data.csproj) (revision 430632f92b4e3ca3f4634108e2e30a36d26befe9)
@@ -57,6 +57,11 @@
Ringtoets.Common.Primitives
False
+
+ {6a074d65-a81c-4c1c-8e24-f36c916e4ed7}
+ Ringtoets.Common.Util
+ False
+
Index: Ringtoets/DuneErosion/test/Ringtoets.DuneErosion.Data.Test/DuneErosionFailureMechanismExtensionsTest.cs
===================================================================
diff -u -rdcc94dbcc481ef9f6f83308b82096f85f9cb6f01 -r430632f92b4e3ca3f4634108e2e30a36d26befe9
--- Ringtoets/DuneErosion/test/Ringtoets.DuneErosion.Data.Test/DuneErosionFailureMechanismExtensionsTest.cs (.../DuneErosionFailureMechanismExtensionsTest.cs) (revision dcc94dbcc481ef9f6f83308b82096f85f9cb6f01)
+++ Ringtoets/DuneErosion/test/Ringtoets.DuneErosion.Data.Test/DuneErosionFailureMechanismExtensionsTest.cs (.../DuneErosionFailureMechanismExtensionsTest.cs) (revision 430632f92b4e3ca3f4634108e2e30a36d26befe9)
@@ -20,41 +20,150 @@
// All rights reserved.
using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using Core.Common.TestUtil;
using NUnit.Framework;
+using Rhino.Mocks;
+using Ringtoets.Common.Data.AssessmentSection;
+using Ringtoets.Common.Data.FailureMechanism;
+using Ringtoets.Common.Data.TestUtil;
namespace Ringtoets.DuneErosion.Data.Test
{
[TestFixture]
public class DuneErosionFailureMechanismExtensionsTest
{
[Test]
- public void GetMechanismSpecificNorm_FailureMechanismNull_ThrowArgumentNullException()
+ public void GetNorm_FailureMechanismNull_ThrowArgumentNullException()
{
+ // Setup
+ var random = new Random(21);
+
+ var mocks = new MockRepository();
+ var assessementSection = mocks.Stub();
+ mocks.ReplayAll();
+
// Call
- TestDelegate test = () => DuneErosionFailureMechanismExtensions.GetMechanismSpecificNorm(null, 0.5);
+ TestDelegate test = () => DuneErosionFailureMechanismExtensions.GetNorm(null,
+ assessementSection,
+ random.NextEnumValue());
// Assert
var exception = Assert.Throws(test);
Assert.AreEqual("failureMechanism", exception.ParamName);
+
+ mocks.VerifyAll();
}
[Test]
- [TestCase(0, 0.005, 0)]
- [TestCase(10, 0.005, 0.0005375)]
- [TestCase(10, 0.01, 0.001075)]
- public void GetMechanismSpecificNorm_WithValidData_ReturnMechanismSpecificNorm(double contribution, double norm, double expectedNorm)
+ public void GetNorm_AssessmentSectionNull_ThrowsArgumentNullException()
{
// Setup
- var failureMechanism = new DuneErosionFailureMechanism
- {
- Contribution = contribution
- };
+ var random = new Random(21);
+ var failureMechanism = new DuneErosionFailureMechanism();
// Call
- double mechanismSpecificNorm = failureMechanism.GetMechanismSpecificNorm(norm);
+ TestDelegate call = () => failureMechanism.GetNorm(null, random.NextEnumValue());
// Assert
+ var exception = Assert.Throws(call);
+ Assert.AreEqual("assessmentSection", exception.ParamName);
+ }
+
+ [Test]
+ public void GetNorm_InvalidFailureMechanismCategoryType_ThrowsInvalidEnumArgumentException()
+ {
+ // Setup
+ const int invalidValue = 9999;
+
+ var assessmentSection = new AssessmentSectionStub();
+ var failureMechanism = new DuneErosionFailureMechanism();
+
+ // Call
+ TestDelegate test = () => failureMechanism.GetNorm(assessmentSection,
+ (FailureMechanismCategoryType) invalidValue);
+
+ // Assert
+ string expectedMessage = $"The value of argument 'categoryType' ({invalidValue}) is invalid for Enum type '{nameof(FailureMechanismCategoryType)}'.";
+ string parameterName = TestHelper.AssertThrowsArgumentExceptionAndTestMessage(test, expectedMessage).ParamName;
+ Assert.AreEqual("categoryType", parameterName);
+ }
+
+ [Test]
+ [TestCaseSource(nameof(GetNormConfigurationPerFailureMechanismCategoryType))]
+ public void GetNorm_WithValidData_ReturnMechanismSpecificNorm(DuneErosionFailureMechanism failureMechanism,
+ IAssessmentSection assessmentSection,
+ FailureMechanismCategoryType categoryType,
+ double expectedNorm)
+ {
+ // Call
+ double mechanismSpecificNorm = failureMechanism.GetNorm(assessmentSection, categoryType);
+
+ // Assert
Assert.AreEqual(expectedNorm, mechanismSpecificNorm);
}
+
+ private static IEnumerable GetNormConfigurationPerFailureMechanismCategoryType()
+ {
+ const double failureMechanismSpecificNormFactor = 2.15;
+ const double signalingNorm = 0.002;
+ const double lowerLimitNorm = 0.005;
+
+ var assessmentSection = new AssessmentSectionStub
+ {
+ FailureMechanismContribution =
+ {
+ LowerLimitNorm = lowerLimitNorm,
+ SignalingNorm = signalingNorm
+ }
+ };
+
+ var failureMechanism = new DuneErosionFailureMechanism
+ {
+ Contribution = 25
+ };
+
+ yield return new TestCaseData(
+ failureMechanism,
+ assessmentSection,
+ FailureMechanismCategoryType.MechanismSpecificFactorizedSignalingNorm,
+ failureMechanismSpecificNormFactor * GetMechanismSpecificNorm(failureMechanism, signalingNorm / 30)
+ ).SetName("MechanismSpecificFactorizedSignalingNorm");
+
+ yield return new TestCaseData(
+ failureMechanism,
+ assessmentSection,
+ FailureMechanismCategoryType.MechanismSpecificSignalingNorm,
+ failureMechanismSpecificNormFactor * GetMechanismSpecificNorm(failureMechanism, signalingNorm)
+ ).SetName("MechanismSpecificSignalingNorm");
+
+ yield return new TestCaseData(
+ failureMechanism,
+ assessmentSection,
+ FailureMechanismCategoryType.MechanismSpecificLowerLimitNorm,
+ failureMechanismSpecificNormFactor * GetMechanismSpecificNorm(failureMechanism, lowerLimitNorm)
+ ).SetName("MechanismSpecificLowerLimitNorm");
+
+ yield return new TestCaseData(
+ failureMechanism,
+ assessmentSection,
+ FailureMechanismCategoryType.LowerLimitNorm,
+ failureMechanismSpecificNormFactor * lowerLimitNorm
+ ).SetName("LowerLimitNorm");
+
+ yield return new TestCaseData(
+ failureMechanism,
+ assessmentSection,
+ FailureMechanismCategoryType.FactorizedLowerLimitNorm,
+ failureMechanismSpecificNormFactor * lowerLimitNorm * 30
+ ).SetName("FactorizedLowerLimitNorm");
+ }
+
+ private static double GetMechanismSpecificNorm(DuneErosionFailureMechanism failureMechanism,
+ double norm)
+ {
+ return norm * (failureMechanism.Contribution / 100) / failureMechanism.GeneralInput.N;
+ }
}
}
\ No newline at end of file