Index: Ringtoets/MacroStabilityInwards/src/Ringtoets.MacroStabilityInwards.KernelWrapper/Creators/Input/StabilityLocationCreatorHelper.cs =================================================================== diff -u -r4a496868926ff7d3ab5d3080dd833699ec3784fc -rcf4437d42715feee4622c9ae57fb9920485fb13f --- Ringtoets/MacroStabilityInwards/src/Ringtoets.MacroStabilityInwards.KernelWrapper/Creators/Input/StabilityLocationCreatorHelper.cs (.../StabilityLocationCreatorHelper.cs) (revision 4a496868926ff7d3ab5d3080dd833699ec3784fc) +++ Ringtoets/MacroStabilityInwards/src/Ringtoets.MacroStabilityInwards.KernelWrapper/Creators/Input/StabilityLocationCreatorHelper.cs (.../StabilityLocationCreatorHelper.cs) (revision cf4437d42715feee4622c9ae57fb9920485fb13f) @@ -31,9 +31,10 @@ namespace Ringtoets.MacroStabilityInwards.KernelWrapper.Creators.Input { /// - /// Helper class to convert properties needed in the . + /// Helper class to convert properties needed in the + /// and . /// - public static class StabilityLocationCreatorHelper + internal static class StabilityLocationCreatorHelper { /// /// Converts a into a . @@ -49,7 +50,7 @@ if (!Enum.IsDefined(typeof(MacroStabilityInwardsDikeSoilScenario), dikeSoilScenario)) { throw new InvalidEnumArgumentException(nameof(dikeSoilScenario), - (int)dikeSoilScenario, + (int) dikeSoilScenario, typeof(MacroStabilityInwardsDikeSoilScenario)); } @@ -82,7 +83,7 @@ if (!Enum.IsDefined(typeof(WaternetCreationMode), waternetCreationMode)) { throw new InvalidEnumArgumentException(nameof(waternetCreationMode), - (int)waternetCreationMode, + (int) waternetCreationMode, typeof(WaternetCreationMode)); } @@ -111,7 +112,7 @@ if (!Enum.IsDefined(typeof(PlLineCreationMethod), plLineCreationMethod)) { throw new InvalidEnumArgumentException(nameof(plLineCreationMethod), - (int)plLineCreationMethod, + (int) plLineCreationMethod, typeof(PlLineCreationMethod)); } Index: Ringtoets/MacroStabilityInwards/src/Ringtoets.MacroStabilityInwards.KernelWrapper/Creators/Input/WaternetStabilityLocationCreator.cs =================================================================== diff -u --- Ringtoets/MacroStabilityInwards/src/Ringtoets.MacroStabilityInwards.KernelWrapper/Creators/Input/WaternetStabilityLocationCreator.cs (revision 0) +++ Ringtoets/MacroStabilityInwards/src/Ringtoets.MacroStabilityInwards.KernelWrapper/Creators/Input/WaternetStabilityLocationCreator.cs (revision cf4437d42715feee4622c9ae57fb9920485fb13f) @@ -0,0 +1,133 @@ +// 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 System.ComponentModel; +using Deltares.WTIStability; +using Ringtoets.MacroStabilityInwards.KernelWrapper.Calculators.Waternet.Input; +using Ringtoets.MacroStabilityInwards.KernelWrapper.Kernels.Waternet; + +namespace Ringtoets.MacroStabilityInwards.KernelWrapper.Creators.Input +{ + /// + /// Creates instances which are required by . + /// + internal static class WaternetStabilityLocationCreator + { + /// + /// Creates a based on the given under extreme circumstances, + /// which can be used by . + /// + /// The to get the information from. + /// A new with the given information from . + /// Thrown when is null. + /// Thrown when , + /// or + /// is an invalid value. + /// Thrown when , + /// or + /// is a valid value but unsupported. + public static StabilityLocation CreateExtreme(WaternetCalculatorInput input) + { + if (input == null) + { + throw new ArgumentNullException(nameof(input)); + } + + return new StabilityLocation + { + DikeSoilScenario = StabilityLocationCreatorHelper.ConvertDikeSoilScenario(input.DikeSoilScenario), + WaternetCreationMode = StabilityLocationCreatorHelper.ConvertWaternetCreationMode(input.WaternetCreationMode), + PlLineCreationMethod = StabilityLocationCreatorHelper.ConvertPlLineCreationMethod(input.PlLineCreationMethod), + WaterLevelRiver = input.AssessmentLevel, + WaterLevelRiverAverage = input.WaterLevelRiverAverage, + WaterLevelPolder = input.WaterLevelPolderExtreme, + DrainageConstructionPresent = input.DrainageConstruction.IsPresent, + XCoordMiddleDrainageConstruction = input.DrainageConstruction.XCoordinate, + ZCoordMiddleDrainageConstruction = input.DrainageConstruction.ZCoordinate, + MinimumLevelPhreaticLineAtDikeTopRiver = input.MinimumLevelPhreaticLineAtDikeTopRiver, + MinimumLevelPhreaticLineAtDikeTopPolder = input.MinimumLevelPhreaticLineAtDikeTopPolder, + UseDefaultOffsets = input.PhreaticLineOffsetsExtreme.UseDefaults, + PlLineOffsetBelowPointBRingtoetsWti2017 = input.PhreaticLineOffsetsExtreme.BelowDikeTopAtRiver, + PlLineOffsetBelowDikeTopAtPolder = input.PhreaticLineOffsetsExtreme.BelowDikeTopAtPolder, + PlLineOffsetBelowShoulderBaseInside = input.PhreaticLineOffsetsExtreme.BelowShoulderBaseInside, + PlLineOffsetBelowDikeToeAtPolder = input.PhreaticLineOffsetsExtreme.BelowDikeToeAtPolder, + AdjustPl3And4ForUplift = input.AdjustPhreaticLine3And4ForUplift, + LeakageLengthOutwardsPl3 = input.LeakageLengthOutwardsPhreaticLine3, + LeakageLengthInwardsPl3 = input.LeakageLengthInwardsPhreaticLine3, + LeakageLengthOutwardsPl4 = input.LeakageLengthOutwardsPhreaticLine4, + LeakageLengthInwardsPl4 = input.LeakageLengthInwardsPhreaticLine4, + HeadInPlLine2Outwards = input.PiezometricHeadPhreaticLine2Outwards, + HeadInPlLine2Inwards = input.PiezometricHeadPhreaticLine2Inwards, + PenetrationLength = input.PenetrationLength + }; + } + + /// + /// Creates a based on the given under daily circumstances, + /// which can be used by . + /// + /// The to get the information from. + /// A new with the given information from . + /// Thrown when is null. + /// Thrown when , + /// or + /// is an invalid value. + /// Thrown when , + /// or + /// is a valid value but unsupported. + public static StabilityLocation CreateDaily(WaternetCalculatorInput input) + { + if (input == null) + { + throw new ArgumentNullException(nameof(input)); + } + + return new StabilityLocation + { + DikeSoilScenario = StabilityLocationCreatorHelper.ConvertDikeSoilScenario(input.DikeSoilScenario), + WaternetCreationMode = StabilityLocationCreatorHelper.ConvertWaternetCreationMode(input.WaternetCreationMode), + PlLineCreationMethod = StabilityLocationCreatorHelper.ConvertPlLineCreationMethod(input.PlLineCreationMethod), + WaterLevelRiver = input.WaterLevelRiverAverage, + WaterLevelRiverAverage = input.WaterLevelRiverAverage, + WaterLevelPolder = input.WaterLevelPolderDaily, + DrainageConstructionPresent = input.DrainageConstruction.IsPresent, + XCoordMiddleDrainageConstruction = input.DrainageConstruction.XCoordinate, + ZCoordMiddleDrainageConstruction = input.DrainageConstruction.ZCoordinate, + MinimumLevelPhreaticLineAtDikeTopRiver = input.MinimumLevelPhreaticLineAtDikeTopRiver, + MinimumLevelPhreaticLineAtDikeTopPolder = input.MinimumLevelPhreaticLineAtDikeTopPolder, + UseDefaultOffsets = input.PhreaticLineOffsetsDaily.UseDefaults, + PlLineOffsetBelowPointBRingtoetsWti2017 = input.PhreaticLineOffsetsDaily.BelowDikeTopAtRiver, + PlLineOffsetBelowDikeTopAtPolder = input.PhreaticLineOffsetsDaily.BelowDikeTopAtPolder, + PlLineOffsetBelowShoulderBaseInside = input.PhreaticLineOffsetsDaily.BelowShoulderBaseInside, + PlLineOffsetBelowDikeToeAtPolder = input.PhreaticLineOffsetsDaily.BelowDikeToeAtPolder, + AdjustPl3And4ForUplift = input.AdjustPhreaticLine3And4ForUplift, + LeakageLengthOutwardsPl3 = input.LeakageLengthOutwardsPhreaticLine3, + LeakageLengthInwardsPl3 = input.LeakageLengthInwardsPhreaticLine3, + LeakageLengthOutwardsPl4 = input.LeakageLengthOutwardsPhreaticLine4, + LeakageLengthInwardsPl4 = input.LeakageLengthInwardsPhreaticLine4, + HeadInPlLine2Outwards = input.PiezometricHeadPhreaticLine2Outwards, + HeadInPlLine2Inwards = input.PiezometricHeadPhreaticLine2Inwards, + PenetrationLength = 0.0 + }; + } + } +} \ No newline at end of file Index: Ringtoets/MacroStabilityInwards/src/Ringtoets.MacroStabilityInwards.KernelWrapper/Ringtoets.MacroStabilityInwards.KernelWrapper.csproj =================================================================== diff -u -r177a86fe2d7c3390004138070a95e52b6e3b13ae -rcf4437d42715feee4622c9ae57fb9920485fb13f --- Ringtoets/MacroStabilityInwards/src/Ringtoets.MacroStabilityInwards.KernelWrapper/Ringtoets.MacroStabilityInwards.KernelWrapper.csproj (.../Ringtoets.MacroStabilityInwards.KernelWrapper.csproj) (revision 177a86fe2d7c3390004138070a95e52b6e3b13ae) +++ Ringtoets/MacroStabilityInwards/src/Ringtoets.MacroStabilityInwards.KernelWrapper/Ringtoets.MacroStabilityInwards.KernelWrapper.csproj (.../Ringtoets.MacroStabilityInwards.KernelWrapper.csproj) (revision cf4437d42715feee4622c9ae57fb9920485fb13f) @@ -78,6 +78,7 @@ + Index: Ringtoets/MacroStabilityInwards/test/Ringtoets.MacroStabilityInwards.KernelWrapper.Test/Creators/Input/WaternetStabilityLocationCreatorTest.cs =================================================================== diff -u --- Ringtoets/MacroStabilityInwards/test/Ringtoets.MacroStabilityInwards.KernelWrapper.Test/Creators/Input/WaternetStabilityLocationCreatorTest.cs (revision 0) +++ Ringtoets/MacroStabilityInwards/test/Ringtoets.MacroStabilityInwards.KernelWrapper.Test/Creators/Input/WaternetStabilityLocationCreatorTest.cs (revision cf4437d42715feee4622c9ae57fb9920485fb13f) @@ -0,0 +1,552 @@ +// 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 System.ComponentModel; +using Core.Common.TestUtil; +using Deltares.WaternetCreator; +using Deltares.WTIStability; +using NUnit.Framework; +using Ringtoets.MacroStabilityInwards.KernelWrapper.Calculators.Input; +using Ringtoets.MacroStabilityInwards.KernelWrapper.Calculators.Waternet.Input; +using Ringtoets.MacroStabilityInwards.KernelWrapper.Creators.Input; +using Ringtoets.MacroStabilityInwards.KernelWrapper.TestUtil.Calculators.Input; +using Ringtoets.MacroStabilityInwards.Primitives; +using PlLineCreationMethod = Ringtoets.MacroStabilityInwards.KernelWrapper.Calculators.Input.PlLineCreationMethod; +using WaternetCreationMode = Ringtoets.MacroStabilityInwards.KernelWrapper.Calculators.Input.WaternetCreationMode; +using WTIStabilityPlLineCreationMethod = Deltares.WaternetCreator.PlLineCreationMethod; +using WTIStabilityWaternetCreationMethod = Deltares.WaternetCreator.WaternetCreationMode; + +namespace Ringtoets.MacroStabilityInwards.KernelWrapper.Test.Creators.Input +{ + [TestFixture] + public class WaternetStabilityLocationCreatorTest + { + [Test] + public void CreateExtreme_InputNull_ThrowsArgumentNullException() + { + // Call + TestDelegate call = () => WaternetStabilityLocationCreator.CreateExtreme(null); + + // Assert + var exception = Assert.Throws(call); + Assert.AreEqual("input", exception.ParamName); + } + + [Test] + public void CreateExtreme_InvalidDikeSoilScenario_ThrowInvalidEnumArgumentException() + { + // Setup + var input = new WaternetCalculatorInput( + new WaternetCalculatorInput.ConstructionProperties + { + SurfaceLine = new MacroStabilityInwardsSurfaceLine("test"), + SoilProfile = new TestSoilProfile(), + PhreaticLineOffsetsExtreme = new PhreaticLineOffsets(), + PhreaticLineOffsetsDaily = new PhreaticLineOffsets(), + DrainageConstruction = new DrainageConstruction(), + DikeSoilScenario = (MacroStabilityInwardsDikeSoilScenario) 99 + }); + + // Call + TestDelegate test = () => WaternetStabilityLocationCreator.CreateExtreme(input); + + // Assert + string message = $"The value of argument 'dikeSoilScenario' ({99}) is invalid for Enum type '{typeof(MacroStabilityInwardsDikeSoilScenario).Name}'."; + TestHelper.AssertThrowsArgumentExceptionAndTestMessage(test, message); + } + + [Test] + [TestCase(MacroStabilityInwardsDikeSoilScenario.ClayDikeOnClay, DikeSoilScenario.ClayDikeOnClay)] + [TestCase(MacroStabilityInwardsDikeSoilScenario.ClayDikeOnSand, DikeSoilScenario.ClayDikeOnSand)] + [TestCase(MacroStabilityInwardsDikeSoilScenario.SandDikeOnClay, DikeSoilScenario.SandDikeOnClay)] + [TestCase(MacroStabilityInwardsDikeSoilScenario.SandDikeOnSand, DikeSoilScenario.SandDikeOnSand)] + public void CreateExtreme_ValidDikeSoilScenario_ReturnStabilityLocationWithDikeSoilScenario(MacroStabilityInwardsDikeSoilScenario macroStabilityInwardsDikeSoilScenario, + DikeSoilScenario expectedDikeSoilScenario) + { + // Setup + var input = new WaternetCalculatorInput( + new WaternetCalculatorInput.ConstructionProperties + { + DrainageConstruction = new DrainageConstruction(), + PhreaticLineOffsetsExtreme = new PhreaticLineOffsets(), + PhreaticLineOffsetsDaily = new PhreaticLineOffsets(), + SurfaceLine = new MacroStabilityInwardsSurfaceLine("test"), + SoilProfile = new TestSoilProfile(), + DikeSoilScenario = macroStabilityInwardsDikeSoilScenario + }); + + // Call + StabilityLocation location = WaternetStabilityLocationCreator.CreateExtreme(input); + + // Assert + Assert.AreEqual(expectedDikeSoilScenario, location.DikeSoilScenario); + } + + [Test] + public void CreateExtreme_InvalidWaternetCreationMode_ThrowInvalidEnumArgumentException() + { + // Setup + var input = new WaternetCalculatorInput( + new WaternetCalculatorInput.ConstructionProperties + { + SurfaceLine = new MacroStabilityInwardsSurfaceLine("test"), + SoilProfile = new TestSoilProfile(), + PhreaticLineOffsetsExtreme = new PhreaticLineOffsets(), + PhreaticLineOffsetsDaily = new PhreaticLineOffsets(), + DrainageConstruction = new DrainageConstruction(), + WaternetCreationMode = (WaternetCreationMode) 99 + }); + + // Call + TestDelegate test = () => WaternetStabilityLocationCreator.CreateExtreme(input); + + // Assert + string message = $"The value of argument 'waternetCreationMode' ({99}) is invalid for Enum type '{typeof(WaternetCreationMode).Name}'."; + TestHelper.AssertThrowsArgumentExceptionAndTestMessage(test, message); + } + + [Test] + [TestCase(WaternetCreationMode.CreateWaternet, WTIStabilityWaternetCreationMethod.CreateWaternet)] + [TestCase(WaternetCreationMode.FillInWaternetValues, WTIStabilityWaternetCreationMethod.FillInWaternetValues)] + public void CreateExtreme_ValidWaternetCreationMode_ReturnStabilityLocationWithWaternetCreationMode(WaternetCreationMode waternetCreationMode, + WTIStabilityWaternetCreationMethod expectedWaternetCreationMode) + { + // Setup + var input = new WaternetCalculatorInput( + new WaternetCalculatorInput.ConstructionProperties + { + DrainageConstruction = new DrainageConstruction(), + PhreaticLineOffsetsExtreme = new PhreaticLineOffsets(), + PhreaticLineOffsetsDaily = new PhreaticLineOffsets(), + SurfaceLine = new MacroStabilityInwardsSurfaceLine("test"), + SoilProfile = new TestSoilProfile(), + WaternetCreationMode = waternetCreationMode + }); + + // Call + StabilityLocation location = WaternetStabilityLocationCreator.CreateExtreme(input); + + // Assert + Assert.AreEqual(expectedWaternetCreationMode, location.WaternetCreationMode); + } + + [Test] + public void CreateExtreme_InvalidPlLineCreationMethod_ThrowInvalidEnumArgumentException() + { + // Setup + var input = new WaternetCalculatorInput( + new WaternetCalculatorInput.ConstructionProperties + { + SurfaceLine = new MacroStabilityInwardsSurfaceLine("test"), + SoilProfile = new TestSoilProfile(), + PhreaticLineOffsetsExtreme = new PhreaticLineOffsets(), + PhreaticLineOffsetsDaily = new PhreaticLineOffsets(), + DrainageConstruction = new DrainageConstruction(), + PlLineCreationMethod = (PlLineCreationMethod) 99 + }); + + // Call + TestDelegate test = () => WaternetStabilityLocationCreator.CreateExtreme(input); + + // Assert + string message = $"The value of argument 'plLineCreationMethod' ({99}) is invalid for Enum type '{typeof(PlLineCreationMethod).Name}'."; + TestHelper.AssertThrowsArgumentExceptionAndTestMessage(test, message); + } + + [Test] + [TestCase(PlLineCreationMethod.ExpertKnowledgeRrd, WTIStabilityPlLineCreationMethod.ExpertKnowledgeRrd)] + [TestCase(PlLineCreationMethod.ExpertKnowledgeLinearInDike, WTIStabilityPlLineCreationMethod.ExpertKnowledgeLinearInDike)] + [TestCase(PlLineCreationMethod.RingtoetsWti2017, WTIStabilityPlLineCreationMethod.RingtoetsWti2017)] + [TestCase(PlLineCreationMethod.DupuitStatic, WTIStabilityPlLineCreationMethod.DupuitStatic)] + [TestCase(PlLineCreationMethod.DupuitDynamic, WTIStabilityPlLineCreationMethod.DupuitDynamic)] + [TestCase(PlLineCreationMethod.Sensors, WTIStabilityPlLineCreationMethod.Sensors)] + [TestCase(PlLineCreationMethod.None, WTIStabilityPlLineCreationMethod.None)] + public void CreateExtreme_ValidPlLineCreationMethod_ReturnStabilityLocationWithWaternetCreationMode(PlLineCreationMethod plLineCreationMethod, + WTIStabilityPlLineCreationMethod expectedPlLineCreationMethod) + { + // Setup + var input = new WaternetCalculatorInput( + new WaternetCalculatorInput.ConstructionProperties + { + DrainageConstruction = new DrainageConstruction(), + PhreaticLineOffsetsExtreme = new PhreaticLineOffsets(), + PhreaticLineOffsetsDaily = new PhreaticLineOffsets(), + SurfaceLine = new MacroStabilityInwardsSurfaceLine("test"), + SoilProfile = new TestSoilProfile(), + PlLineCreationMethod = plLineCreationMethod + }); + + // Call + StabilityLocation location = WaternetStabilityLocationCreator.CreateExtreme(input); + + // Assert + Assert.AreEqual(expectedPlLineCreationMethod, location.PlLineCreationMethod); + } + + [Test] + [Combinatorial] + public void CreateExtreme_WithInput_ReturnStabilityLocation([Values(true, false)] bool drainageConstructionPresent, + [Values(true, false)] bool useDefaultOffsets) + { + // Setup + var random = new Random(21); + double assessmentLevel = random.Next(); + double waterLevelRiverAverage = random.Next(); + double waterLevelPolderExtreme = random.Next(); + double minimumLevelPhreaticLineAtDikeTopRiver = random.Next(); + double minimumLevelPhreaticLineAtDikeTopPolder = random.Next(); + bool adjustPhreaticLine3And4ForUplift = random.NextBoolean(); + double leakageLengthOutwardsPhreaticLine3 = random.Next(); + double leakageLengthInwardsPhreaticLine3 = random.Next(); + double leakageLengthOutwardsPhreaticLine4 = random.Next(); + double leakageLengthInwardsPhreaticLine4 = random.Next(); + double piezometricHeadPhreaticLine2Outwards = random.Next(); + double piezometricHeadPhreaticLine2Inwards = random.Next(); + double penetrationLength = random.Next(); + + DrainageConstruction drainageConstruction = drainageConstructionPresent + ? new DrainageConstruction(random.Next(), random.Next()) + : new DrainageConstruction(); + PhreaticLineOffsets phreaticLineOffsets = useDefaultOffsets + ? new PhreaticLineOffsets() + : new PhreaticLineOffsets(random.Next(), random.Next(), + random.Next(), random.Next()); + + var input = new WaternetCalculatorInput( + new WaternetCalculatorInput.ConstructionProperties + { + SurfaceLine = new MacroStabilityInwardsSurfaceLine("test"), + SoilProfile = new TestSoilProfile(), + DikeSoilScenario = MacroStabilityInwardsDikeSoilScenario.SandDikeOnClay, + AssessmentLevel = assessmentLevel, + WaterLevelRiverAverage = waterLevelRiverAverage, + WaterLevelPolderExtreme = waterLevelPolderExtreme, + DrainageConstruction = drainageConstruction, + PhreaticLineOffsetsExtreme = phreaticLineOffsets, + PhreaticLineOffsetsDaily = new PhreaticLineOffsets(), + MinimumLevelPhreaticLineAtDikeTopRiver = minimumLevelPhreaticLineAtDikeTopRiver, + MinimumLevelPhreaticLineAtDikeTopPolder = minimumLevelPhreaticLineAtDikeTopPolder, + AdjustPhreaticLine3And4ForUplift = adjustPhreaticLine3And4ForUplift, + LeakageLengthOutwardsPhreaticLine3 = leakageLengthOutwardsPhreaticLine3, + LeakageLengthInwardsPhreaticLine3 = leakageLengthInwardsPhreaticLine3, + LeakageLengthOutwardsPhreaticLine4 = leakageLengthOutwardsPhreaticLine4, + LeakageLengthInwardsPhreaticLine4 = leakageLengthInwardsPhreaticLine4, + PiezometricHeadPhreaticLine2Outwards = piezometricHeadPhreaticLine2Outwards, + PiezometricHeadPhreaticLine2Inwards = piezometricHeadPhreaticLine2Inwards, + PenetrationLength = penetrationLength + }); + + // Call + StabilityLocation location = WaternetStabilityLocationCreator.CreateExtreme(input); + + // Assert + Assert.AreEqual(DikeSoilScenario.SandDikeOnClay, location.DikeSoilScenario); + Assert.AreEqual(WTIStabilityWaternetCreationMethod.CreateWaternet, location.WaternetCreationMode); + Assert.AreEqual(WTIStabilityPlLineCreationMethod.RingtoetsWti2017, location.PlLineCreationMethod); + Assert.AreEqual(assessmentLevel, location.WaterLevelRiver); + Assert.AreEqual(assessmentLevel, location.HeadInPlLine3); + Assert.AreEqual(assessmentLevel, location.HeadInPlLine4); + Assert.AreEqual(waterLevelRiverAverage, location.WaterLevelRiverAverage); + Assert.AreEqual(waterLevelPolderExtreme, location.WaterLevelPolder); + Assert.AreEqual(drainageConstruction.IsPresent, location.DrainageConstructionPresent); + Assert.AreEqual(drainageConstruction.XCoordinate, location.XCoordMiddleDrainageConstruction); + Assert.AreEqual(drainageConstruction.ZCoordinate, location.ZCoordMiddleDrainageConstruction); + Assert.AreEqual(minimumLevelPhreaticLineAtDikeTopRiver, location.MinimumLevelPhreaticLineAtDikeTopRiver); + Assert.AreEqual(minimumLevelPhreaticLineAtDikeTopPolder, location.MinimumLevelPhreaticLineAtDikeTopPolder); + Assert.AreEqual(phreaticLineOffsets.UseDefaults, location.UseDefaultOffsets); + Assert.AreEqual(phreaticLineOffsets.BelowDikeTopAtRiver, location.PlLineOffsetBelowPointBRingtoetsWti2017); + Assert.AreEqual(phreaticLineOffsets.BelowDikeTopAtPolder, location.PlLineOffsetBelowDikeTopAtPolder); + Assert.AreEqual(phreaticLineOffsets.BelowShoulderBaseInside, location.PlLineOffsetBelowShoulderBaseInside); + Assert.AreEqual(phreaticLineOffsets.BelowDikeToeAtPolder, location.PlLineOffsetBelowDikeToeAtPolder); + Assert.AreEqual(adjustPhreaticLine3And4ForUplift, location.AdjustPl3And4ForUplift); + Assert.AreEqual(leakageLengthOutwardsPhreaticLine3, location.LeakageLengthOutwardsPl3); + Assert.AreEqual(leakageLengthInwardsPhreaticLine3, location.LeakageLengthInwardsPl3); + Assert.AreEqual(leakageLengthOutwardsPhreaticLine4, location.LeakageLengthOutwardsPl4); + Assert.AreEqual(leakageLengthInwardsPhreaticLine4, location.LeakageLengthInwardsPl4); + Assert.AreEqual(piezometricHeadPhreaticLine2Outwards, location.HeadInPlLine2Outwards); + Assert.AreEqual(piezometricHeadPhreaticLine2Inwards, location.HeadInPlLine2Inwards); + Assert.AreEqual(penetrationLength, location.PenetrationLength); + + AssertIrrelevantValues(location); + } + + [Test] + public void CreateDaily_InputNull_ThrowsArgumentNullException() + { + // Call + TestDelegate call = () => WaternetStabilityLocationCreator.CreateDaily(null); + + // Assert + var exception = Assert.Throws(call); + Assert.AreEqual("input", exception.ParamName); + } + + [Test] + public void CreateDaily_InvalidDikeSoilScenario_ThrowInvalidEnumArgumentException() + { + // Setup + var input = new WaternetCalculatorInput( + new WaternetCalculatorInput.ConstructionProperties + { + SurfaceLine = new MacroStabilityInwardsSurfaceLine("test"), + SoilProfile = new TestSoilProfile(), + PhreaticLineOffsetsExtreme = new PhreaticLineOffsets(), + PhreaticLineOffsetsDaily = new PhreaticLineOffsets(), + DrainageConstruction = new DrainageConstruction(), + DikeSoilScenario = (MacroStabilityInwardsDikeSoilScenario) 99 + }); + + // Call + TestDelegate test = () => WaternetStabilityLocationCreator.CreateDaily(input); + + // Assert + string message = $"The value of argument 'dikeSoilScenario' ({99}) is invalid for Enum type '{typeof(MacroStabilityInwardsDikeSoilScenario).Name}'."; + TestHelper.AssertThrowsArgumentExceptionAndTestMessage(test, message); + } + + [Test] + [TestCase(MacroStabilityInwardsDikeSoilScenario.ClayDikeOnClay, DikeSoilScenario.ClayDikeOnClay)] + [TestCase(MacroStabilityInwardsDikeSoilScenario.ClayDikeOnSand, DikeSoilScenario.ClayDikeOnSand)] + [TestCase(MacroStabilityInwardsDikeSoilScenario.SandDikeOnClay, DikeSoilScenario.SandDikeOnClay)] + [TestCase(MacroStabilityInwardsDikeSoilScenario.SandDikeOnSand, DikeSoilScenario.SandDikeOnSand)] + public void CreateDaily_ValidDikeSoilScenario_ReturnStabilityLocationWithDikeSoilScenario(MacroStabilityInwardsDikeSoilScenario macroStabilityInwardsDikeSoilScenario, + DikeSoilScenario expectedDikeSoilScenario) + { + // Setup + var input = new WaternetCalculatorInput( + new WaternetCalculatorInput.ConstructionProperties + { + DrainageConstruction = new DrainageConstruction(), + PhreaticLineOffsetsExtreme = new PhreaticLineOffsets(), + PhreaticLineOffsetsDaily = new PhreaticLineOffsets(), + SurfaceLine = new MacroStabilityInwardsSurfaceLine("test"), + SoilProfile = new TestSoilProfile(), + DikeSoilScenario = macroStabilityInwardsDikeSoilScenario + }); + + // Call + StabilityLocation location = WaternetStabilityLocationCreator.CreateDaily(input); + + // Assert + Assert.AreEqual(expectedDikeSoilScenario, location.DikeSoilScenario); + } + + [Test] + public void CreateDaily_InvalidWaternetCreationMode_ThrowInvalidEnumArgumentException() + { + // Setup + var input = new WaternetCalculatorInput( + new WaternetCalculatorInput.ConstructionProperties + { + SurfaceLine = new MacroStabilityInwardsSurfaceLine("test"), + SoilProfile = new TestSoilProfile(), + PhreaticLineOffsetsExtreme = new PhreaticLineOffsets(), + PhreaticLineOffsetsDaily = new PhreaticLineOffsets(), + DrainageConstruction = new DrainageConstruction(), + WaternetCreationMode = (WaternetCreationMode) 99 + }); + + // Call + TestDelegate test = () => WaternetStabilityLocationCreator.CreateDaily(input); + + // Assert + string message = $"The value of argument 'waternetCreationMode' ({99}) is invalid for Enum type '{typeof(WaternetCreationMode).Name}'."; + TestHelper.AssertThrowsArgumentExceptionAndTestMessage(test, message); + } + + [Test] + [TestCase(WaternetCreationMode.CreateWaternet, WTIStabilityWaternetCreationMethod.CreateWaternet)] + [TestCase(WaternetCreationMode.FillInWaternetValues, WTIStabilityWaternetCreationMethod.FillInWaternetValues)] + public void CreateDaily_ValidWaternetCreationMode_ReturnStabilityLocationWithWaternetCreationMode(WaternetCreationMode waternetCreationMode, + WTIStabilityWaternetCreationMethod expectedWaternetCreationMode) + { + // Setup + var input = new WaternetCalculatorInput( + new WaternetCalculatorInput.ConstructionProperties + { + DrainageConstruction = new DrainageConstruction(), + PhreaticLineOffsetsExtreme = new PhreaticLineOffsets(), + PhreaticLineOffsetsDaily = new PhreaticLineOffsets(), + SurfaceLine = new MacroStabilityInwardsSurfaceLine("test"), + SoilProfile = new TestSoilProfile(), + WaternetCreationMode = waternetCreationMode + }); + + // Call + StabilityLocation location = WaternetStabilityLocationCreator.CreateDaily(input); + + // Assert + Assert.AreEqual(expectedWaternetCreationMode, location.WaternetCreationMode); + } + + [Test] + public void CreateDaily_InvalidPlLineCreationMethod_ThrowInvalidEnumArgumentException() + { + // Setup + var input = new WaternetCalculatorInput( + new WaternetCalculatorInput.ConstructionProperties + { + SurfaceLine = new MacroStabilityInwardsSurfaceLine("test"), + SoilProfile = new TestSoilProfile(), + PhreaticLineOffsetsExtreme = new PhreaticLineOffsets(), + PhreaticLineOffsetsDaily = new PhreaticLineOffsets(), + DrainageConstruction = new DrainageConstruction(), + PlLineCreationMethod = (PlLineCreationMethod) 99 + }); + + // Call + TestDelegate test = () => WaternetStabilityLocationCreator.CreateDaily(input); + + // Assert + string message = $"The value of argument 'plLineCreationMethod' ({99}) is invalid for Enum type '{typeof(PlLineCreationMethod).Name}'."; + TestHelper.AssertThrowsArgumentExceptionAndTestMessage(test, message); + } + + [Test] + [TestCase(PlLineCreationMethod.ExpertKnowledgeRrd, WTIStabilityPlLineCreationMethod.ExpertKnowledgeRrd)] + [TestCase(PlLineCreationMethod.ExpertKnowledgeLinearInDike, WTIStabilityPlLineCreationMethod.ExpertKnowledgeLinearInDike)] + [TestCase(PlLineCreationMethod.RingtoetsWti2017, WTIStabilityPlLineCreationMethod.RingtoetsWti2017)] + [TestCase(PlLineCreationMethod.DupuitStatic, WTIStabilityPlLineCreationMethod.DupuitStatic)] + [TestCase(PlLineCreationMethod.DupuitDynamic, WTIStabilityPlLineCreationMethod.DupuitDynamic)] + [TestCase(PlLineCreationMethod.Sensors, WTIStabilityPlLineCreationMethod.Sensors)] + [TestCase(PlLineCreationMethod.None, WTIStabilityPlLineCreationMethod.None)] + public void CreateDaily_ValidPlLineCreationMethod_ReturnStabilityLocationWithWaternetCreationMode(PlLineCreationMethod plLineCreationMethod, + WTIStabilityPlLineCreationMethod expectedPlLineCreationMethod) + { + // Setup + var input = new WaternetCalculatorInput( + new WaternetCalculatorInput.ConstructionProperties + { + DrainageConstruction = new DrainageConstruction(), + PhreaticLineOffsetsExtreme = new PhreaticLineOffsets(), + PhreaticLineOffsetsDaily = new PhreaticLineOffsets(), + SurfaceLine = new MacroStabilityInwardsSurfaceLine("test"), + SoilProfile = new TestSoilProfile(), + PlLineCreationMethod = plLineCreationMethod + }); + + // Call + StabilityLocation location = WaternetStabilityLocationCreator.CreateDaily(input); + + // Assert + Assert.AreEqual(expectedPlLineCreationMethod, location.PlLineCreationMethod); + } + + [Test] + [Combinatorial] + public void CreateDaily_WithInput_ReturnStabilityLocation([Values(true, false)] bool drainageConstructionPresent, + [Values(true, false)] bool useDefaultOffsets) + { + // Setup + var random = new Random(21); + double assessmentLevel = random.Next(); + double waterLevelRiverAverage = random.Next(); + double waterLevelPolderDaily = random.Next(); + double minimumLevelPhreaticLineAtDikeTopRiver = random.Next(); + double minimumLevelPhreaticLineAtDikeTopPolder = random.Next(); + bool adjustPhreaticLine3And4ForUplift = random.NextBoolean(); + double leakageLengthOutwardsPhreaticLine3 = random.Next(); + double leakageLengthInwardsPhreaticLine3 = random.Next(); + double leakageLengthOutwardsPhreaticLine4 = random.Next(); + double leakageLengthInwardsPhreaticLine4 = random.Next(); + double piezometricHeadPhreaticLine2Outwards = random.Next(); + double piezometricHeadPhreaticLine2Inwards = random.Next(); + + DrainageConstruction drainageConstruction = drainageConstructionPresent + ? new DrainageConstruction(random.Next(), random.Next()) + : new DrainageConstruction(); + PhreaticLineOffsets phreaticLineOffsets = useDefaultOffsets + ? new PhreaticLineOffsets() + : new PhreaticLineOffsets(random.Next(), random.Next(), + random.Next(), random.Next()); + + var input = new WaternetCalculatorInput( + new WaternetCalculatorInput.ConstructionProperties + { + SurfaceLine = new MacroStabilityInwardsSurfaceLine("test"), + SoilProfile = new TestSoilProfile(), + DikeSoilScenario = MacroStabilityInwardsDikeSoilScenario.SandDikeOnClay, + AssessmentLevel = assessmentLevel, + WaterLevelRiverAverage = waterLevelRiverAverage, + WaterLevelPolderDaily = waterLevelPolderDaily, + DrainageConstruction = drainageConstruction, + PhreaticLineOffsetsExtreme = new PhreaticLineOffsets(), + PhreaticLineOffsetsDaily = phreaticLineOffsets, + MinimumLevelPhreaticLineAtDikeTopRiver = minimumLevelPhreaticLineAtDikeTopRiver, + MinimumLevelPhreaticLineAtDikeTopPolder = minimumLevelPhreaticLineAtDikeTopPolder, + AdjustPhreaticLine3And4ForUplift = adjustPhreaticLine3And4ForUplift, + LeakageLengthOutwardsPhreaticLine3 = leakageLengthOutwardsPhreaticLine3, + LeakageLengthInwardsPhreaticLine3 = leakageLengthInwardsPhreaticLine3, + LeakageLengthOutwardsPhreaticLine4 = leakageLengthOutwardsPhreaticLine4, + LeakageLengthInwardsPhreaticLine4 = leakageLengthInwardsPhreaticLine4, + PiezometricHeadPhreaticLine2Outwards = piezometricHeadPhreaticLine2Outwards, + PiezometricHeadPhreaticLine2Inwards = piezometricHeadPhreaticLine2Inwards, + PenetrationLength = random.Next() + }); + + // Call + StabilityLocation location = WaternetStabilityLocationCreator.CreateDaily(input); + + // Assert + Assert.AreEqual(DikeSoilScenario.SandDikeOnClay, location.DikeSoilScenario); + Assert.AreEqual(WTIStabilityWaternetCreationMethod.CreateWaternet, location.WaternetCreationMode); + Assert.AreEqual(WTIStabilityPlLineCreationMethod.RingtoetsWti2017, location.PlLineCreationMethod); + Assert.AreEqual(waterLevelRiverAverage, location.WaterLevelRiver); + Assert.AreEqual(waterLevelRiverAverage, location.HeadInPlLine3); + Assert.AreEqual(waterLevelRiverAverage, location.HeadInPlLine4); + Assert.AreEqual(waterLevelRiverAverage, location.WaterLevelRiverAverage); + Assert.AreEqual(waterLevelPolderDaily, location.WaterLevelPolder); + Assert.AreEqual(drainageConstruction.IsPresent, location.DrainageConstructionPresent); + Assert.AreEqual(drainageConstruction.XCoordinate, location.XCoordMiddleDrainageConstruction); + Assert.AreEqual(drainageConstruction.ZCoordinate, location.ZCoordMiddleDrainageConstruction); + Assert.AreEqual(minimumLevelPhreaticLineAtDikeTopRiver, location.MinimumLevelPhreaticLineAtDikeTopRiver); + Assert.AreEqual(minimumLevelPhreaticLineAtDikeTopPolder, location.MinimumLevelPhreaticLineAtDikeTopPolder); + Assert.AreEqual(phreaticLineOffsets.UseDefaults, location.UseDefaultOffsets); + Assert.AreEqual(phreaticLineOffsets.BelowDikeTopAtRiver, location.PlLineOffsetBelowPointBRingtoetsWti2017); + Assert.AreEqual(phreaticLineOffsets.BelowDikeTopAtPolder, location.PlLineOffsetBelowDikeTopAtPolder); + Assert.AreEqual(phreaticLineOffsets.BelowShoulderBaseInside, location.PlLineOffsetBelowShoulderBaseInside); + Assert.AreEqual(phreaticLineOffsets.BelowDikeToeAtPolder, location.PlLineOffsetBelowDikeToeAtPolder); + Assert.AreEqual(adjustPhreaticLine3And4ForUplift, location.AdjustPl3And4ForUplift); + Assert.AreEqual(leakageLengthOutwardsPhreaticLine3, location.LeakageLengthOutwardsPl3); + Assert.AreEqual(leakageLengthInwardsPhreaticLine3, location.LeakageLengthInwardsPl3); + Assert.AreEqual(leakageLengthOutwardsPhreaticLine4, location.LeakageLengthOutwardsPl4); + Assert.AreEqual(leakageLengthInwardsPhreaticLine4, location.LeakageLengthInwardsPl4); + Assert.AreEqual(piezometricHeadPhreaticLine2Outwards, location.HeadInPlLine2Outwards); + Assert.AreEqual(piezometricHeadPhreaticLine2Inwards, location.HeadInPlLine2Inwards); + Assert.AreEqual(0.0, location.PenetrationLength); + + AssertIrrelevantValues(location); + } + + private static void AssertIrrelevantValues(StabilityLocation location) + { + Assert.IsNaN(location.WaterLevelRiverLow); // Only for macro stability outwards + Assert.AreEqual(0.0, location.X); // Unused property + Assert.AreEqual(0.0, location.Y); // Unused property + Assert.IsTrue(string.IsNullOrEmpty(location.PiezometricHeads.Name)); // Unused property + Assert.IsNaN(location.PiezometricHeads.HeadPl3); // Unused property + Assert.AreEqual(0.30, location.PiezometricHeads.DampingFactorPl3); // Unused property + Assert.IsNaN(location.PiezometricHeads.HeadPl4); // Unused property + Assert.AreEqual(0.30, location.PiezometricHeads.DampingFactorPl4); // Unused property + } + } +} \ No newline at end of file Index: Ringtoets/MacroStabilityInwards/test/Ringtoets.MacroStabilityInwards.KernelWrapper.Test/Ringtoets.MacroStabilityInwards.KernelWrapper.Test.csproj =================================================================== diff -u -r177a86fe2d7c3390004138070a95e52b6e3b13ae -rcf4437d42715feee4622c9ae57fb9920485fb13f --- Ringtoets/MacroStabilityInwards/test/Ringtoets.MacroStabilityInwards.KernelWrapper.Test/Ringtoets.MacroStabilityInwards.KernelWrapper.Test.csproj (.../Ringtoets.MacroStabilityInwards.KernelWrapper.Test.csproj) (revision 177a86fe2d7c3390004138070a95e52b6e3b13ae) +++ Ringtoets/MacroStabilityInwards/test/Ringtoets.MacroStabilityInwards.KernelWrapper.Test/Ringtoets.MacroStabilityInwards.KernelWrapper.Test.csproj (.../Ringtoets.MacroStabilityInwards.KernelWrapper.Test.csproj) (revision cf4437d42715feee4622c9ae57fb9920485fb13f) @@ -92,6 +92,7 @@ +