Index: Ringtoets/Piping/src/Ringtoets.Piping.Data/PipingSoilProfile.cs =================================================================== diff -u -rdc2b06cb5a46cf2508d28fe9a6f8dcaa710346a7 -r935ddb05bb15494732dea93d6c67a40bb318fb85 --- Ringtoets/Piping/src/Ringtoets.Piping.Data/PipingSoilProfile.cs (.../PipingSoilProfile.cs) (revision dc2b06cb5a46cf2508d28fe9a6f8dcaa710346a7) +++ Ringtoets/Piping/src/Ringtoets.Piping.Data/PipingSoilProfile.cs (.../PipingSoilProfile.cs) (revision 935ddb05bb15494732dea93d6c67a40bb318fb85) @@ -73,23 +73,40 @@ } private set { - if (value == null) - { - throw new ArgumentNullException(@"value", string.Format(Resources.Error_Cannot_Construct_PipingSoilProfile_Without_Layers)); - } - if (!value.Any()) - { - throw new ArgumentException(Resources.Error_Cannot_Construct_PipingSoilProfile_Without_Layers); - } - if (value.Any(l => l.Top < Bottom)) - { - throw new ArgumentException(Resources.PipingSoilProfile_Layers_Layer_top_below_profile_bottom); - } + ValidateLayersCollection(value); layers = value.OrderByDescending(l => l.Top).ToArray(); } } /// + /// Validates the given . A valid has layers which + /// all have values for which are greater than or equal to . + /// + /// The collection of to validate. + /// Thrown when is null. + /// Thrown when + /// + /// contains no layers + /// contains a layer with the less than + /// + /// + private void ValidateLayersCollection(IEnumerable collection) + { + if (collection == null) + { + throw new ArgumentNullException(@"collection", string.Format(Resources.Error_Cannot_Construct_PipingSoilProfile_Without_Layers)); + } + if (!collection.Any()) + { + throw new ArgumentException(Resources.Error_Cannot_Construct_PipingSoilProfile_Without_Layers); + } + if (collection.Any(l => l.Top < Bottom)) + { + throw new ArgumentException(Resources.PipingSoilProfile_Layers_Layer_top_below_profile_bottom); + } + } + + /// /// Gets the thickness of the given layer in the . /// Thickness of a layer is determined by its top and the top of the layer below it. /// Index: Ringtoets/Piping/src/Ringtoets.Piping.Forms/Extensions/PipingInputExtensions.cs =================================================================== diff -u -rdc2b06cb5a46cf2508d28fe9a6f8dcaa710346a7 -r935ddb05bb15494732dea93d6c67a40bb318fb85 --- Ringtoets/Piping/src/Ringtoets.Piping.Forms/Extensions/PipingInputExtensions.cs (.../PipingInputExtensions.cs) (revision dc2b06cb5a46cf2508d28fe9a6f8dcaa710346a7) +++ Ringtoets/Piping/src/Ringtoets.Piping.Forms/Extensions/PipingInputExtensions.cs (.../PipingInputExtensions.cs) (revision 935ddb05bb15494732dea93d6c67a40bb318fb85) @@ -1,5 +1,6 @@ using System; using System.Linq; +using Core.Common.Base.Geometry; using log4net; using Ringtoets.Piping.Calculation; using Ringtoets.Piping.Data; @@ -70,52 +71,111 @@ private static void UpdateThicknessAquiferLayer(this PipingInput input) { - var soilProfile = input.SoilProfile; - if (soilProfile != null && input.SurfaceLine != null && !double.IsNaN(input.ExitPointL)) + PipingSoilProfile soilProfile = input.SoilProfile; + RingtoetsPipingSurfaceLine surfaceLine = input.SurfaceLine; + double exitPointL = input.ExitPointL; + + double thicknessTopAquiferLayer = GetThicknessTopAquiferLayer(soilProfile, surfaceLine, exitPointL); + TrySetThicknessAquiferLayerMean(input, thicknessTopAquiferLayer); + + if (double.IsNaN(input.ThicknessAquiferLayer.Mean)) { - var aquiferLayersBelowSurfaceLine = soilProfile.Layers.Where(l => l.IsAquifer && l.Top <= input.SurfaceLine.GetZAtL(input.ExitPointL)).ToArray(); - if (aquiferLayersBelowSurfaceLine.Any()) + logger.Warn(Resources.PipingInputExtensions_UpdateThicknessAquiferLayer_Cannot_determine_thickness_aquifer_layer); + } + } + + private static double GetThicknessTopAquiferLayer(PipingSoilProfile soilProfile, RingtoetsPipingSurfaceLine surfaceLine, double exitPointL) + { + var thicknessTopAquiferLayer = double.NaN; + + if (soilProfile != null && surfaceLine != null && !double.IsNaN(exitPointL)) + { + thicknessTopAquiferLayer = GetTopAquiferLayerThicknessBelowSurfaceLine(soilProfile, surfaceLine, exitPointL); + } + + return thicknessTopAquiferLayer; + } + + private static void TrySetThicknessAquiferLayerMean(PipingInput input, double thicknessTopAquiferLayer) + { + try + { + input.ThicknessAquiferLayer.Mean = thicknessTopAquiferLayer; + } + catch (ArgumentOutOfRangeException) + { + input.ThicknessAquiferLayer.Mean = double.NaN; + } + } + + private static double GetTopAquiferLayerThicknessBelowSurfaceLine(PipingSoilProfile profile, RingtoetsPipingSurfaceLine surfaceLine, double atL) + { + double surfaceLineTop = surfaceLine.GetZAtL(atL); + PipingSoilLayer[] layers = profile.Layers.ToArray(); + PipingSoilLayer topAquiferLayer = null; + var thickness = double.NaN; + + var i = layers.Length - 1; + + while (i >= 0) + { + PipingSoilLayer pipingSoilLayer = layers.ElementAt(i); + if (pipingSoilLayer.Top < surfaceLineTop && topAquiferLayer != null) { - try - { - input.ThicknessAquiferLayer.Mean = soilProfile.GetLayerThickness(aquiferLayersBelowSurfaceLine.First()); - return; - } - catch (ArgumentOutOfRangeException) - { - // error handling performed after try-catch - } + break; } + if (pipingSoilLayer.IsAquifer) + { + topAquiferLayer = pipingSoilLayer; + } + i--; } - logger.Warn(Resources.PipingInputExtensions_UpdateThicknessAquiferLayer_Cannot_determine_thickness_aquifer_layer); - input.ThicknessAquiferLayer.Mean = double.NaN; + + if (topAquiferLayer != null) + { + thickness = profile.GetLayerThickness(topAquiferLayer); + thickness -= Math.Max(0, topAquiferLayer.Top - surfaceLineTop); + } + return thickness; } private static void UpdateThicknessCoverageLayer(this PipingInput input) { - if (input.SurfaceLine != null && input.SoilProfile != null) + double derivedThickness = GetThicknessCoverageLayer(input); + TrySetThicknessCoverageLayer(input, derivedThickness); + + if (double.IsNaN(input.ThicknessCoverageLayer.Mean)) { + logger.Warn(Resources.PipingInputExtensions_UpdateThicknessCoverageLayer_Cannot_determine_thickness_coverage_layer); + } + } + + private static double GetThicknessCoverageLayer(PipingInput input) + { + if (input.SurfaceLine != null && input.SoilProfile != null && !double.IsNaN(input.ExitPointL)) + { try { - double derivedThickness = PipingCalculationService.CalculateThicknessCoverageLayer(input); - if (!double.IsNaN(derivedThickness)) - { - input.ThicknessCoverageLayer.Mean = derivedThickness; - return; - } + return PipingCalculationService.CalculateThicknessCoverageLayer(input); } - catch (ArgumentOutOfRangeException) - { - // error handling performed after try-catch - } catch (PipingCalculatorException) { - // error handling performed after try-catch + return double.NaN; } } + return double.NaN; + } - logger.Warn(Resources.PipingInputExtensions_UpdateThicknessCoverageLayer_Cannot_determine_thickness_coverage_layer); - input.ThicknessCoverageLayer.Mean = double.NaN; + private static void TrySetThicknessCoverageLayer(PipingInput input, double derivedThickness) + { + try + { + input.ThicknessCoverageLayer.Mean = derivedThickness; + } + catch (ArgumentOutOfRangeException) + { + input.ThicknessCoverageLayer.Mean = Double.NaN; + } } private static void UpdateValuesBasedOnSurfaceLine(this PipingInput input) @@ -127,20 +187,20 @@ } else { - var entryPointIndex = Array.IndexOf(input.SurfaceLine.Points, input.SurfaceLine.DikeToeAtRiver); - var exitPointIndex = Array.IndexOf(input.SurfaceLine.Points, input.SurfaceLine.DikeToeAtPolder); + int entryPointIndex = Array.IndexOf(input.SurfaceLine.Points, input.SurfaceLine.DikeToeAtRiver); + int exitPointIndex = Array.IndexOf(input.SurfaceLine.Points, input.SurfaceLine.DikeToeAtPolder); - var localGeometry = input.SurfaceLine.ProjectGeometryToLZ().ToArray(); + Point2D[] localGeometry = input.SurfaceLine.ProjectGeometryToLZ().ToArray(); - var tempEntryPointL = localGeometry[0].X; - var tempExitPointL = localGeometry[localGeometry.Length - 1].X; + double tempEntryPointL = localGeometry[0].X; + double tempExitPointL = localGeometry[localGeometry.Length - 1].X; - var differentPoints = entryPointIndex < 0 || exitPointIndex < 0 || entryPointIndex < exitPointIndex; - if (differentPoints && exitPointIndex > 0) + bool isDifferentPoints = entryPointIndex < 0 || exitPointIndex < 0 || entryPointIndex < exitPointIndex; + if (isDifferentPoints && exitPointIndex > 0) { tempExitPointL = localGeometry.ElementAt(exitPointIndex).X; } - if (differentPoints && entryPointIndex > -1) + if (isDifferentPoints && entryPointIndex > -1) { tempEntryPointL = localGeometry.ElementAt(entryPointIndex).X; } Index: Ringtoets/Piping/test/Ringtoets.Piping.Forms.Test/Extensions/PipingInputExtensionsTest.cs =================================================================== diff -u -rdc2b06cb5a46cf2508d28fe9a6f8dcaa710346a7 -r935ddb05bb15494732dea93d6c67a40bb318fb85 --- Ringtoets/Piping/test/Ringtoets.Piping.Forms.Test/Extensions/PipingInputExtensionsTest.cs (.../PipingInputExtensionsTest.cs) (revision dc2b06cb5a46cf2508d28fe9a6f8dcaa710346a7) +++ Ringtoets/Piping/test/Ringtoets.Piping.Forms.Test/Extensions/PipingInputExtensionsTest.cs (.../PipingInputExtensionsTest.cs) (revision 935ddb05bb15494732dea93d6c67a40bb318fb85) @@ -11,6 +11,7 @@ [TestFixture] public class PipingInputExtensionsTest { + [Test] public void SetSurfaceLine_WithDikeToeDikeSideAndDikeToeRiverSide_SetsExitPointLAndSeePageLength() { @@ -184,6 +185,27 @@ } [Test] + public void SetEntryPointL_SetResultInInvalidSeePage_SeepageSetToNaN() + { + // Setup + var surfaceLine = ValidSurfaceLine(0.0, 4.0); + + var l = 2.0; + var input = new PipingInput(new GeneralPipingInput()) + { + SurfaceLine = surfaceLine, + ExitPointL = l + }; + + // Call + input.SetEntryPointL(l); + + // Assert + Assert.IsNaN(input.SeepageLength.Mean); + Assert.IsNaN(input.SeepageLength.StandardDeviation); + } + + [Test] [TestCase(0)] [TestCase(-1e-6)] [TestCase(-6)] @@ -222,61 +244,106 @@ } [Test] - public void SetEntryPointL_SetResultInInvalidSeePage_SeepageSetToNaN() + public void SetExitPointL_SetResultInInvalidSeePage_SeePageSetToNaN() { // Setup - var surfaceLine = ValidSurfaceLine(0.0, 4.0); + var exitPointOld = 4.0; + var surfaceLine = ValidSurfaceLine(0.0, exitPointOld); + var input = new PipingInput(new GeneralPipingInput()); + input.SetSurfaceLine(surfaceLine); + var entryPointL = 1.0; + input.SetEntryPointL(entryPointL); - var l = 2.0; - var input = new PipingInput(new GeneralPipingInput()) - { - SurfaceLine = surfaceLine, - ExitPointL = l - }; - // Call - input.SetEntryPointL(l); + input.SetExitPointL(entryPointL); // Assert Assert.IsNaN(input.SeepageLength.Mean); Assert.IsNaN(input.SeepageLength.StandardDeviation); } [Test] - public void SetExitPointL_SetResultInInvalidSeePage_SeePageSetToNaN() + public void SetSurfaceLine_InputWithoutEntryPointL_EntryPointLAtStartOfSurfaceLine() { // Setup - var exitPointOld = 4.0; - var surfaceLine = ValidSurfaceLine(0.0, exitPointOld); - var input = new PipingInput(new GeneralPipingInput()); - input.SetSurfaceLine(surfaceLine); - var entryPointL = 1.0; - input.SetEntryPointL(entryPointL); + var input = CreateInputWithAquiferAndCoverageLayer(); + input.EntryPointL = double.NaN; // Call - input.SetExitPointL(entryPointL); + input.SetSurfaceLine(input.SurfaceLine); // Assert - Assert.IsNaN(input.SeepageLength.Mean); - Assert.IsNaN(input.SeepageLength.StandardDeviation); + Assert.AreEqual(0.0, input.EntryPointL); } + #region thickness of the coverage layer + [Test] - [TestCase(0)] - [TestCase(1)] - [TestCase(2)] - public void ThicknessCoverageLayer_WithMissingInput_ThicknessSetToNaNAndLog(int inputIndexMissing) + public void SetExitPointL_CompleteInput_ThicknessUpdated() { // Setup - var surfaceLine = new RingtoetsPipingSurfaceLine(); - surfaceLine.SetGeometry(new[] + var input = CreateInputWithAquiferAndCoverageLayer(); + + // Call + input.SetExitPointL(input.ExitPointL); + + // Assert + var thickness = input.ThicknessCoverageLayer.Mean; + Assert.AreEqual(1.0, thickness); + } + + [Test] + public void SetExitPointL_InputWithoutSurfaceLine_ThicknessCoverageLayerNaNAndLog() + { + // Setup + var input = CreateInputWithAquiferAndCoverageLayer(); + input.SurfaceLine = null; + + // Call + Action call = () => input.SetExitPointL(0.5); + + // Assert + TestHelper.AssertLogMessageIsGenerated(call, Resources.PipingInputExtensions_UpdateThicknessCoverageLayer_Cannot_determine_thickness_coverage_layer); + Assert.IsNaN(input.ThicknessCoverageLayer.Mean); + } + + [Test] + public void SetExitPointL_InputWithoutSoilProfile_ThicknessCoverageLayerNaNAndLog() + { + // Setup + var input = CreateInputWithAquiferAndCoverageLayer(); + input.SoilProfile = null; + + // Call + Action call = () => input.SetExitPointL(0.5); + + // Assert + TestHelper.AssertLogMessageIsGenerated(call, Resources.PipingInputExtensions_UpdateThicknessCoverageLayer_Cannot_determine_thickness_coverage_layer); + Assert.IsNaN(input.ThicknessCoverageLayer.Mean); + } + + [Test] + public void SetExitPointL_MeanSetExitPointSetToNaN_ThicknessCoverageLayerNaNAndLog() + { + // Setup + var input = CreateInputWithAquiferAndCoverageLayer(true); + + // Call + Action call = () => input.SetExitPointL(double.NaN); + + // Assert + TestHelper.AssertLogMessageIsGenerated(call, Resources.PipingInputExtensions_UpdateThicknessCoverageLayer_Cannot_determine_thickness_coverage_layer); + Assert.IsNaN(input.ThicknessCoverageLayer.Mean); + } + + [Test] + public void SetExitPointL_AquiferLayerThicknessZero_ThicknessCoverageLayerNaNAndLog() + { + // Setup + var input = CreateInputWithAquiferAndCoverageLayer(); + input.SoilProfile = new PipingSoilProfile(String.Empty, 0, new[] { - new Point3D(0,0,2.0), - new Point3D(1.0,0,2.0), - }); - var soilProfile = new PipingSoilProfile(String.Empty, 0, new[] - { - new PipingSoilLayer(1.0) + new PipingSoilLayer(2.0) { IsAquifer = true }, @@ -285,74 +352,103 @@ IsAquifer = false } }); - var input = new PipingInput(new GeneralPipingInput()); // Call - Action call = null; - if (inputIndexMissing != 0) - { - call = () => input.SetSurfaceLine(surfaceLine); - } - if (inputIndexMissing != 1) - { - call = () => input.SetSoilProfile(soilProfile); - } - if (inputIndexMissing != 2) - { - call = () => input.SetExitPointL(0.5); - } - + Action call = () => input.SetExitPointL(input.ExitPointL); + // Assert TestHelper.AssertLogMessageIsGenerated(call, Resources.PipingInputExtensions_UpdateThicknessCoverageLayer_Cannot_determine_thickness_coverage_layer); Assert.IsNaN(input.ThicknessCoverageLayer.Mean); } [Test] - public void ThicknessCoverageLayer_InputCausesPipingCalculatorException_ThicknessSetToNaNAndLog() + public void SetExitPointL_ProfileWithoutAquiferLayer_ThicknessCoverageLayerNaNAndLog() { // Setup - var surfaceLine = new RingtoetsPipingSurfaceLine(); - surfaceLine.SetGeometry(new[] + var input = CreateInputWithAquiferAndCoverageLayer(); + input.SoilProfile = new PipingSoilProfile(String.Empty, 0, new[] { - new Point3D(0,0,2.0), - new Point3D(1.0,0,2.0), - }); - var soilProfile = new PipingSoilProfile(String.Empty, 0, new[] - { new PipingSoilLayer(2.0) { IsAquifer = false } }); - var input = new PipingInput(new GeneralPipingInput()) - { - SoilProfile = soilProfile - }; + // Call - Action call = () => input.SetSurfaceLine(surfaceLine); + Action call = () => input.SetExitPointL(input.ExitPointL); // Assert TestHelper.AssertLogMessageIsGenerated(call, Resources.PipingInputExtensions_UpdateThicknessCoverageLayer_Cannot_determine_thickness_coverage_layer); Assert.IsNaN(input.ThicknessCoverageLayer.Mean); } [Test] - [TestCase(0)] - [TestCase(1)] - [TestCase(2)] - public void ThicknessCoverageLayer_ChangeToMissingInput_ThicknessSetToNaNAndLog(int inputIndexMissing) + public void SetSurfaceLine_CompleteInput_ThicknessUpdated() { // Setup - var surfaceLine = new RingtoetsPipingSurfaceLine(); - surfaceLine.SetGeometry(new[] + var input = CreateInputWithAquiferAndCoverageLayer(); + + // Call + input.SetSurfaceLine(input.SurfaceLine); + + // Assert + var thickness = input.ThicknessCoverageLayer.Mean; + Assert.AreEqual(1.0, thickness); + } + + [Test] + public void SetSurfaceLine_InputWithoutExitPointL_ExitPointLAtEndOfSurfaceLineThicknessUpdated() + { + // Setup + var input = CreateInputWithAquiferAndCoverageLayer(); + input.ExitPointL = double.NaN; + + // Call + input.SetSurfaceLine(input.SurfaceLine); + + // Assert + Assert.AreEqual(1.0, input.ExitPointL); + Assert.AreEqual(1.0, input.ThicknessCoverageLayer.Mean); + } + + [Test] + public void SetSurfaceLine_InputWithoutSoilProfile_ThicknessCoverageLayerNaNAndLog() + { + // Setup + var input = CreateInputWithAquiferAndCoverageLayer(); + input.SoilProfile = null; + + // Call + Action call = () => input.SetSurfaceLine(input.SurfaceLine); + + // Assert + TestHelper.AssertLogMessageIsGenerated(call, Resources.PipingInputExtensions_UpdateThicknessCoverageLayer_Cannot_determine_thickness_coverage_layer); + Assert.IsNaN(input.ThicknessCoverageLayer.Mean); + } + + [Test] + public void SetSurfaceLine_MeanSetSurfacelineSetToNull_ThicknessCoverageLayerNaNAndLog() + { + // Setup + var input = CreateInputWithAquiferAndCoverageLayer(true); + + // Call + Action call = () => input.SetSurfaceLine(null); + + // Assert + TestHelper.AssertLogMessageIsGenerated(call, Resources.PipingInputExtensions_UpdateThicknessCoverageLayer_Cannot_determine_thickness_coverage_layer); + Assert.IsNaN(input.ThicknessCoverageLayer.Mean); + } + + [Test] + public void SetSurfaceLine_AquiferLayerThicknessZero_ThicknessCoverageLayerNaNAndLog() + { + // Setup + var input = CreateInputWithAquiferAndCoverageLayer(); + input.SoilProfile = new PipingSoilProfile(String.Empty, 0, new[] { - new Point3D(0,0,2.0), - new Point3D(1.0,0,2.0), - }); - var soilProfile = new PipingSoilProfile(String.Empty, 0, new[] - { - new PipingSoilLayer(1.0) + new PipingSoilLayer(2.0) { IsAquifer = true }, @@ -361,81 +457,102 @@ IsAquifer = false } }); - var input = new PipingInput(new GeneralPipingInput()); - input.SetSurfaceLine(surfaceLine); - input.SetSoilProfile(soilProfile); // Call - Action call = null; - if (inputIndexMissing == 0) - { - call = () => input.SetSurfaceLine(null); - } - if (inputIndexMissing == 1) - { - call = () => input.SetSoilProfile(null); - } - if (inputIndexMissing == 2) - { - call = () => input.SetExitPointL(double.NaN); - } + Action call = () => input.SetSurfaceLine(input.SurfaceLine); // Assert TestHelper.AssertLogMessageIsGenerated(call, Resources.PipingInputExtensions_UpdateThicknessCoverageLayer_Cannot_determine_thickness_coverage_layer); Assert.IsNaN(input.ThicknessCoverageLayer.Mean); } [Test] - public void ThicknessCoverageLayer_InputResultsInZeroThickness_ThicknessSetToNaNAndLog() + public void SetSurfaceLine_ProfileWithoutAquiferLayer_ThicknessCoverageLayerNaNAndLog() { // Setup - var surfaceLine = new RingtoetsPipingSurfaceLine(); - surfaceLine.SetGeometry(new[] + var input = CreateInputWithAquiferAndCoverageLayer(); + input.SoilProfile = new PipingSoilProfile(String.Empty, 0, new[] { - new Point3D(0,0,2.0), - new Point3D(1.0,0,2.0), - }); - var soilProfile = new PipingSoilProfile(String.Empty, 0, new[] - { new PipingSoilLayer(2.0) { - IsAquifer = true - }, - new PipingSoilLayer(2.0) - { IsAquifer = false } }); - var input = new PipingInput(new GeneralPipingInput()); + // Call + Action call = () => input.SetSurfaceLine(input.SurfaceLine); - input.SetSurfaceLine(surfaceLine); - input.SetExitPointL(0.5); + // Assert + TestHelper.AssertLogMessageIsGenerated(call, Resources.PipingInputExtensions_UpdateThicknessCoverageLayer_Cannot_determine_thickness_coverage_layer); + Assert.IsNaN(input.ThicknessCoverageLayer.Mean); + } + [Test] + public void SetSoilProfile_CompleteInput_ThicknessCoverageLayerUpdated() + { + // Setup + var input = CreateInputWithAquiferAndCoverageLayer(); + // Call - input.SetSoilProfile(soilProfile); + input.SetSoilProfile(input.SoilProfile); + // Assert + var thickness = input.ThicknessCoverageLayer.Mean; + Assert.AreEqual(1.0, thickness); + } + + [Test] + public void SetSoilProfile_InputWithoutSurfaceLine_ThicknessCoverageLayerNaNAndLog() + { + // Setup + var input = CreateInputWithAquiferAndCoverageLayer(); + input.SurfaceLine = null; + // Call - Action call = () => input.SetSoilProfile(soilProfile); + Action call = () => input.SetSoilProfile(input.SoilProfile); // Assert TestHelper.AssertLogMessageIsGenerated(call, Resources.PipingInputExtensions_UpdateThicknessCoverageLayer_Cannot_determine_thickness_coverage_layer); Assert.IsNaN(input.ThicknessCoverageLayer.Mean); } [Test] - public void SetSurfaceLine_WithSoilProfileAndExitPointL_ThicknessUpdated() + public void SetSoilProfile_InputWithoutExitPointL_ThicknessCoverageLayerNaNAndLog() { // Setup - var surfaceLine = new RingtoetsPipingSurfaceLine(); - surfaceLine.SetGeometry(new[] + var input = CreateInputWithAquiferAndCoverageLayer(); + input.ExitPointL = double.NaN; + + // Call + Action call = () => input.SetSoilProfile(input.SoilProfile); + + // Assert + TestHelper.AssertLogMessageIsGenerated(call, Resources.PipingInputExtensions_UpdateThicknessCoverageLayer_Cannot_determine_thickness_coverage_layer); + Assert.IsNaN(input.ThicknessCoverageLayer.Mean); + } + + [Test] + public void SetSoilProfile_MeanSetSoilProfileSetToNull_ThicknessCoverageLayerNaNAndLog() + { + // Setup + var input = CreateInputWithAquiferAndCoverageLayer(true); + + // Call + Action call = () => input.SetSoilProfile(null); + + // Assert + TestHelper.AssertLogMessageIsGenerated(call, Resources.PipingInputExtensions_UpdateThicknessCoverageLayer_Cannot_determine_thickness_coverage_layer); + Assert.IsNaN(input.ThicknessCoverageLayer.Mean); + } + + [Test] + public void SetSoilProfile_AquiferLayerThicknessZero_ThicknessCoverageLayerNaNAndLog() + { + // Setup + var input = CreateInputWithAquiferAndCoverageLayer(); + input.SoilProfile = new PipingSoilProfile(String.Empty, 0, new[] { - new Point3D(0,0,2.0), - new Point3D(1.0,0,2.0), - }); - var soilProfile = new PipingSoilProfile(String.Empty, 0, new[] - { - new PipingSoilLayer(1.0) + new PipingSoilLayer(2.0) { IsAquifer = true }, @@ -444,81 +561,135 @@ IsAquifer = false } }); - var input = new PipingInput(new GeneralPipingInput()) - { - SoilProfile = soilProfile, - ExitPointL = 0.5 - }; - var previousResult = input.ThicknessCoverageLayer.Mean; - - input.SetSurfaceLine(surfaceLine); - // Call - var result = input.ThicknessCoverageLayer.Mean; + Action call = () => input.SetSoilProfile(input.SoilProfile); // Assert - Assert.AreSame(surfaceLine, input.SurfaceLine); - Assert.AreNotEqual(previousResult, result); - Assert.AreEqual(1.0, result); + TestHelper.AssertLogMessageIsGenerated(call, Resources.PipingInputExtensions_UpdateThicknessCoverageLayer_Cannot_determine_thickness_coverage_layer); + Assert.IsNaN(input.ThicknessCoverageLayer.Mean); } [Test] - public void SetSoilProfile_WithSurfaceLineAndExitPointL_CoverageThicknessUpdated() + public void SetSoilProfile_ProfileWithoutAquiferLayer_ThicknessCoverageLayerNaNAndLog() { // Setup - var surfaceLine = new RingtoetsPipingSurfaceLine(); - surfaceLine.SetGeometry(new [] + var input = CreateInputWithAquiferAndCoverageLayer(); + input.SoilProfile = new PipingSoilProfile(String.Empty, 0, new[] { - new Point3D(0,0,2.0), - new Point3D(1.0,0,2.0), - }); - var soilProfile = new PipingSoilProfile(String.Empty, 0, new[] - { - new PipingSoilLayer(1.0) - { - IsAquifer = true - }, new PipingSoilLayer(2.0) { IsAquifer = false } }); - var input = new PipingInput(new GeneralPipingInput()) - { - SurfaceLine = surfaceLine, - ExitPointL = 0.5 - }; - var previousResult = input.ThicknessCoverageLayer.Mean; + // Call + Action call = () => input.SetSoilProfile(input.SoilProfile); - input.SetSoilProfile(soilProfile); + // Assert + TestHelper.AssertLogMessageIsGenerated(call, Resources.PipingInputExtensions_UpdateThicknessCoverageLayer_Cannot_determine_thickness_coverage_layer); + Assert.IsNaN(input.ThicknessCoverageLayer.Mean); + } + #endregion + + #region thickness of the aquifer layer + + [Test] + public void SetExitPointL_SoilProfileSingleAquiferUnderSurfaceLine_ThicknessAquiferLayerMeanSet() + { + // Setup + var input = CreateInputWithAquiferAndCoverageLayer(); + // Call - var result = input.ThicknessCoverageLayer.Mean; + input.SetExitPointL(input.ExitPointL); // Assert - Assert.AreSame(soilProfile, input.SoilProfile); - Assert.AreNotEqual(previousResult, result); - Assert.AreEqual(1.0, result); + Assert.AreEqual(1.0, input.ThicknessAquiferLayer.Mean); } [Test] - [TestCase(0)] + public void SetExitPointL_WithoutSoilProfile_ThicknessAquiferLayerNaNAndLog() + { + // Setup + var input = CreateInputWithAquiferAndCoverageLayer(); + input.SoilProfile = null; + + // Call + Action call = () => input.SetExitPointL(input.ExitPointL); + + // Assert + TestHelper.AssertLogMessageIsGenerated(call, Resources.PipingInputExtensions_UpdateThicknessCoverageLayer_Cannot_determine_thickness_coverage_layer); + Assert.IsNaN(input.ThicknessAquiferLayer.Mean); + } + + [Test] + public void SetExitPointL_WithoutSurfaceLine_ThicknessAquiferLayerNaNAndLog() + { + // Setup + var input = CreateInputWithAquiferAndCoverageLayer(); + input.SurfaceLine = null; + + // Call + Action call = () => input.SetExitPointL(input.ExitPointL); + + // Assert + TestHelper.AssertLogMessageIsGenerated(call, Resources.PipingInputExtensions_UpdateThicknessCoverageLayer_Cannot_determine_thickness_coverage_layer); + Assert.IsNaN(input.ThicknessAquiferLayer.Mean); + } + + [Test] + [TestCase(1e-6)] [TestCase(1)] - [TestCase(2)] - public void ThicknessAquiferLayer_WithMissingInput_ThicknessSetToNaNAndLog(int inputIndexMissing) + public void SetExitPointL_SoilProfileSingleAquiferAboveSurfaceLine_ThicknessAquiferLayerNaNAndLog(double deltaAboveSurfaceLine) { // Setup - var surfaceLine = new RingtoetsPipingSurfaceLine(); - surfaceLine.SetGeometry(new[] + var input = CreateInputWithSingleAquiferLayerAboveSurfaceLine(deltaAboveSurfaceLine); + + // Call + Action call = () => input.SetExitPointL(input.ExitPointL); + + // Assert + TestHelper.AssertLogMessageIsGenerated(call, Resources.PipingInputExtensions_UpdateThicknessCoverageLayer_Cannot_determine_thickness_coverage_layer); + Assert.IsNaN(input.ThicknessAquiferLayer.Mean); + } + + [Test] + public void SetExitPointL_SoilProfileMultipleAquiferUnderSurfaceLine_MeanSetToTopAquiferThickness() + { + // Setup + double expectedThickness; + var input = CreateInputWithMultipleAquiferLayersUnderSurfaceLine(out expectedThickness); + + // Call + input.SetExitPointL(input.ExitPointL); + + // Assert + Assert.AreEqual(expectedThickness, input.ThicknessAquiferLayer.Mean); + } + + [Test] + public void SetExitPointL_MeanSetExitPointSetToNaN_ThicknessAquiferLayerNaNAndLog() + { + // Setup + var input = CreateInputWithAquiferAndCoverageLayer(true); + + // Call + Action call = () => input.SetExitPointL(double.NaN); + + // Assert + TestHelper.AssertLogMessageIsGenerated(call, "Kan de dikte van het watervoerend pakket niet afleiden op basis van de invoer."); + Assert.IsNaN(input.ThicknessAquiferLayer.Mean); + } + + [Test] + public void SetExitPointL_InputResultsInZeroThickness_ThicknessAquiferLayerNaNAndLog() + { + // Setup + var input = CreateInputWithAquiferAndCoverageLayer(); + input.SoilProfile = new PipingSoilProfile(String.Empty, 0, new[] { - new Point3D(0,0,2.0), - new Point3D(1.0,0,2.0), - }); - var soilProfile = new PipingSoilProfile(String.Empty, 0, new[] - { - new PipingSoilLayer(1.0) + new PipingSoilLayer(0.0) { IsAquifer = true }, @@ -527,165 +698,270 @@ IsAquifer = false } }); - var input = new PipingInput(new GeneralPipingInput()); // Call - Action call = null; - if (inputIndexMissing != 0) - { - call = () => input.SetSurfaceLine(surfaceLine); - } - if (inputIndexMissing != 1) - { - call = () => input.SetSoilProfile(soilProfile); - } - if (inputIndexMissing != 2) - { - call = () => input.SetExitPointL(0.5); - } + Action call = () => input.SetExitPointL(input.ExitPointL); // Assert - TestHelper.AssertLogMessageIsGenerated(call, Resources.PipingInputExtensions_UpdateThicknessCoverageLayer_Cannot_determine_thickness_coverage_layer); + TestHelper.AssertLogMessageIsGenerated(call, Resources.PipingInputExtensions_UpdateThicknessAquiferLayer_Cannot_determine_thickness_aquifer_layer); Assert.IsNaN(input.ThicknessAquiferLayer.Mean); } [Test] - public void ThicknessAquiferLayer_SoilProfileSingleAquiferUnderSurfaceLine_MeanSet() + public void SetExitPointL_SurfaceLineHalfWayProfileLayer_ThicknessSetToLayerHeightUnderSurfaceLine() { // Setup - var surfaceLine = new RingtoetsPipingSurfaceLine(); - surfaceLine.SetGeometry(new[] + var input = CreateInputWithAquiferAndCoverageLayer(); + input.SoilProfile = new PipingSoilProfile(String.Empty, 0, new[] { - new Point3D(0,0,2.0), - new Point3D(1.0,0,2.0), - }); - var soilProfile = new PipingSoilProfile(String.Empty, 0, new[] - { - new PipingSoilLayer(1.0) + new PipingSoilLayer(1.5) { IsAquifer = true }, - new PipingSoilLayer(2.0) + new PipingSoilLayer(2.5) { - IsAquifer = false + IsAquifer = true } }); - var input = new PipingInput(new GeneralPipingInput()) - { - SurfaceLine = surfaceLine, - ExitPointL = 0.5 - }; - input.SetSoilProfile(soilProfile); + // Call + input.SetExitPointL(input.ExitPointL); + // Assert + Assert.AreEqual(0.5, input.ThicknessAquiferLayer.Mean); + } + + [Test] + public void SetSurfaceLine_SoilProfileSingleAquiferUnderSurfaceLine_ThicknessAquiferLayerMeanSet() + { + // Setup + var input = CreateInputWithAquiferAndCoverageLayer(); + // Call - var result = input.ThicknessAquiferLayer.Mean; + input.SetSurfaceLine(input.SurfaceLine); // Assert - Assert.AreSame(soilProfile, input.SoilProfile); - Assert.AreEqual(1.0, result); + Assert.AreEqual(1.0, input.ThicknessAquiferLayer.Mean); } [Test] + public void SetSurfaceLine_WithExitPointLSetToNaN_ExitPointLAtEndOfSurfaceLineAndThicknessUpdated() + { + // Setup + var input = CreateInputWithAquiferAndCoverageLayer(); + input.ExitPointL = double.NaN; + + // Call + input.SetSurfaceLine(input.SurfaceLine); + + // Assert + Assert.AreEqual(1.0, input.ExitPointL); + Assert.AreEqual(1.0, input.ThicknessAquiferLayer.Mean); + } + + [Test] + public void SetSurfaceLine_WithoutSoilProfile_ThicknessAquiferLayerNaNAndLog() + { + // Setup + var input = CreateInputWithAquiferAndCoverageLayer(); + input.SoilProfile = null; + + // Call + Action call = () => input.SetSurfaceLine(input.SurfaceLine); + + // Assert + TestHelper.AssertLogMessageIsGenerated(call, Resources.PipingInputExtensions_UpdateThicknessCoverageLayer_Cannot_determine_thickness_coverage_layer); + Assert.IsNaN(input.ThicknessAquiferLayer.Mean); + } + + [Test] [TestCase(1e-6)] [TestCase(1)] - public void ThicknessAquiferLayer_SoilProfileSingleAquiferAboveSurfaceLine_MeanSetToNaN(double deltaAboveSurfaceLine) + public void SetSurfaceLine_SoilProfileSingleAquiferAboveSurfaceLine_ThicknessAquiferLayerNaNAndLog(double deltaAboveSurfaceLine) { // Setup - var surfaceLine = new RingtoetsPipingSurfaceLine(); - var surfaceLineTopLevel = 2.0; - surfaceLine.SetGeometry(new[] + var input = CreateInputWithSingleAquiferLayerAboveSurfaceLine(deltaAboveSurfaceLine); + + // Call + Action call = () => input.SetSurfaceLine(input.SurfaceLine); + + // Assert + TestHelper.AssertLogMessageIsGenerated(call, Resources.PipingInputExtensions_UpdateThicknessCoverageLayer_Cannot_determine_thickness_coverage_layer); + Assert.IsNaN(input.ThicknessAquiferLayer.Mean); + } + + [Test] + public void SetSurfaceLine_SoilProfileMultipleAquiferUnderSurfaceLine_MeanSetToTopAquiferThickness() + { + // Setup + double expectedThickness; + var input = CreateInputWithMultipleAquiferLayersUnderSurfaceLine(out expectedThickness); + + // Call + input.SetSurfaceLine(input.SurfaceLine); + + // Assert + Assert.AreEqual(expectedThickness, input.ThicknessAquiferLayer.Mean); + } + + [Test] + public void SetSurfaceLine_MeanSetSurfaceLineSetToNull_ThicknessAquiferLayerNaNAndLog() + { + // Setup + var input = CreateInputWithAquiferAndCoverageLayer(true); + + // Call + Action call = () => input.SetSurfaceLine(null); + + // Assert + TestHelper.AssertLogMessageIsGenerated(call, "Kan de dikte van het watervoerend pakket niet afleiden op basis van de invoer."); + Assert.IsNaN(input.ThicknessAquiferLayer.Mean); + } + + [Test] + public void SetSurfaceLine_InputResultsInZeroThickness_ThicknessAquiferLayerNaNAndLog() + { + // Setup + var input = CreateInputWithAquiferAndCoverageLayer(); + input.SoilProfile = new PipingSoilProfile(String.Empty, 0, new[] { - new Point3D(0,0,surfaceLineTopLevel), - new Point3D(1.0,0,surfaceLineTopLevel), - }); - var soilProfile = new PipingSoilProfile(String.Empty, 0, new[] - { - new PipingSoilLayer(surfaceLineTopLevel + deltaAboveSurfaceLine) + new PipingSoilLayer(0.0) { - IsAquifer = false + IsAquifer = true }, - new PipingSoilLayer(surfaceLineTopLevel + deltaAboveSurfaceLine + 1) + new PipingSoilLayer(2.0) { - IsAquifer = true + IsAquifer = false } }); - var input = new PipingInput(new GeneralPipingInput()) - { - SurfaceLine = surfaceLine, - ExitPointL = 0.5 - }; - input.SetSoilProfile(soilProfile); - // Call - var result = input.ThicknessAquiferLayer.Mean; + Action call = () => input.SetSurfaceLine(input.SurfaceLine); // Assert - Assert.AreSame(soilProfile, input.SoilProfile); - Assert.IsNaN(result); + TestHelper.AssertLogMessageIsGenerated(call, Resources.PipingInputExtensions_UpdateThicknessAquiferLayer_Cannot_determine_thickness_aquifer_layer); + Assert.IsNaN(input.ThicknessAquiferLayer.Mean); } [Test] - public void ThicknessAquiferLayer_SoilProfileMultipleAquiferUnderSurfaceLine_MeanSetToTopAquiferThickness() + public void SetSurfaceLine_SurfaceLineHalfWayProfileLayer_ThicknessSetToLayerHeightUnderSurfaceLine() { // Setup - var surfaceLine = new RingtoetsPipingSurfaceLine(); - var firstAquiferThickness = 1.1; - var secondAquiferThickness = 2.2; - var totalAquiferThickness = firstAquiferThickness + secondAquiferThickness; - surfaceLine.SetGeometry(new[] + var input = CreateInputWithAquiferAndCoverageLayer(); + input.SoilProfile = new PipingSoilProfile(String.Empty, 0, new[] { - new Point3D(0,0,totalAquiferThickness), - new Point3D(1.0,0,totalAquiferThickness), - }); - var soilProfile = new PipingSoilProfile(String.Empty, 0, new[] - { - new PipingSoilLayer(firstAquiferThickness) + new PipingSoilLayer(1.5) { IsAquifer = true }, - new PipingSoilLayer(firstAquiferThickness + secondAquiferThickness) + new PipingSoilLayer(2.5) { IsAquifer = true - }, - new PipingSoilLayer(totalAquiferThickness + 1) - { - IsAquifer = false } }); - var input = new PipingInput(new GeneralPipingInput()) - { - SurfaceLine = surfaceLine, - ExitPointL = 0.5 - }; - input.SetSoilProfile(soilProfile); + // Call + input.SetSurfaceLine(input.SurfaceLine); + // Assert + Assert.AreEqual(0.5, input.ThicknessAquiferLayer.Mean); + } + + [Test] + public void SetSoilProfile_SoilProfileSingleAquiferUnderSurfaceLine_ThicknessAquiferLayerMeanSet() + { + // Setup + var input = CreateInputWithAquiferAndCoverageLayer(); + // Call - var result = input.ThicknessAquiferLayer.Mean; + input.SetSoilProfile(input.SoilProfile); // Assert - Assert.AreSame(soilProfile, input.SoilProfile); - Assert.AreEqual(secondAquiferThickness, result); + Assert.AreEqual(1.0, input.ThicknessAquiferLayer.Mean); } [Test] - [TestCase(0)] + public void SetSoilProfile_WithExitPointLSetToNaN_ThicknessAquiferLayerNaNAndLog() + { + // Setup + var input = CreateInputWithAquiferAndCoverageLayer(); + input.ExitPointL = double.NaN; + + // Call + Action call = () => input.SetSoilProfile(input.SoilProfile); + + // Assert + TestHelper.AssertLogMessageIsGenerated(call, Resources.PipingInputExtensions_UpdateThicknessCoverageLayer_Cannot_determine_thickness_coverage_layer); + Assert.IsNaN(input.ThicknessAquiferLayer.Mean); + } + + [Test] + public void SetSoilProfile_WithoutSurfaceLine_ThicknessAquiferLayerNaNAndLog() + { + // Setup + var input = CreateInputWithAquiferAndCoverageLayer(); + input.SurfaceLine = null; + + // Call + Action call = () => input.SetSoilProfile(input.SoilProfile); + + // Assert + TestHelper.AssertLogMessageIsGenerated(call, Resources.PipingInputExtensions_UpdateThicknessCoverageLayer_Cannot_determine_thickness_coverage_layer); + Assert.IsNaN(input.ThicknessAquiferLayer.Mean); + } + + [Test] + [TestCase(1e-6)] [TestCase(1)] - [TestCase(2)] - public void ThicknessAquiferLayer_ChangeToMissingInput_ThicknessSetToNaNAndLog(int inputIndexMissing) + public void SetSoilProfile_SoilProfileSingleAquiferAboveSurfaceLine_ThicknessAquiferLayerNaNAndLog(double deltaAboveSurfaceLine) { // Setup - var surfaceLine = new RingtoetsPipingSurfaceLine(); - surfaceLine.SetGeometry(new[] + var input = CreateInputWithSingleAquiferLayerAboveSurfaceLine(deltaAboveSurfaceLine); + + // Call + Action call = () => input.SetSoilProfile(input.SoilProfile); + + // Assert + TestHelper.AssertLogMessageIsGenerated(call, Resources.PipingInputExtensions_UpdateThicknessCoverageLayer_Cannot_determine_thickness_coverage_layer); + Assert.IsNaN(input.ThicknessAquiferLayer.Mean); + } + + [Test] + public void SetSoilProfile_SoilProfileMultipleAquiferUnderSurfaceLine_MeanSetToTopAquiferThickness() + { + // Setup + double expectedThickness; + var input = CreateInputWithMultipleAquiferLayersUnderSurfaceLine(out expectedThickness); + + // Call + input.SetSoilProfile(input.SoilProfile); + + // Assert + Assert.AreEqual(expectedThickness, input.ThicknessAquiferLayer.Mean); + } + + [Test] + public void SetSoilProfile_MeanSetSoilProfileSetToNull_ThicknessAquiferLayerNaNAndLog() + { + // Setup + var input = CreateInputWithAquiferAndCoverageLayer(true); + + // Call + Action call = () => input.SetSoilProfile(null); + + // Assert + TestHelper.AssertLogMessageIsGenerated(call, "Kan de dikte van het watervoerend pakket niet afleiden op basis van de invoer."); + Assert.IsNaN(input.ThicknessAquiferLayer.Mean); + } + + [Test] + public void SetSoilProfile_InputResultsInZeroThickness_ThicknessAquiferLayerNaNAndLog() + { + // Setup + var input = CreateInputWithAquiferAndCoverageLayer(); + input.SoilProfile = new PipingSoilProfile(String.Empty, 0, new[] { - new Point3D(0,0,2.0), - new Point3D(1.0,0,2.0), - }); - var soilProfile = new PipingSoilProfile(String.Empty, 0, new[] - { - new PipingSoilLayer(1.0) + new PipingSoilLayer(0.0) { IsAquifer = true }, @@ -694,77 +970,61 @@ IsAquifer = false } }); - var input = new PipingInput(new GeneralPipingInput()); - input.SetSurfaceLine(surfaceLine); - input.SetSoilProfile(soilProfile); // Call - Action call = null; - if (inputIndexMissing == 0) - { - call = () => input.SetSurfaceLine(null); - } - if (inputIndexMissing == 1) - { - call = () => input.SetSoilProfile(null); - } - if (inputIndexMissing == 2) - { - call = () => input.SetExitPointL(double.NaN); - } + Action call = () => input.SetSoilProfile(input.SoilProfile); // Assert - TestHelper.AssertLogMessageIsGenerated(call, "Kan de dikte van het watervoerend pakket niet afleiden op basis van de invoer."); + TestHelper.AssertLogMessageIsGenerated(call, Resources.PipingInputExtensions_UpdateThicknessAquiferLayer_Cannot_determine_thickness_aquifer_layer); Assert.IsNaN(input.ThicknessAquiferLayer.Mean); } [Test] - public void ThicknessAquiferLayer_InputResultsInZeroThickness_ThicknessSetToNaNAndLog() + public void SetSoilProfile_SurfaceLineHalfWayProfileLayer_ThicknessSetToLayerHeightUnderSurfaceLine() { // Setup - var surfaceLine = new RingtoetsPipingSurfaceLine(); - surfaceLine.SetGeometry(new[] + var input = CreateInputWithAquiferAndCoverageLayer(); + input.SoilProfile = new PipingSoilProfile(String.Empty, 0, new[] { - new Point3D(0,0,2.0), - new Point3D(1.0,0,2.0), - }); - var soilProfile = new PipingSoilProfile(String.Empty, 0, new[] - { - new PipingSoilLayer(0.0) + new PipingSoilLayer(1.5) { IsAquifer = true }, - new PipingSoilLayer(2.0) + new PipingSoilLayer(2.5) { - IsAquifer = false + IsAquifer = true } }); - var input = new PipingInput(new GeneralPipingInput()); + // Call + input.SetSoilProfile(input.SoilProfile); - input.SetSurfaceLine(surfaceLine); - input.SetExitPointL(0.5); + // Assert + Assert.AreEqual(0.5, input.ThicknessAquiferLayer.Mean); + } - // Call - input.SetSoilProfile(soilProfile); + #endregion - // Call - Action call = () => input.SetSoilProfile(soilProfile); + #region test input creation helpers - // Assert - TestHelper.AssertLogMessageIsGenerated(call, Resources.PipingInputExtensions_UpdateThicknessAquiferLayer_Cannot_determine_thickness_aquifer_layer); - Assert.IsNaN(input.ThicknessAquiferLayer.Mean); + private static RingtoetsPipingSurfaceLine ValidSurfaceLine(double xMin, double xMax) + { + var surfaceLine = new RingtoetsPipingSurfaceLine(); + surfaceLine.SetGeometry(new[] + { + new Point3D(xMin, 0.0, 0.0), + new Point3D(xMax, 0.0, 1.0) + }); + return surfaceLine; } - [Test] - public void SetExitPointL_WithSoilProfileAndExitPointL_ThicknessUpdated() + private static PipingInput CreateInputWithAquiferAndCoverageLayer(bool meanSet = false) { - // Setup var surfaceLine = new RingtoetsPipingSurfaceLine(); surfaceLine.SetGeometry(new[] { - new Point3D(0,0,2.0), - new Point3D(1.0,0,2.0), + new Point3D(0, 0, 2.0), + new Point3D(1.0, 0, 2.0), }); var soilProfile = new PipingSoilProfile(String.Empty, 0, new[] { @@ -777,35 +1037,88 @@ IsAquifer = false } }); + var input = new PipingInput(new GeneralPipingInput()); + var exitPointL = 0.5; + if (meanSet) + { + input.SetSurfaceLine(surfaceLine); + input.SetSoilProfile(soilProfile); + input.SetExitPointL(exitPointL); + } + else + { + input.SurfaceLine = surfaceLine; + input.SoilProfile = soilProfile; + input.ExitPointL = exitPointL; + } + return input; + } + + private static PipingInput CreateInputWithSingleAquiferLayerAboveSurfaceLine(double deltaAboveSurfaceLine) + { + var surfaceLine = new RingtoetsPipingSurfaceLine(); + var surfaceLineTopLevel = 2.0; + surfaceLine.SetGeometry(new[] + { + new Point3D(0, 0, surfaceLineTopLevel), + new Point3D(1.0, 0, surfaceLineTopLevel), + }); + var soilProfile = new PipingSoilProfile(String.Empty, 0, new[] + { + new PipingSoilLayer(surfaceLineTopLevel + deltaAboveSurfaceLine) + { + IsAquifer = false + }, + new PipingSoilLayer(surfaceLineTopLevel + deltaAboveSurfaceLine + 1) + { + IsAquifer = true + } + }); var input = new PipingInput(new GeneralPipingInput()) { SurfaceLine = surfaceLine, - SoilProfile = soilProfile + SoilProfile = soilProfile, + ExitPointL = 0.5 }; - - var previousResult = input.ThicknessCoverageLayer.Mean; - - var exitPointL = 0.5; - input.SetExitPointL(exitPointL); - - // Call - var result = input.ThicknessCoverageLayer.Mean; - - // Assert - Assert.AreEqual(exitPointL, input.ExitPointL); - Assert.AreNotEqual(previousResult, result); - Assert.AreEqual(1.0, result); + return input; } - private static RingtoetsPipingSurfaceLine ValidSurfaceLine(double xMin, double xMax) + private static PipingInput CreateInputWithMultipleAquiferLayersUnderSurfaceLine(out double expectedThickness) { var surfaceLine = new RingtoetsPipingSurfaceLine(); + var firstAquiferThickness = 1.1; + var secondAquiferThickness = 2.2; + var totalAquiferThickness = firstAquiferThickness + secondAquiferThickness; surfaceLine.SetGeometry(new[] { - new Point3D(xMin, 0.0, 0.0), - new Point3D(xMax, 0.0, 1.0) + new Point3D(0, 0, totalAquiferThickness), + new Point3D(1.0, 0, totalAquiferThickness), }); - return surfaceLine; + var soilProfile = new PipingSoilProfile(String.Empty, 0, new[] + { + new PipingSoilLayer(firstAquiferThickness) + { + IsAquifer = true + }, + new PipingSoilLayer(firstAquiferThickness + secondAquiferThickness) + { + IsAquifer = true + }, + new PipingSoilLayer(totalAquiferThickness + 1) + { + IsAquifer = false + } + }); + var input = new PipingInput(new GeneralPipingInput()) + { + SurfaceLine = surfaceLine, + SoilProfile = soilProfile, + ExitPointL = 0.5 + }; + expectedThickness = secondAquiferThickness; + return input; } + #endregion + } } \ No newline at end of file