Index: Ringtoets/Common/src/Ringtoets.Common.Data/Probabilistics/IDistribution.cs =================================================================== diff -u -r238800aea14ad46b711dc0520d9416a05f6693ae -r332fd224ce5cd9c737e72f945271c52ae6d64c0d --- Ringtoets/Common/src/Ringtoets.Common.Data/Probabilistics/IDistribution.cs (.../IDistribution.cs) (revision 238800aea14ad46b711dc0520d9416a05f6693ae) +++ Ringtoets/Common/src/Ringtoets.Common.Data/Probabilistics/IDistribution.cs (.../IDistribution.cs) (revision 332fd224ce5cd9c737e72f945271c52ae6d64c0d) @@ -28,7 +28,7 @@ /// This object represents a probabilistic distribution. /// /// - public interface IDistribution + public interface IDistribution : ICloneable { /// /// Gets or sets the mean (expected value, E(X)) of the distribution. Index: Ringtoets/Common/src/Ringtoets.Common.Data/Probabilistics/IVariationCoefficientDistribution.cs =================================================================== diff -u -r7d6e4c28a40fb056c182d0691dda2b2e88aeebfd -r332fd224ce5cd9c737e72f945271c52ae6d64c0d --- Ringtoets/Common/src/Ringtoets.Common.Data/Probabilistics/IVariationCoefficientDistribution.cs (.../IVariationCoefficientDistribution.cs) (revision 7d6e4c28a40fb056c182d0691dda2b2e88aeebfd) +++ Ringtoets/Common/src/Ringtoets.Common.Data/Probabilistics/IVariationCoefficientDistribution.cs (.../IVariationCoefficientDistribution.cs) (revision 332fd224ce5cd9c737e72f945271c52ae6d64c0d) @@ -28,7 +28,7 @@ /// This object represents a probabilistic distribution. /// /// - public interface IVariationCoefficientDistribution + public interface IVariationCoefficientDistribution : ICloneable { /// /// Gets or sets the mean (expected value, E(X)) of the distribution. Index: Ringtoets/Common/src/Ringtoets.Common.Data/Probabilistics/LogNormalDistribution.cs =================================================================== diff -u -re03950c62ccfad90eefe8076d668767f69c90a8e -r332fd224ce5cd9c737e72f945271c52ae6d64c0d --- Ringtoets/Common/src/Ringtoets.Common.Data/Probabilistics/LogNormalDistribution.cs (.../LogNormalDistribution.cs) (revision e03950c62ccfad90eefe8076d668767f69c90a8e) +++ Ringtoets/Common/src/Ringtoets.Common.Data/Probabilistics/LogNormalDistribution.cs (.../LogNormalDistribution.cs) (revision 332fd224ce5cd9c737e72f945271c52ae6d64c0d) @@ -139,5 +139,10 @@ standardDeviation = roundedValue; } } + + public object Clone() + { + return MemberwiseClone(); + } } } \ No newline at end of file Index: Ringtoets/Common/src/Ringtoets.Common.Data/Probabilistics/NormalDistribution.cs =================================================================== diff -u -re03950c62ccfad90eefe8076d668767f69c90a8e -r332fd224ce5cd9c737e72f945271c52ae6d64c0d --- Ringtoets/Common/src/Ringtoets.Common.Data/Probabilistics/NormalDistribution.cs (.../NormalDistribution.cs) (revision e03950c62ccfad90eefe8076d668767f69c90a8e) +++ Ringtoets/Common/src/Ringtoets.Common.Data/Probabilistics/NormalDistribution.cs (.../NormalDistribution.cs) (revision 332fd224ce5cd9c737e72f945271c52ae6d64c0d) @@ -86,5 +86,10 @@ standardDeviation = roundedValue; } } + + public object Clone() + { + return MemberwiseClone(); + } } } \ No newline at end of file Index: Ringtoets/Common/src/Ringtoets.Common.Data/Probabilistics/VariationCoefficientLogNormalDistribution.cs =================================================================== diff -u -re03950c62ccfad90eefe8076d668767f69c90a8e -r332fd224ce5cd9c737e72f945271c52ae6d64c0d --- Ringtoets/Common/src/Ringtoets.Common.Data/Probabilistics/VariationCoefficientLogNormalDistribution.cs (.../VariationCoefficientLogNormalDistribution.cs) (revision e03950c62ccfad90eefe8076d668767f69c90a8e) +++ Ringtoets/Common/src/Ringtoets.Common.Data/Probabilistics/VariationCoefficientLogNormalDistribution.cs (.../VariationCoefficientLogNormalDistribution.cs) (revision 332fd224ce5cd9c737e72f945271c52ae6d64c0d) @@ -99,5 +99,10 @@ coefficientOfVariation = roundedValue; } } + + public object Clone() + { + return MemberwiseClone(); + } } } \ No newline at end of file Index: Ringtoets/Common/src/Ringtoets.Common.Data/Probabilistics/VariationCoefficientNormalDistribution.cs =================================================================== diff -u -re03950c62ccfad90eefe8076d668767f69c90a8e -r332fd224ce5cd9c737e72f945271c52ae6d64c0d --- Ringtoets/Common/src/Ringtoets.Common.Data/Probabilistics/VariationCoefficientNormalDistribution.cs (.../VariationCoefficientNormalDistribution.cs) (revision e03950c62ccfad90eefe8076d668767f69c90a8e) +++ Ringtoets/Common/src/Ringtoets.Common.Data/Probabilistics/VariationCoefficientNormalDistribution.cs (.../VariationCoefficientNormalDistribution.cs) (revision 332fd224ce5cd9c737e72f945271c52ae6d64c0d) @@ -86,5 +86,10 @@ coefficientOfVariation = roundedValue; } } + + public object Clone() + { + return MemberwiseClone(); + } } } \ No newline at end of file Index: Ringtoets/Common/test/Ringtoets.Common.Data.Test/Probabilistics/LogNormalDistributionTest.cs =================================================================== diff -u -re03950c62ccfad90eefe8076d668767f69c90a8e -r332fd224ce5cd9c737e72f945271c52ae6d64c0d --- Ringtoets/Common/test/Ringtoets.Common.Data.Test/Probabilistics/LogNormalDistributionTest.cs (.../LogNormalDistributionTest.cs) (revision e03950c62ccfad90eefe8076d668767f69c90a8e) +++ Ringtoets/Common/test/Ringtoets.Common.Data.Test/Probabilistics/LogNormalDistributionTest.cs (.../LogNormalDistributionTest.cs) (revision 332fd224ce5cd9c737e72f945271c52ae6d64c0d) @@ -24,6 +24,7 @@ using Core.Common.TestUtil; using NUnit.Framework; using Ringtoets.Common.Data.Probabilistics; +using Ringtoets.Common.Data.TestUtil; namespace Ringtoets.Common.Data.Test.Probabilistics { @@ -187,5 +188,25 @@ const string expectedMessage = "De verschuiving mag niet groter zijn dan de verwachtingswaarde."; TestHelper.AssertThrowsArgumentExceptionAndTestMessage(call, expectedMessage); } + + [Test] + public void Clone_Always_ReturnNewInstanceWithCopiedValues() + { + // Setup + var random = new Random(21); + var distribution = new LogNormalDistribution(random.Next(1, 16)) + { + Mean = random.NextRoundedDouble(), + StandardDeviation = random.NextRoundedDouble() + }; + + // Call + object clone = distribution.Clone(); + + // Assert + Assert.IsInstanceOf(clone); + var clonedDistribution = (LogNormalDistribution)clone; + DistributionAssert.AreEqual(distribution, clonedDistribution); + } } } \ No newline at end of file Index: Ringtoets/Common/test/Ringtoets.Common.Data.Test/Probabilistics/NormalDistributionTest.cs =================================================================== diff -u -r1bd1adf2f50f50a4043cb3ae1f159979f8e59d90 -r332fd224ce5cd9c737e72f945271c52ae6d64c0d --- Ringtoets/Common/test/Ringtoets.Common.Data.Test/Probabilistics/NormalDistributionTest.cs (.../NormalDistributionTest.cs) (revision 1bd1adf2f50f50a4043cb3ae1f159979f8e59d90) +++ Ringtoets/Common/test/Ringtoets.Common.Data.Test/Probabilistics/NormalDistributionTest.cs (.../NormalDistributionTest.cs) (revision 332fd224ce5cd9c737e72f945271c52ae6d64c0d) @@ -24,6 +24,7 @@ using Core.Common.TestUtil; using NUnit.Framework; using Ringtoets.Common.Data.Probabilistics; +using Ringtoets.Common.Data.TestUtil; namespace Ringtoets.Common.Data.Test.Probabilistics { @@ -113,5 +114,25 @@ const string expectedMessage = "Standaardafwijking (\u03C3) moet groter zijn dan of gelijk zijn aan 0."; TestHelper.AssertThrowsArgumentExceptionAndTestMessage(call, expectedMessage); } + + [Test] + public void Clone_Always_ReturnNewInstanceWithCopiedValues() + { + // Setup + var random = new Random(21); + var distribution = new NormalDistribution(random.Next(1, 16)) + { + Mean = random.NextRoundedDouble(), + StandardDeviation = random.NextRoundedDouble() + }; + + // Call + object clone = distribution.Clone(); + + // Assert + Assert.IsInstanceOf(clone); + var clonedDistribution = (NormalDistribution)clone; + DistributionAssert.AreEqual(distribution, clonedDistribution); + } } } \ No newline at end of file Index: Ringtoets/Common/test/Ringtoets.Common.Data.Test/Probabilistics/TruncatedNormalDistributionTest.cs =================================================================== diff -u -r8905298103eb01ce13dd5c1a2f267f879d4fda3e -r332fd224ce5cd9c737e72f945271c52ae6d64c0d --- Ringtoets/Common/test/Ringtoets.Common.Data.Test/Probabilistics/TruncatedNormalDistributionTest.cs (.../TruncatedNormalDistributionTest.cs) (revision 8905298103eb01ce13dd5c1a2f267f879d4fda3e) +++ Ringtoets/Common/test/Ringtoets.Common.Data.Test/Probabilistics/TruncatedNormalDistributionTest.cs (.../TruncatedNormalDistributionTest.cs) (revision 332fd224ce5cd9c737e72f945271c52ae6d64c0d) @@ -19,9 +19,12 @@ // Stichting Deltares and remain full property of Stichting Deltares at all times. // All rights reserved. +using System; using Core.Common.Base.Data; +using Core.Common.TestUtil; using NUnit.Framework; using Ringtoets.Common.Data.Probabilistics; +using Ringtoets.Common.Data.TestUtil; namespace Ringtoets.Common.Data.Test.Probabilistics { @@ -78,5 +81,27 @@ Assert.AreEqual(numberOfDecimalPlaces, distribution.UpperBoundary.NumberOfDecimalPlaces); Assert.AreEqual(new RoundedDouble(numberOfDecimalPlaces, value), distribution.UpperBoundary); } + + [Test] + public void Clone_Always_ReturnNewInstanceWithCopiedValues() + { + // Setup + var random = new Random(21); + var distribution = new TruncatedNormalDistribution(random.Next(1, 16)) + { + Mean = random.NextRoundedDouble(), + StandardDeviation = random.NextRoundedDouble(), + LowerBoundary = random.NextRoundedDouble(), + UpperBoundary = random.NextRoundedDouble() + }; + + // Call + object clone = distribution.Clone(); + + // Assert + Assert.IsInstanceOf(clone); + var clonedDistribution = (TruncatedNormalDistribution)clone; + DistributionAssert.AreEqual(distribution, clonedDistribution); + } } } \ No newline at end of file Index: Ringtoets/Common/test/Ringtoets.Common.Data.Test/Probabilistics/VariationCoefficientLogNormalDistributionTest.cs =================================================================== diff -u -r1bd1adf2f50f50a4043cb3ae1f159979f8e59d90 -r332fd224ce5cd9c737e72f945271c52ae6d64c0d --- Ringtoets/Common/test/Ringtoets.Common.Data.Test/Probabilistics/VariationCoefficientLogNormalDistributionTest.cs (.../VariationCoefficientLogNormalDistributionTest.cs) (revision 1bd1adf2f50f50a4043cb3ae1f159979f8e59d90) +++ Ringtoets/Common/test/Ringtoets.Common.Data.Test/Probabilistics/VariationCoefficientLogNormalDistributionTest.cs (.../VariationCoefficientLogNormalDistributionTest.cs) (revision 332fd224ce5cd9c737e72f945271c52ae6d64c0d) @@ -24,6 +24,7 @@ using Core.Common.TestUtil; using NUnit.Framework; using Ringtoets.Common.Data.Probabilistics; +using Ringtoets.Common.Data.TestUtil; namespace Ringtoets.Common.Data.Test.Probabilistics { @@ -141,5 +142,25 @@ string expectedMessage = "Variatiecoëfficiënt (CV) moet groter zijn dan of gelijk zijn aan 0."; TestHelper.AssertThrowsArgumentExceptionAndTestMessage(call, expectedMessage); } + + [Test] + public void Clone_Always_ReturnNewInstanceWithCopiedValues() + { + // Setup + var random = new Random(21); + var distribution = new VariationCoefficientLogNormalDistribution(random.Next(1, 16)) + { + Mean = random.NextRoundedDouble(), + CoefficientOfVariation = random.NextRoundedDouble() + }; + + // Call + object clone = distribution.Clone(); + + // Assert + Assert.IsInstanceOf(clone); + var clonedDistribution = (VariationCoefficientLogNormalDistribution) clone; + DistributionAssert.AreEqual(distribution, clonedDistribution); + } } } \ No newline at end of file Index: Ringtoets/Common/test/Ringtoets.Common.Data.Test/Probabilistics/VariationCoefficientNormalDistributionTest.cs =================================================================== diff -u -r1bd1adf2f50f50a4043cb3ae1f159979f8e59d90 -r332fd224ce5cd9c737e72f945271c52ae6d64c0d --- Ringtoets/Common/test/Ringtoets.Common.Data.Test/Probabilistics/VariationCoefficientNormalDistributionTest.cs (.../VariationCoefficientNormalDistributionTest.cs) (revision 1bd1adf2f50f50a4043cb3ae1f159979f8e59d90) +++ Ringtoets/Common/test/Ringtoets.Common.Data.Test/Probabilistics/VariationCoefficientNormalDistributionTest.cs (.../VariationCoefficientNormalDistributionTest.cs) (revision 332fd224ce5cd9c737e72f945271c52ae6d64c0d) @@ -24,6 +24,7 @@ using Core.Common.TestUtil; using NUnit.Framework; using Ringtoets.Common.Data.Probabilistics; +using Ringtoets.Common.Data.TestUtil; namespace Ringtoets.Common.Data.Test.Probabilistics { @@ -122,5 +123,25 @@ string expectedMessage = "Variatiecoëfficiënt (CV) moet groter zijn dan of gelijk zijn aan 0."; TestHelper.AssertThrowsArgumentExceptionAndTestMessage(call, expectedMessage); } + + [Test] + public void Clone_Always_ReturnNewInstanceWithCopiedValues() + { + // Setup + var random = new Random(21); + var distribution = new VariationCoefficientNormalDistribution(random.Next(1, 16)) + { + Mean = random.NextRoundedDouble(), + CoefficientOfVariation = random.NextRoundedDouble() + }; + + // Call + object clone = distribution.Clone(); + + // Assert + Assert.IsInstanceOf(clone); + var clonedDistribution = (VariationCoefficientNormalDistribution)clone; + DistributionAssert.AreEqual(distribution, clonedDistribution); + } } } \ No newline at end of file Index: Ringtoets/Common/test/Ringtoets.Common.Data.TestUtil.Test/LimitedPrecisionHelperTest.cs =================================================================== diff -u -r2857b234df4622cdaf80bbc75abc58af36667347 -r332fd224ce5cd9c737e72f945271c52ae6d64c0d --- Ringtoets/Common/test/Ringtoets.Common.Data.TestUtil.Test/LimitedPrecisionHelperTest.cs (.../LimitedPrecisionHelperTest.cs) (revision 2857b234df4622cdaf80bbc75abc58af36667347) +++ Ringtoets/Common/test/Ringtoets.Common.Data.TestUtil.Test/LimitedPrecisionHelperTest.cs (.../LimitedPrecisionHelperTest.cs) (revision 332fd224ce5cd9c737e72f945271c52ae6d64c0d) @@ -86,6 +86,11 @@ { public RoundedDouble Mean { get; set; } public RoundedDouble StandardDeviation { get; set; } + + public object Clone() + { + throw new NotImplementedException(); + } } } } \ No newline at end of file Index: Ringtoets/Common/test/Ringtoets.Common.Forms.TestUtil.Test/DistributionPropertiesTestHelperTest.cs =================================================================== diff -u -rde55528705df446cc78761cd04d8ba8149e6540c -r332fd224ce5cd9c737e72f945271c52ae6d64c0d --- Ringtoets/Common/test/Ringtoets.Common.Forms.TestUtil.Test/DistributionPropertiesTestHelperTest.cs (.../DistributionPropertiesTestHelperTest.cs) (revision de55528705df446cc78761cd04d8ba8149e6540c) +++ Ringtoets/Common/test/Ringtoets.Common.Forms.TestUtil.Test/DistributionPropertiesTestHelperTest.cs (.../DistributionPropertiesTestHelperTest.cs) (revision 332fd224ce5cd9c737e72f945271c52ae6d64c0d) @@ -19,6 +19,7 @@ // Stichting Deltares and remain full property of Stichting Deltares at all times. // All rights reserved. +using System; using System.Collections.Generic; using Core.Common.Base; using Core.Common.Base.Data; @@ -190,6 +191,11 @@ public RoundedDouble Mean { get; set; } public RoundedDouble StandardDeviation { get; set; } public RoundedDouble CoefficientOfVariation { get; set; } + + public object Clone() + { + throw new NotImplementedException(); + } } } } \ No newline at end of file Index: Ringtoets/GrassCoverErosionInwards/src/Ringtoets.GrassCoverErosionInwards.IO/Importers/GrassCoverErosionInwardsCalculationConfigurationImporter.cs =================================================================== diff -u -r8a144ca2626854644292dbcefee440d066d9d2e8 -r332fd224ce5cd9c737e72f945271c52ae6d64c0d --- Ringtoets/GrassCoverErosionInwards/src/Ringtoets.GrassCoverErosionInwards.IO/Importers/GrassCoverErosionInwardsCalculationConfigurationImporter.cs (.../GrassCoverErosionInwardsCalculationConfigurationImporter.cs) (revision 8a144ca2626854644292dbcefee440d066d9d2e8) +++ Ringtoets/GrassCoverErosionInwards/src/Ringtoets.GrassCoverErosionInwards.IO/Importers/GrassCoverErosionInwardsCalculationConfigurationImporter.cs (.../GrassCoverErosionInwardsCalculationConfigurationImporter.cs) (revision 332fd224ce5cd9c737e72f945271c52ae6d64c0d) @@ -278,19 +278,25 @@ /// false otherwise. private bool TryReadCriticalWaveReduction(ReadGrassCoverErosionInwardsCalculation readCalculation, GrassCoverErosionInwardsCalculation calculation) { - if (!readCalculation.CriticalFlowRateMean.HasValue || !readCalculation.CriticalFlowRateStandardDeviation.HasValue) + var distribution = (LogNormalDistribution) calculation.InputParameters.CriticalFlowRate.Clone(); + + if (readCalculation.CriticalFlowRateMean.HasValue) { - return true; + double criticalFlowRateMean = readCalculation.CriticalFlowRateMean.Value; + + if (!SetMean(distribution, criticalFlowRateMean, calculation.Name)) + { + return false; + } } - double criticalFlowRateStandardDeviation = readCalculation.CriticalFlowRateStandardDeviation.Value; - double criticalFlowRateMean = readCalculation.CriticalFlowRateMean.Value; - - var distribution = new LogNormalDistribution(); - - if (!SetMean(distribution, criticalFlowRateMean, calculation.Name) || !SetStandardDeviation(distribution, criticalFlowRateStandardDeviation, calculation.Name)) + if (readCalculation.CriticalFlowRateStandardDeviation.HasValue) { - return false; + double criticalFlowRateStandardDeviation = readCalculation.CriticalFlowRateStandardDeviation.Value; + if (!SetStandardDeviation(distribution, criticalFlowRateStandardDeviation, calculation.Name)) + { + return false; + } } calculation.InputParameters.CriticalFlowRate = distribution; Index: Ringtoets/GrassCoverErosionInwards/test/Ringtoets.GrassCoverErosionInwards.IO.Test/Importers/GrassCoverErosionInwardsCalculationConfigurationImporterTest.cs =================================================================== diff -u -r60b9c5761bd42da110cf85a03e3e2db34109325e -r332fd224ce5cd9c737e72f945271c52ae6d64c0d --- Ringtoets/GrassCoverErosionInwards/test/Ringtoets.GrassCoverErosionInwards.IO.Test/Importers/GrassCoverErosionInwardsCalculationConfigurationImporterTest.cs (.../GrassCoverErosionInwardsCalculationConfigurationImporterTest.cs) (revision 60b9c5761bd42da110cf85a03e3e2db34109325e) +++ Ringtoets/GrassCoverErosionInwards/test/Ringtoets.GrassCoverErosionInwards.IO.Test/Importers/GrassCoverErosionInwardsCalculationConfigurationImporterTest.cs (.../GrassCoverErosionInwardsCalculationConfigurationImporterTest.cs) (revision 332fd224ce5cd9c737e72f945271c52ae6d64c0d) @@ -362,6 +362,107 @@ } [Test] + public void Import_ValidConfigurationOnlyCriticalFlowRateMeanSet_DataAddedToModel() + { + // Setup + string filePath = Path.Combine(path, "validConfigurationCriticalFlowRateMeanOnly.xml"); + + var calculationGroup = new CalculationGroup(); + + var importer = new GrassCoverErosionInwardsCalculationConfigurationImporter( + filePath, + calculationGroup, + Enumerable.Empty(), + Enumerable.Empty()); + + // Call + bool successful = importer.Import(); + + // Assert + Assert.IsTrue(successful); + + var expectedCalculation = new GrassCoverErosionInwardsCalculation + { + Name = "Berekening 1", + InputParameters = + { + CriticalFlowRate = + { + Mean = (RoundedDouble) 2.0 + } + } + }; + + Assert.AreEqual(1, calculationGroup.Children.Count); + AssertCalculation(expectedCalculation, (GrassCoverErosionInwardsCalculation) calculationGroup.Children[0]); + } + + [Test] + public void Import_ValidConfigurationOnlyCriticalFlowRateNoParametersSet_DataAddedToModel() + { + // Setup + string filePath = Path.Combine(path, "validConfigurationCriticalFlowRateNoParameters.xml"); + + var calculationGroup = new CalculationGroup(); + + var importer = new GrassCoverErosionInwardsCalculationConfigurationImporter( + filePath, + calculationGroup, + Enumerable.Empty(), + Enumerable.Empty()); + + // Call + bool successful = importer.Import(); + + // Assert + Assert.IsTrue(successful); + + var expectedCalculation = new GrassCoverErosionInwardsCalculation + { + Name = "Berekening 1" + }; + + Assert.AreEqual(1, calculationGroup.Children.Count); + AssertCalculation(expectedCalculation, (GrassCoverErosionInwardsCalculation) calculationGroup.Children[0]); + } + + [Test] + public void Import_ValidConfigurationOnlyCriticalFlowRateStandardDeviationSet_DataAddedToModel() + { + // Setup + string filePath = Path.Combine(path, "validConfigurationCriticalFlowRateStandardDeviationOnly.xml"); + + var calculationGroup = new CalculationGroup(); + + var importer = new GrassCoverErosionInwardsCalculationConfigurationImporter( + filePath, + calculationGroup, + Enumerable.Empty(), + Enumerable.Empty()); + + // Call + bool successful = importer.Import(); + + // Assert + Assert.IsTrue(successful); + + var expectedCalculation = new GrassCoverErosionInwardsCalculation + { + Name = "Berekening 1", + InputParameters = + { + CriticalFlowRate = + { + StandardDeviation = (RoundedDouble) 1.1 + } + } + }; + + Assert.AreEqual(1, calculationGroup.Children.Count); + AssertCalculation(expectedCalculation, (GrassCoverErosionInwardsCalculation) calculationGroup.Children[0]); + } + + [Test] public void Import_ValidConfigurationWithValidData_DataAddedToModel() { // Setup Index: Ringtoets/GrassCoverErosionInwards/test/Ringtoets.GrassCoverErosionInwards.IO.Test/test-data/GrassCoverErosionInwardsCalculationConfigurationImporter/validConfigurationCriticalFlowRateMeanOnly.xml =================================================================== diff -u --- Ringtoets/GrassCoverErosionInwards/test/Ringtoets.GrassCoverErosionInwards.IO.Test/test-data/GrassCoverErosionInwardsCalculationConfigurationImporter/validConfigurationCriticalFlowRateMeanOnly.xml (revision 0) +++ Ringtoets/GrassCoverErosionInwards/test/Ringtoets.GrassCoverErosionInwards.IO.Test/test-data/GrassCoverErosionInwardsCalculationConfigurationImporter/validConfigurationCriticalFlowRateMeanOnly.xml (revision 332fd224ce5cd9c737e72f945271c52ae6d64c0d) @@ -0,0 +1,10 @@ + + + + + + 2.0 + + + + Index: Ringtoets/GrassCoverErosionInwards/test/Ringtoets.GrassCoverErosionInwards.IO.Test/test-data/GrassCoverErosionInwardsCalculationConfigurationImporter/validConfigurationCriticalFlowRateNoParameters.xml =================================================================== diff -u --- Ringtoets/GrassCoverErosionInwards/test/Ringtoets.GrassCoverErosionInwards.IO.Test/test-data/GrassCoverErosionInwardsCalculationConfigurationImporter/validConfigurationCriticalFlowRateNoParameters.xml (revision 0) +++ Ringtoets/GrassCoverErosionInwards/test/Ringtoets.GrassCoverErosionInwards.IO.Test/test-data/GrassCoverErosionInwardsCalculationConfigurationImporter/validConfigurationCriticalFlowRateNoParameters.xml (revision 332fd224ce5cd9c737e72f945271c52ae6d64c0d) @@ -0,0 +1,8 @@ + + + + + + + + Index: Ringtoets/GrassCoverErosionInwards/test/Ringtoets.GrassCoverErosionInwards.IO.Test/test-data/GrassCoverErosionInwardsCalculationConfigurationImporter/validConfigurationCriticalFlowRateStandardDeviationOnly.xml =================================================================== diff -u --- Ringtoets/GrassCoverErosionInwards/test/Ringtoets.GrassCoverErosionInwards.IO.Test/test-data/GrassCoverErosionInwardsCalculationConfigurationImporter/validConfigurationCriticalFlowRateStandardDeviationOnly.xml (revision 0) +++ Ringtoets/GrassCoverErosionInwards/test/Ringtoets.GrassCoverErosionInwards.IO.Test/test-data/GrassCoverErosionInwardsCalculationConfigurationImporter/validConfigurationCriticalFlowRateStandardDeviationOnly.xml (revision 332fd224ce5cd9c737e72f945271c52ae6d64c0d) @@ -0,0 +1,10 @@ + + + + + + 1.1 + + + + Index: Ringtoets/Piping/src/Ringtoets.Piping.IO/Importers/PipingCalculationConfigurationImporter.cs =================================================================== diff -u -rd347acb3d57c61fd3baa1e883551807417db6698 -r332fd224ce5cd9c737e72f945271c52ae6d64c0d --- Ringtoets/Piping/src/Ringtoets.Piping.IO/Importers/PipingCalculationConfigurationImporter.cs (.../PipingCalculationConfigurationImporter.cs) (revision d347acb3d57c61fd3baa1e883551807417db6698) +++ Ringtoets/Piping/src/Ringtoets.Piping.IO/Importers/PipingCalculationConfigurationImporter.cs (.../PipingCalculationConfigurationImporter.cs) (revision 332fd224ce5cd9c737e72f945271c52ae6d64c0d) @@ -315,89 +315,74 @@ private bool TryReadDampingFactorExit(ReadPipingCalculation readCalculation, PipingCalculationScenario pipingCalculation) { - double? mean = readCalculation.DampingFactorExitMean; - double? standardDeviation = readCalculation.DampingFactorExitStandardDeviation; - if (mean.HasValue && standardDeviation.HasValue) - { - LogNormalDistribution normalDistribution = TryReadLogNormalDistribution(mean.Value, standardDeviation.Value, - PipingCalculationConfigurationSchemaIdentifiers.DampingFactorExitStochastName, - pipingCalculation.Name); - if (normalDistribution == null) - { - return false; - } + var distribution = (LogNormalDistribution) pipingCalculation.InputParameters.DampingFactorExit.Clone(); - pipingCalculation.InputParameters.DampingFactorExit = normalDistribution; + if (!TrySetDistributionParameters( + distribution, + readCalculation.DampingFactorExitMean, + readCalculation.DampingFactorExitStandardDeviation, + PipingCalculationConfigurationSchemaIdentifiers.DampingFactorExitStochastName, + pipingCalculation.Name)) + { + return false; } + + pipingCalculation.InputParameters.DampingFactorExit = distribution; return true; } private bool TryReadPhreaticLevelExit(ReadPipingCalculation readCalculation, PipingCalculationScenario pipingCalculation) { - double? mean = readCalculation.PhreaticLevelExitMean; - double? standardDeviation = readCalculation.PhreaticLevelExitStandardDeviation; - if (mean.HasValue && standardDeviation.HasValue) - { - NormalDistribution normalDistribution = TryReadNormalDistribution(mean.Value, standardDeviation.Value, - PipingCalculationConfigurationSchemaIdentifiers.PhreaticLevelExitStochastName, - pipingCalculation.Name); - if (normalDistribution == null) - { - return false; - } + var distribution = (NormalDistribution) pipingCalculation.InputParameters.PhreaticLevelExit.Clone(); - pipingCalculation.InputParameters.PhreaticLevelExit = normalDistribution; - } - return true; - } - - private NormalDistribution TryReadNormalDistribution(double mean, double standardDeviation, string stochastName, string calculationName) - { - var distribution = new NormalDistribution(); - if (TryReadDistributionParameters(distribution, mean, standardDeviation, stochastName, calculationName)) + if (!TrySetDistributionParameters( + distribution, + readCalculation.PhreaticLevelExitMean, + readCalculation.PhreaticLevelExitStandardDeviation, + PipingCalculationConfigurationSchemaIdentifiers.PhreaticLevelExitStochastName, + pipingCalculation.Name)) { - return distribution; + return false; } - return null; - } - private LogNormalDistribution TryReadLogNormalDistribution(double mean, double standardDeviation, string stochastName, string calculationName) - { - var distribution = new LogNormalDistribution(); - if (TryReadDistributionParameters(distribution, mean, standardDeviation, stochastName, calculationName)) - { - return distribution; - } - return null; + pipingCalculation.InputParameters.PhreaticLevelExit = distribution; + return true; } - private bool TryReadDistributionParameters(IDistribution distribution, double mean, double standardDeviation, string stochastName, string calculationName) + private bool TrySetDistributionParameters(IDistribution distribution, double? mean, double? standardDeviation, string stochastName, string calculationName) { - try + if (mean.HasValue) { - distribution.Mean = (RoundedDouble) mean; + try + { + distribution.Mean = (RoundedDouble) mean; + } + catch (ArgumentOutOfRangeException e) + { + LogOutOfRangeException(string.Format( + Resources.PipingCalculationConfigurationImporter_ReadStochasts_Invalid_Mean_0_for_stochast_with_StochastName_1_, + mean, stochastName), + calculationName, e); + return false; + } } - catch (ArgumentOutOfRangeException e) - { - LogOutOfRangeException(string.Format( - Resources.PipingCalculationConfigurationImporter_ReadStochasts_Invalid_Mean_0_for_stochast_with_StochastName_1_, - mean, stochastName), - calculationName, e); - return false; - } - try + if (standardDeviation.HasValue) { - distribution.StandardDeviation = (RoundedDouble) standardDeviation; + try + { + distribution.StandardDeviation = (RoundedDouble) standardDeviation; + } + catch (ArgumentOutOfRangeException e) + { + LogOutOfRangeException(string.Format( + Resources.PipingCalculationConfigurationImporter_ReadStochasts_Invalid_StandardDeviation_0_for_stochast_with_StochastName_1_, + standardDeviation, stochastName), + calculationName, e); + return false; + } } - catch (ArgumentOutOfRangeException e) - { - LogOutOfRangeException(string.Format( - Resources.PipingCalculationConfigurationImporter_ReadStochasts_Invalid_StandardDeviation_0_for_stochast_with_StochastName_1_, - standardDeviation, stochastName), - calculationName, e); - return false; - } + return true; } } Index: Ringtoets/Piping/test/Ringtoets.Piping.IO.Test/Importers/PipingCalculationConfigurationImporterTest.cs =================================================================== diff -u -rd347acb3d57c61fd3baa1e883551807417db6698 -r332fd224ce5cd9c737e72f945271c52ae6d64c0d --- Ringtoets/Piping/test/Ringtoets.Piping.IO.Test/Importers/PipingCalculationConfigurationImporterTest.cs (.../PipingCalculationConfigurationImporterTest.cs) (revision d347acb3d57c61fd3baa1e883551807417db6698) +++ Ringtoets/Piping/test/Ringtoets.Piping.IO.Test/Importers/PipingCalculationConfigurationImporterTest.cs (.../PipingCalculationConfigurationImporterTest.cs) (revision 332fd224ce5cd9c737e72f945271c52ae6d64c0d) @@ -363,6 +363,118 @@ } [Test] + public void Import_StochastsWithNoParametersSet_DataAddedToModel() + { + // Setup + string filePath = Path.Combine(importerPath, "validConfigurationStochastsNoParameters.xml"); + + var calculationGroup = new CalculationGroup(); + + var pipingFailureMechanism = new PipingFailureMechanism(); + + var importer = new PipingCalculationConfigurationImporter(filePath, + calculationGroup, + Enumerable.Empty(), + pipingFailureMechanism); + + // Call + bool successful = importer.Import(); + + // Assert + Assert.IsTrue(successful); + + var expectedCalculation = new PipingCalculationScenario(new GeneralPipingInput()) + { + Name = "Calculation" + }; + + Assert.AreEqual(1, calculationGroup.Children.Count); + AssertPipingCalculationScenario(expectedCalculation, (PipingCalculationScenario) calculationGroup.Children[0]); + } + + [Test] + public void Import_StochastsWithMeanSet_DataAddedToModel() + { + // Setup + string filePath = Path.Combine(importerPath, "validConfigurationStochastsMeanOnly.xml"); + + var calculationGroup = new CalculationGroup(); + + var pipingFailureMechanism = new PipingFailureMechanism(); + + var importer = new PipingCalculationConfigurationImporter(filePath, + calculationGroup, + Enumerable.Empty(), + pipingFailureMechanism); + + // Call + bool successful = importer.Import(); + + // Assert + Assert.IsTrue(successful); + + var expectedCalculation = new PipingCalculationScenario(new GeneralPipingInput()) + { + Name = "Calculation", + InputParameters = + { + PhreaticLevelExit = + { + Mean = (RoundedDouble) 4.4, + }, + DampingFactorExit = + { + Mean = (RoundedDouble) 6.6, + } + } + }; + + Assert.AreEqual(1, calculationGroup.Children.Count); + AssertPipingCalculationScenario(expectedCalculation, (PipingCalculationScenario) calculationGroup.Children[0]); + } + + [Test] + public void Import_StochastsWithStandardDeviationSet_DataAddedToModel() + { + // Setup + string filePath = Path.Combine(importerPath, "validConfigurationStochastsStandardDeviationOnly.xml"); + + var calculationGroup = new CalculationGroup(); + + var pipingFailureMechanism = new PipingFailureMechanism(); + + var importer = new PipingCalculationConfigurationImporter(filePath, + calculationGroup, + Enumerable.Empty(), + pipingFailureMechanism); + + // Call + bool successful = importer.Import(); + + // Assert + Assert.IsTrue(successful); + + var expectedCalculation = new PipingCalculationScenario(new GeneralPipingInput()) + { + Name = "Calculation", + InputParameters = + { + PhreaticLevelExit = + { + StandardDeviation = (RoundedDouble) 5.5 + }, + DampingFactorExit = + { + StandardDeviation = (RoundedDouble) 7.7 + } + } + }; + + Assert.AreEqual(1, calculationGroup.Children.Count); + AssertPipingCalculationScenario(expectedCalculation, (PipingCalculationScenario) calculationGroup.Children[0]); + } + + [Test] [TestCase("validConfigurationFullCalculationContainingHydraulicBoundaryLocation.xml", false)] [TestCase("validConfigurationFullCalculationContainingAssessmentLevel.xml", true)] public void Import_ValidConfigurationWithValidHydraulicBoundaryData_DataAddedToModel(string file, bool manualAssessmentLevel)