// 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.Linq; using Core.Common.Base.Data; using NUnit.Framework; using Ringtoets.Common.Data.Probabilistics; using Ringtoets.Common.Data.TestUtil; using Ringtoets.Piping.Data.TestUtil; namespace Ringtoets.Piping.Data.Test { [TestFixture] public class PipingSemiProbabilisticDesignVariableFactoryTest { private static void AssertPercentile(double percentile, DesignVariable designVariable) where T : IDistribution { Assert.IsInstanceOf>(designVariable); var percentileBasedDesignVariable = (PercentileBasedDesignVariable) designVariable; Assert.AreEqual(percentile, percentileBasedDesignVariable.Percentile); } private static void AssertPercentile(double percentile, VariationCoefficientDesignVariable designVariable) { Assert.IsInstanceOf(designVariable); var percentileBasedDesignVariable = (VariationCoefficientLogNormalDistributionDesignVariable) designVariable; Assert.AreEqual(percentile, percentileBasedDesignVariable.Percentile); } #region General parameters [Test] public void GetThicknessCoverageLayer_PipingInputWithCoverLayer_CreatePercentileBasedDesignVariableForThicknessCoverageLayer() { // Setup PipingInput inputParameters = PipingInputFactory.CreateInputWithAquiferAndCoverageLayer(); // Call DesignVariable thicknessCoverageLayer = PipingSemiProbabilisticDesignVariableFactory.GetThicknessCoverageLayer(inputParameters); // Assert Assert.IsInstanceOf>(thicknessCoverageLayer); DistributionAssert.AreEqual(inputParameters.ThicknessCoverageLayer, thicknessCoverageLayer.Distribution); AssertPercentile(0.05, thicknessCoverageLayer); } [Test] public void GetThicknessCoverageLayer_PipingInputWithoutCoverLayer_CreateDeterministicDesignVariableForThicknessCoverageLayer() { // Setup var inputParameters = new PipingInput(new GeneralPipingInput()); // Call DesignVariable thicknessCoverageLayer = PipingSemiProbabilisticDesignVariableFactory.GetThicknessCoverageLayer(inputParameters); // Assert Assert.IsInstanceOf>(thicknessCoverageLayer); DistributionAssert.AreEqual(inputParameters.ThicknessCoverageLayer, thicknessCoverageLayer.Distribution); Assert.AreEqual(new RoundedDouble(2), thicknessCoverageLayer.GetDesignValue()); } [Test] public void GetEffectiveThicknessCoverageLayer_PipingInputWithCoverLayer_CreatePercentileBasedDesignVariableForEffectiveThicknessCoverageLayer() { // Setup PipingInput inputParameters = PipingInputFactory.CreateInputWithAquiferAndCoverageLayer(); // Call DesignVariable effectiveThicknessCoverageLayer = PipingSemiProbabilisticDesignVariableFactory.GetEffectiveThicknessCoverageLayer(inputParameters); // Assert Assert.IsInstanceOf>(effectiveThicknessCoverageLayer); DistributionAssert.AreEqual(inputParameters.EffectiveThicknessCoverageLayer, effectiveThicknessCoverageLayer.Distribution); AssertPercentile(0.05, effectiveThicknessCoverageLayer); } [Test] public void GetEffectiveThicknessCoverageLayer_PipingInputWithoutCoverLayer_CreateDeterministicDesignVariableForEffectiveThicknessCoverageLayer() { // Setup var inputParameters = new PipingInput(new GeneralPipingInput()); // Call DesignVariable effectiveThicknessCoverageLayer = PipingSemiProbabilisticDesignVariableFactory.GetEffectiveThicknessCoverageLayer(inputParameters); // Assert Assert.IsInstanceOf>(effectiveThicknessCoverageLayer); DistributionAssert.AreEqual(inputParameters.EffectiveThicknessCoverageLayer, effectiveThicknessCoverageLayer.Distribution); Assert.AreEqual(new RoundedDouble(2), effectiveThicknessCoverageLayer.GetDesignValue()); } [Test] public void GetPhreaticLevelExit_ValidPipingCalculation_CreateDesignVariableForPhreaticLevelExit() { // Setup var inputParameters = new PipingInput(new GeneralPipingInput()); // Call DesignVariable freaticLevelExit = PipingSemiProbabilisticDesignVariableFactory.GetPhreaticLevelExit(inputParameters); // Assert Assert.AreSame(inputParameters.PhreaticLevelExit, freaticLevelExit.Distribution); AssertPercentile(0.05, freaticLevelExit); } [Test] public void GetDampingFactorExit_ValidPipingCalculation_CreateDesignVariableForDampingFactorExit() { // Setup var inputParameters = new PipingInput(new GeneralPipingInput()); // Call DesignVariable dampingFactorExit = PipingSemiProbabilisticDesignVariableFactory.GetDampingFactorExit(inputParameters); // Assert Assert.AreSame(inputParameters.DampingFactorExit, dampingFactorExit.Distribution); AssertPercentile(0.95, dampingFactorExit); } #endregion #region Piping parameters [Test] public void GetSeepageLength_ValidPipingCalculation_CreateDesignVariableForSeepageLength() { // Setup var inputParameters = new PipingInput(new GeneralPipingInput()); // Call VariationCoefficientDesignVariable seepageLength = PipingSemiProbabilisticDesignVariableFactory.GetSeepageLength(inputParameters); // Assert DistributionAssert.AreEqual(inputParameters.SeepageLength, seepageLength.Distribution); AssertPercentile(0.05, seepageLength); } [Test] public void GetDiameter70_ValidPipingCalculation_CreateDesignVariableForDiameter70() { // Setup var inputParameters = new PipingInput(new GeneralPipingInput()); // Call VariationCoefficientDesignVariable d70 = PipingSemiProbabilisticDesignVariableFactory.GetDiameter70(inputParameters); // Assert DistributionAssert.AreEqual(inputParameters.Diameter70, d70.Distribution); AssertPercentile(0.05, d70); } [Test] public void GetDarcyPermeability_ValidPipingCalculation_CreateDesignVariableForDarcyPermeability() { // Setup var inputParameters = new PipingInput(new GeneralPipingInput()); // Call VariationCoefficientDesignVariable darcyPermeability = PipingSemiProbabilisticDesignVariableFactory.GetDarcyPermeability(inputParameters); // Assert DistributionAssert.AreEqual(inputParameters.DarcyPermeability, darcyPermeability.Distribution); AssertPercentile(0.95, darcyPermeability); } [Test] public void GetSaturatedVolumicWeightOfCoverageLayer_PipingInputWithCoverLayerWithSaturatedDefinition_CreateDesignVariableForSaturatedVolumicWeightOfCoverageLayer() { // Setup PipingInput inputParameters = PipingInputFactory.CreateInputWithAquiferAndCoverageLayer(); inputParameters.StochasticSoilProfile.SoilProfile.Layers.First().BelowPhreaticLevel = new LogNormalDistribution { Mean = (RoundedDouble) 3.2 }; // Call DesignVariable saturatedVolumicWeightOfCoverageLayer = PipingSemiProbabilisticDesignVariableFactory.GetSaturatedVolumicWeightOfCoverageLayer(inputParameters); // Assert DistributionAssert.AreEqual( inputParameters.SaturatedVolumicWeightOfCoverageLayer, saturatedVolumicWeightOfCoverageLayer.Distribution); AssertPercentile(0.05, saturatedVolumicWeightOfCoverageLayer); } [Test] public void GetSaturatedVolumicWeightOfCoverageLayer_PipingInputWithoutCoverLayer_CreateDeterministicDesignVariableForSaturatedVolumicWeightOfCoverageLayer() { // Setup var inputParameters = new PipingInput(new GeneralPipingInput()); // Call DesignVariable saturatedVolumicWeightOfCoverageLayer = PipingSemiProbabilisticDesignVariableFactory.GetSaturatedVolumicWeightOfCoverageLayer(inputParameters); // Assert Assert.IsInstanceOf>(saturatedVolumicWeightOfCoverageLayer); DistributionAssert.AreEqual(inputParameters.SaturatedVolumicWeightOfCoverageLayer, saturatedVolumicWeightOfCoverageLayer.Distribution); Assert.AreEqual(new RoundedDouble(2), saturatedVolumicWeightOfCoverageLayer.GetDesignValue()); } [Test] public void GetThicknessAquiferLayer_ValidPipingCalculation_CreateDesignVariableForThicknessAquiferLayer() { // Setup var inputParameters = new PipingInput(new GeneralPipingInput()); // Call DesignVariable thicknessAquiferLayer = PipingSemiProbabilisticDesignVariableFactory.GetThicknessAquiferLayer(inputParameters); // Assert DistributionAssert.AreEqual(inputParameters.ThicknessAquiferLayer, thicknessAquiferLayer.Distribution); AssertPercentile(0.95, thicknessAquiferLayer); } #endregion } }