using System; using Core.Common.Base; using Core.Common.Base.Data; using Core.Common.Base.Geometry; using Core.Common.TestUtil; using NUnit.Framework; using Ringtoets.HydraRing.Data; using Ringtoets.Piping.Data.Probabilistics; using Ringtoets.Piping.Data.Properties; namespace Ringtoets.Piping.Data.Test { [TestFixture] public class PipingInputTest { [Test] public void Constructor_ExpectedValues() { // Setup var generalInputParameters = new GeneralPipingInput(); // Call var inputParameters = new PipingInput(generalInputParameters); // Assert Assert.IsInstanceOf(inputParameters); Assert.IsInstanceOf(inputParameters.PhreaticLevelExit); Assert.AreEqual(0, inputParameters.PhreaticLevelExit.Mean.Value); Assert.AreEqual(3, inputParameters.PhreaticLevelExit.Mean.NumberOfDecimalPlaces); Assert.AreEqual(1, inputParameters.PhreaticLevelExit.StandardDeviation.Value); Assert.AreEqual(3, inputParameters.PhreaticLevelExit.StandardDeviation.NumberOfDecimalPlaces); double defaultLogNormalMean = Math.Exp(-0.5); double defaultLogNormalStandardDev = Math.Sqrt((Math.Exp(1) - 1) * Math.Exp(1)); Assert.IsInstanceOf(inputParameters.DampingFactorExit); Assert.AreEqual(1, inputParameters.DampingFactorExit.Mean.Value); Assert.AreEqual(3, inputParameters.DampingFactorExit.Mean.NumberOfDecimalPlaces); Assert.AreEqual(defaultLogNormalStandardDev, inputParameters.DampingFactorExit.StandardDeviation, GetErrorTolerance(inputParameters.DampingFactorExit.StandardDeviation)); Assert.AreEqual(3, inputParameters.DampingFactorExit.StandardDeviation.NumberOfDecimalPlaces); Assert.IsInstanceOf(inputParameters.Diameter70); Assert.AreEqual(defaultLogNormalMean, inputParameters.Diameter70.Mean, GetErrorTolerance(inputParameters.Diameter70.Mean)); Assert.AreEqual(2, inputParameters.Diameter70.Mean.NumberOfDecimalPlaces); Assert.AreEqual(defaultLogNormalStandardDev, inputParameters.Diameter70.StandardDeviation, GetErrorTolerance(inputParameters.Diameter70.StandardDeviation)); Assert.AreEqual(2, inputParameters.Diameter70.StandardDeviation.NumberOfDecimalPlaces); Assert.IsInstanceOf(inputParameters.DarcyPermeability); Assert.AreEqual(defaultLogNormalMean, inputParameters.DarcyPermeability.Mean, GetErrorTolerance(inputParameters.DarcyPermeability.Mean)); Assert.AreEqual(3, inputParameters.DarcyPermeability.Mean.NumberOfDecimalPlaces); Assert.AreEqual(defaultLogNormalStandardDev, inputParameters.DarcyPermeability.StandardDeviation, GetErrorTolerance(inputParameters.DarcyPermeability.StandardDeviation)); Assert.AreEqual(3, inputParameters.DarcyPermeability.StandardDeviation.NumberOfDecimalPlaces); Assert.IsNull(inputParameters.SurfaceLine); Assert.IsNull(inputParameters.SoilProfile); Assert.IsNull(inputParameters.HydraulicBoundaryLocation); Assert.AreEqual(generalInputParameters.UpliftModelFactor, inputParameters.UpliftModelFactor); Assert.AreEqual(generalInputParameters.SellmeijerModelFactor, inputParameters.SellmeijerModelFactor); Assert.AreEqual(generalInputParameters.CriticalHeaveGradient, inputParameters.CriticalHeaveGradient); Assert.AreEqual(generalInputParameters.SellmeijerReductionFactor, inputParameters.SellmeijerReductionFactor); Assert.AreEqual(generalInputParameters.Gravity, inputParameters.Gravity); Assert.AreEqual(generalInputParameters.WaterKinematicViscosity, inputParameters.WaterKinematicViscosity); Assert.AreEqual(generalInputParameters.WaterVolumetricWeight, inputParameters.WaterVolumetricWeight); Assert.AreEqual(generalInputParameters.SandParticlesVolumicWeight, inputParameters.SandParticlesVolumicWeight); Assert.AreEqual(generalInputParameters.WhitesDragCoefficient, inputParameters.WhitesDragCoefficient); Assert.AreEqual(generalInputParameters.BeddingAngle, inputParameters.BeddingAngle); Assert.AreEqual(generalInputParameters.MeanDiameter70, inputParameters.MeanDiameter70); Assert.IsInstanceOf(inputParameters.ThicknessCoverageLayer); Assert.IsNaN(inputParameters.ThicknessCoverageLayer.Mean); Assert.AreEqual(2, inputParameters.ThicknessCoverageLayer.Mean.NumberOfDecimalPlaces); Assert.AreEqual(0.5, inputParameters.ThicknessCoverageLayer.StandardDeviation.Value); Assert.AreEqual(2, inputParameters.ThicknessCoverageLayer.StandardDeviation.NumberOfDecimalPlaces); Assert.IsInstanceOf(inputParameters.SaturatedVolumicWeightOfCoverageLayer); Assert.AreEqual(17.5, inputParameters.SaturatedVolumicWeightOfCoverageLayer.Mean.Value); Assert.AreEqual(2, inputParameters.SaturatedVolumicWeightOfCoverageLayer.Mean.NumberOfDecimalPlaces); Assert.AreEqual(0, inputParameters.SaturatedVolumicWeightOfCoverageLayer.StandardDeviation.Value); Assert.AreEqual(2, inputParameters.SaturatedVolumicWeightOfCoverageLayer.StandardDeviation.NumberOfDecimalPlaces); Assert.IsInstanceOf(inputParameters.ThicknessAquiferLayer); Assert.IsNaN(inputParameters.ThicknessAquiferLayer.Mean); Assert.AreEqual(2, inputParameters.ThicknessAquiferLayer.Mean.NumberOfDecimalPlaces); Assert.AreEqual(0.5, inputParameters.ThicknessAquiferLayer.StandardDeviation.Value); Assert.AreEqual(2, inputParameters.ThicknessAquiferLayer.StandardDeviation.NumberOfDecimalPlaces); Assert.IsInstanceOf(inputParameters.SeepageLength); Assert.IsNaN(inputParameters.SeepageLength.Mean); Assert.AreEqual(2, inputParameters.SeepageLength.Mean.NumberOfDecimalPlaces); Assert.IsNaN(inputParameters.SeepageLength.StandardDeviation); Assert.AreEqual(2, inputParameters.SeepageLength.StandardDeviation.NumberOfDecimalPlaces); Assert.IsNaN(inputParameters.ExitPointL); Assert.AreEqual(2, inputParameters.ExitPointL.NumberOfDecimalPlaces); Assert.IsNaN(inputParameters.EntryPointL); Assert.AreEqual(2, inputParameters.EntryPointL.NumberOfDecimalPlaces); Assert.IsNaN(inputParameters.PiezometricHeadExit); Assert.AreEqual(2, inputParameters.PiezometricHeadExit.NumberOfDecimalPlaces); Assert.IsInstanceOf(inputParameters.AssessmentLevel); Assert.AreEqual(2, inputParameters.AssessmentLevel.NumberOfDecimalPlaces); Assert.IsNaN(inputParameters.AssessmentLevel); } private static double GetErrorTolerance(RoundedDouble roundedDouble) { return Math.Pow(10.0, -roundedDouble.NumberOfDecimalPlaces); } [Test] public void Constructor_GeneralPipingInputIsNull_ArgumentNullException() { // Setup // Call TestDelegate call = () => new PipingInput(null); // Assert Assert.Throws(call); } [Test] public void ExitPointL_SetToValueWithTooManyDecimalPlaces_ValueIsRounded() { // Setup var pipingInput = new PipingInput(new GeneralPipingInput()); int originalNumberOfDecimalPlaces = pipingInput.ExitPointL.NumberOfDecimalPlaces; // Call pipingInput.ExitPointL = new RoundedDouble(5, 1.23456); // Assert Assert.AreEqual(originalNumberOfDecimalPlaces, pipingInput.ExitPointL.NumberOfDecimalPlaces); Assert.AreEqual(1.23, pipingInput.ExitPointL.Value); } [Test] [TestCase(0)] [TestCase(-1e-6)] [TestCase(-21)] public void ExitPointL_ValueLessThanOrEqualToZero_ThrowsArgumentOutOfRangeException(double value) { // Setup var pipingInput = new PipingInput(new GeneralPipingInput()); // Call TestDelegate test = () => pipingInput.ExitPointL = (RoundedDouble)value; // Assert TestHelper.AssertThrowsArgumentExceptionAndTestMessage(test, Resources.PipingInput_ExitPointL_Value_must_be_greater_than_zero); } [Test] [TestCase(-1e-6)] [TestCase(-21)] public void EntryPointL_ValueLessThanZero_ThrowsArgumentOutOfRangeException(double value) { // Setup var pipingInput = new PipingInput(new GeneralPipingInput()); // Call TestDelegate test = () => pipingInput.EntryPointL = (RoundedDouble)value; // Assert TestHelper.AssertThrowsArgumentExceptionAndTestMessage(test, Resources.PipingInput_EntryPointL_Value_must_be_greater_than_or_equal_to_zero); } [Test] public void EntryPointL_SetToNewValueWithTooManyDecimalPlaces_ValueIsRounded() { // Setup var pipingInput = new PipingInput(new GeneralPipingInput()); int originalNumberOfDecimalPlaces = pipingInput.EntryPointL.NumberOfDecimalPlaces; // Call pipingInput.EntryPointL = new RoundedDouble(5, 9.87654); // Assert Assert.AreEqual(originalNumberOfDecimalPlaces, pipingInput.EntryPointL.NumberOfDecimalPlaces); Assert.AreEqual(9.88, pipingInput.EntryPointL.Value); } [Test] public void SurfaceLine_WithDikeToes_ThenExitPointLAndEntryPointLUpdated() { // Given var input = new PipingInput(new GeneralPipingInput()); var surfaceLine = new RingtoetsPipingSurfaceLine(); surfaceLine.SetGeometry(new[] { new Point3D(0, 0, 0), new Point3D(1, 0, 2), new Point3D(2, 0, 3) }); surfaceLine.SetDikeToeAtRiverAt(new Point3D(1, 0, 2)); surfaceLine.SetDikeToeAtPolderAt(new Point3D(2, 0, 3)); // Call input.SurfaceLine = surfaceLine; // Assert Assert.AreEqual(new RoundedDouble(2, 1), input.EntryPointL); Assert.AreEqual(new RoundedDouble(2, 2), input.ExitPointL); } } }