// 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
}
}