Index: Ringtoets/GrassCoverErosionInwards/src/Ringtoets.GrassCoverErosionInwards.Data/GrassCoverErosionInwardsFailureMechanismSection2aAssessmentResultExtensions.cs =================================================================== diff -u --- Ringtoets/GrassCoverErosionInwards/src/Ringtoets.GrassCoverErosionInwards.Data/GrassCoverErosionInwardsFailureMechanismSection2aAssessmentResultExtensions.cs (revision 0) +++ Ringtoets/GrassCoverErosionInwards/src/Ringtoets.GrassCoverErosionInwards.Data/GrassCoverErosionInwardsFailureMechanismSection2aAssessmentResultExtensions.cs (revision d2bccf12592be5246fc438434a8eec34f24d68ff) @@ -0,0 +1,73 @@ +// Copyright (C) Stichting Deltares 2017. All rights reserved. +// +// This file is part of Ringtoets. +// +// Ringtoets is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . +// +// All names, logos, and references to "Deltares" are registered trademarks of +// Stichting Deltares and remain full property of Stichting Deltares at all times. +// All rights reserved. + +using System; +using Ringtoets.Common.Data.AssessmentSection; +using Ringtoets.Common.Data.Probability; + +namespace Ringtoets.GrassCoverErosionInwards.Data +{ + /// + /// Extension methods for obtaining level 2a results from output for an assessment of the + /// grass cover erosion inwards failure mechanism. + /// + public static class GrassCoverErosionInwardsFailureMechanismSection2aAssessmentResultExtensions + { + /// + /// Gets the value for the detailed assessment of safety per failure mechanism section as a probability. + /// + /// The section result to get the assessment layer 2A for. + /// The failure mechanism the calculations belong to. + /// The assessment section the calculations belong to. + /// The calculated assessment layer 2A; or when there are no + /// is no calculation assigned to the section result or the calculation is not performed. + /// Thrown when any parameter is null. + public static double GetAssessmentLayerTwoA(this GrassCoverErosionInwardsFailureMechanismSectionResult sectionResult, + GrassCoverErosionInwardsFailureMechanism failureMechanism, + IAssessmentSection assessmentSection) + { + if (sectionResult == null) + { + throw new ArgumentNullException(nameof(sectionResult)); + } + + if (failureMechanism == null) + { + throw new ArgumentNullException(nameof(failureMechanism)); + } + + if (assessmentSection == null) + { + throw new ArgumentNullException(nameof(assessmentSection)); + } + + if (sectionResult.Calculation == null || !sectionResult.Calculation.HasOutput) + { + return double.NaN; + } + + ProbabilityAssessmentOutput derivedOutput = GrassCoverErosionInwardsProbabilityAssessmentOutputFactory.Create(sectionResult.Calculation.Output.OvertoppingOutput, + failureMechanism, assessmentSection); + + return derivedOutput.Probability; + } + } +} \ No newline at end of file Index: Ringtoets/GrassCoverErosionInwards/src/Ringtoets.GrassCoverErosionInwards.Data/Ringtoets.GrassCoverErosionInwards.Data.csproj =================================================================== diff -u -rcd75ebe8ea8ae0d361b7632af2bc7771a7a81a65 -rd2bccf12592be5246fc438434a8eec34f24d68ff --- Ringtoets/GrassCoverErosionInwards/src/Ringtoets.GrassCoverErosionInwards.Data/Ringtoets.GrassCoverErosionInwards.Data.csproj (.../Ringtoets.GrassCoverErosionInwards.Data.csproj) (revision cd75ebe8ea8ae0d361b7632af2bc7771a7a81a65) +++ Ringtoets/GrassCoverErosionInwards/src/Ringtoets.GrassCoverErosionInwards.Data/Ringtoets.GrassCoverErosionInwards.Data.csproj (.../Ringtoets.GrassCoverErosionInwards.Data.csproj) (revision d2bccf12592be5246fc438434a8eec34f24d68ff) @@ -11,6 +11,7 @@ + Index: Ringtoets/GrassCoverErosionInwards/src/Ringtoets.GrassCoverErosionInwards.Forms/Views/GrassCoverErosionInwardsFailureMechanismSectionResultRow.cs =================================================================== diff -u -rad12f4e2c4a765cc6c20e9f17ac051a99644ec44 -rd2bccf12592be5246fc438434a8eec34f24d68ff --- Ringtoets/GrassCoverErosionInwards/src/Ringtoets.GrassCoverErosionInwards.Forms/Views/GrassCoverErosionInwardsFailureMechanismSectionResultRow.cs (.../GrassCoverErosionInwardsFailureMechanismSectionResultRow.cs) (revision ad12f4e2c4a765cc6c20e9f17ac051a99644ec44) +++ Ringtoets/GrassCoverErosionInwards/src/Ringtoets.GrassCoverErosionInwards.Forms/Views/GrassCoverErosionInwardsFailureMechanismSectionResultRow.cs (.../GrassCoverErosionInwardsFailureMechanismSectionResultRow.cs) (revision d2bccf12592be5246fc438434a8eec34f24d68ff) @@ -40,7 +40,8 @@ /// the source of this row. /// Thrown when is /// null. - public GrassCoverErosionInwardsFailureMechanismSectionResultRow(GrassCoverErosionInwardsFailureMechanismSectionResult sectionResult) : base(sectionResult) {} + public GrassCoverErosionInwardsFailureMechanismSectionResultRow(GrassCoverErosionInwardsFailureMechanismSectionResult sectionResult) + : base(sectionResult) {} /// /// Gets or sets the value of the tailored assessment of safety. Index: Ringtoets/GrassCoverErosionInwards/test/Ringtoets.GrassCoverErosionInwards.Data.Test/GrassCoverErosionInwardsFailureMechanismSection2aAssessmentResultExtensionsTest.cs =================================================================== diff -u --- Ringtoets/GrassCoverErosionInwards/test/Ringtoets.GrassCoverErosionInwards.Data.Test/GrassCoverErosionInwardsFailureMechanismSection2aAssessmentResultExtensionsTest.cs (revision 0) +++ Ringtoets/GrassCoverErosionInwards/test/Ringtoets.GrassCoverErosionInwards.Data.Test/GrassCoverErosionInwardsFailureMechanismSection2aAssessmentResultExtensionsTest.cs (revision d2bccf12592be5246fc438434a8eec34f24d68ff) @@ -0,0 +1,152 @@ +// Copyright (C) Stichting Deltares 2017. All rights reserved. +// +// This file is part of Ringtoets. +// +// Ringtoets is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . +// +// All names, logos, and references to "Deltares" are registered trademarks of +// Stichting Deltares and remain full property of Stichting Deltares at all times. +// All rights reserved. + +using System; +using NUnit.Framework; +using Rhino.Mocks; +using Ringtoets.Common.Data.AssessmentSection; +using Ringtoets.Common.Data.FailureMechanism; +using Ringtoets.Common.Data.TestUtil; +using Ringtoets.GrassCoverErosionInwards.Data.TestUtil; + +namespace Ringtoets.GrassCoverErosionInwards.Data.Test +{ + [TestFixture] + public class GrassCoverErosionInwardsFailureMechanismSection2aAssessmentResultExtensionsTest + { + [Test] + public void GetAssessmentLayerTwoA_SectionResultNull_ThrowsArgumentNullException() + { + // Setup + var mocks = new MockRepository(); + var assessmentSection = mocks.Stub(); + mocks.ReplayAll(); + + // Call + TestDelegate call = () => GrassCoverErosionInwardsFailureMechanismSection2aAssessmentResultExtensions.GetAssessmentLayerTwoA(null, + new GrassCoverErosionInwardsFailureMechanism(), + assessmentSection); + + // Assert + var exception = Assert.Throws(call); + Assert.AreEqual("sectionResult", exception.ParamName); + mocks.VerifyAll(); + } + + [Test] + public void GetAssessmentLayerTwoA_FailureMechanismNull_ThrowsArgumentNullException() + { + // Setup + var mocks = new MockRepository(); + var assessmentSection = mocks.Stub(); + mocks.ReplayAll(); + + FailureMechanismSection section = FailureMechanismSectionTestFactory.CreateFailureMechanismSection(); + var failureMechanismSectionResult = new GrassCoverErosionInwardsFailureMechanismSectionResult(section); + + // Call + TestDelegate call = () => failureMechanismSectionResult.GetAssessmentLayerTwoA(null, assessmentSection); + + // Assert + var exception = Assert.Throws(call); + Assert.AreEqual("failureMechanism", exception.ParamName); + mocks.VerifyAll(); + } + + [Test] + public void GetAssessmentLayerTwoA_AssessmentSectionNull_ThrowsArgumentNullException() + { + // Setup + FailureMechanismSection section = FailureMechanismSectionTestFactory.CreateFailureMechanismSection(); + var failureMechanismSectionResult = new GrassCoverErosionInwardsFailureMechanismSectionResult(section); + + // Call + TestDelegate call = () => failureMechanismSectionResult.GetAssessmentLayerTwoA(new GrassCoverErosionInwardsFailureMechanism(), null); + + // Assert + var exception = Assert.Throws(call); + Assert.AreEqual("assessmentSection", exception.ParamName); + } + + [Test] + public void GetAssessmentLayerTwoA_SectionResultWithoutCalculation_ReturnsNaN() + { + // Setup + var mocks = new MockRepository(); + var assessmentSection = mocks.Stub(); + mocks.ReplayAll(); + + FailureMechanismSection section = FailureMechanismSectionTestFactory.CreateFailureMechanismSection(); + var failureMechanismSectionResult = new GrassCoverErosionInwardsFailureMechanismSectionResult(section); + + // Call + double assessmentLayerTwoA = failureMechanismSectionResult.GetAssessmentLayerTwoA(new GrassCoverErosionInwardsFailureMechanism(), assessmentSection); + + // Assert + Assert.IsNaN(assessmentLayerTwoA); + } + + [Test] + public void GetAssessmentLayerTwoA_CalculationWithoutOutput_ReturnsNaN() + { + // Setup + var mocks = new MockRepository(); + var assessmentSection = mocks.Stub(); + mocks.ReplayAll(); + + FailureMechanismSection section = FailureMechanismSectionTestFactory.CreateFailureMechanismSection(); + var failureMechanismSectionResult = new GrassCoverErosionInwardsFailureMechanismSectionResult(section); + + failureMechanismSectionResult.Calculation = new GrassCoverErosionInwardsCalculation(); + + // Call + double assessmentLayerTwoA = failureMechanismSectionResult.GetAssessmentLayerTwoA(new GrassCoverErosionInwardsFailureMechanism(), assessmentSection); + + // Assert + Assert.IsNaN(assessmentLayerTwoA); + } + + [Test] + public void GetAssessmentLayerTwoA_CalculationWithOutput_ReturnsDerivedProbability() + { + // Setup + var failureMechanism = new GrassCoverErosionInwardsFailureMechanism(); + + var mocks = new MockRepository(); + IAssessmentSection assessmentSection = AssessmentSectionHelper.CreateAssessmentSectionStub(failureMechanism, mocks); + + FailureMechanismSection section = FailureMechanismSectionTestFactory.CreateFailureMechanismSection(); + var failureMechanismSectionResult = new GrassCoverErosionInwardsFailureMechanismSectionResult(section); + + failureMechanismSectionResult.Calculation = new GrassCoverErosionInwardsCalculation + { + Output = new TestGrassCoverErosionInwardsOutput() + }; + + // Call + double assessmentLayerTwoA = failureMechanismSectionResult.GetAssessmentLayerTwoA(new GrassCoverErosionInwardsFailureMechanism(), assessmentSection); + + // Assert + Assert.AreEqual(0.5, assessmentLayerTwoA); + mocks.VerifyAll(); + } + } +} \ No newline at end of file Index: Ringtoets/GrassCoverErosionInwards/test/Ringtoets.GrassCoverErosionInwards.Data.Test/Ringtoets.GrassCoverErosionInwards.Data.Test.csproj =================================================================== diff -u -rcd75ebe8ea8ae0d361b7632af2bc7771a7a81a65 -rd2bccf12592be5246fc438434a8eec34f24d68ff --- Ringtoets/GrassCoverErosionInwards/test/Ringtoets.GrassCoverErosionInwards.Data.Test/Ringtoets.GrassCoverErosionInwards.Data.Test.csproj (.../Ringtoets.GrassCoverErosionInwards.Data.Test.csproj) (revision cd75ebe8ea8ae0d361b7632af2bc7771a7a81a65) +++ Ringtoets/GrassCoverErosionInwards/test/Ringtoets.GrassCoverErosionInwards.Data.Test/Ringtoets.GrassCoverErosionInwards.Data.Test.csproj (.../Ringtoets.GrassCoverErosionInwards.Data.Test.csproj) (revision d2bccf12592be5246fc438434a8eec34f24d68ff) @@ -19,6 +19,7 @@ +