// Copyright (C) Stichting Deltares 2016. 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; using Core.Common.Base.Data; using Core.Common.TestUtil; using NUnit.Framework; using Ringtoets.Common.Data.Probabilistics; using Ringtoets.Common.Data.Structures; using Ringtoets.Common.Data.TestUtil; using Ringtoets.StabilityPointStructures.Data.TestUtil; namespace Ringtoets.StabilityPointStructures.Data.Test { [TestFixture] public class StabilityPointStructuresInputTest { [Test] public void Constructor_ExpectedValues() { // Setup var insideWaterLevelFailureConstruction = new NormalDistribution(2) { Mean = (RoundedDouble) double.NaN, StandardDeviation = (RoundedDouble) 0.1 }; var insideWaterLevel = new NormalDistribution(2) { Mean = (RoundedDouble) double.NaN, StandardDeviation = (RoundedDouble) 0.1 }; var drainCoefficient = new NormalDistribution(2) { Mean = (RoundedDouble) 1, StandardDeviation = (RoundedDouble) 0.2 }; var flowVelocityStructureClosable = new NormalDistribution(2) { Mean = (RoundedDouble) double.NaN, StandardDeviation = (RoundedDouble) 1 }; var levelCrestStructure = new NormalDistribution(2) { Mean = (RoundedDouble) double.NaN, StandardDeviation = (RoundedDouble) 0.05 }; var thresholdHeightOpenWeir = new NormalDistribution(2) { Mean = (RoundedDouble) double.NaN, StandardDeviation = (RoundedDouble) 0.1 }; var areaFlowApertures = new LogNormalDistribution(2) { Mean = (RoundedDouble) double.NaN, StandardDeviation = (RoundedDouble) 0.01 }; var constructiveStrengthLinearLoadModel = new VariationCoefficientLogNormalDistribution(2) { Mean = (RoundedDouble) double.NaN, CoefficientOfVariation = (RoundedDouble) 0.1 }; var constructiveStrengthQuadraticLoadModel = new VariationCoefficientLogNormalDistribution(2) { Mean = (RoundedDouble) double.NaN, CoefficientOfVariation = (RoundedDouble) 0.1 }; var stabilityLinearLoadModel = new VariationCoefficientLogNormalDistribution(2) { Mean = (RoundedDouble) double.NaN, CoefficientOfVariation = (RoundedDouble) 0.1 }; var stabilityQuadraticLoadModel = new VariationCoefficientLogNormalDistribution(2) { Mean = (RoundedDouble) double.NaN, CoefficientOfVariation = (RoundedDouble) 0.1 }; var failureCollisionEnergy = new VariationCoefficientLogNormalDistribution(2) { Mean = (RoundedDouble) double.NaN, CoefficientOfVariation = (RoundedDouble) 0.3 }; var shipMass = new VariationCoefficientNormalDistribution(2) { Mean = (RoundedDouble) double.NaN, CoefficientOfVariation = (RoundedDouble) 0.2 }; var shipVelocity = new VariationCoefficientNormalDistribution(2) { Mean = (RoundedDouble) double.NaN, CoefficientOfVariation = (RoundedDouble) 0.2 }; var bankWidth = new NormalDistribution(2) { Mean = (RoundedDouble) double.NaN, StandardDeviation = (RoundedDouble) double.NaN }; // Call var input = new StabilityPointStructuresInput(); // Assert Assert.IsInstanceOf>(input); AssertEqualValue(9.81, input.VolumicWeightWater); Assert.AreEqual(2, input.VolumicWeightWater.NumberOfDecimalPlaces); DistributionAssert.AreEqual(insideWaterLevelFailureConstruction, input.InsideWaterLevelFailureConstruction); DistributionAssert.AreEqual(insideWaterLevel, input.InsideWaterLevel); Assert.IsNaN(input.FactorStormDurationOpenStructure); Assert.AreEqual(2, input.FactorStormDurationOpenStructure.NumberOfDecimalPlaces); DistributionAssert.AreEqual(drainCoefficient, input.DrainCoefficient); DistributionAssert.AreEqual(flowVelocityStructureClosable, input.FlowVelocityStructureClosable); DistributionAssert.AreEqual(levelCrestStructure, input.LevelCrestStructure); DistributionAssert.AreEqual(thresholdHeightOpenWeir, input.ThresholdHeightOpenWeir); DistributionAssert.AreEqual(areaFlowApertures, input.AreaFlowApertures); DistributionAssert.AreEqual(constructiveStrengthLinearLoadModel, input.ConstructiveStrengthLinearLoadModel); DistributionAssert.AreEqual(constructiveStrengthQuadraticLoadModel, input.ConstructiveStrengthQuadraticLoadModel); DistributionAssert.AreEqual(stabilityLinearLoadModel, input.StabilityLinearLoadModel); DistributionAssert.AreEqual(stabilityQuadraticLoadModel, input.StabilityQuadraticLoadModel); Assert.IsNaN(input.FailureProbabilityRepairClosure); DistributionAssert.AreEqual(failureCollisionEnergy, input.FailureCollisionEnergy); DistributionAssert.AreEqual(shipMass, input.ShipMass); DistributionAssert.AreEqual(shipVelocity, input.ShipVelocity); Assert.AreEqual(0, input.LevellingCount); Assert.AreEqual(double.NaN, input.ProbabilityCollisionSecondaryStructure); DistributionAssert.AreEqual(bankWidth, input.BankWidth); Assert.AreEqual(2, input.EvaluationLevel.NumberOfDecimalPlaces); AssertEqualValue(0, input.EvaluationLevel); Assert.AreEqual(2, input.VerticalDistance.NumberOfDecimalPlaces); AssertEqualValue(double.NaN, input.VerticalDistance); } # region Calculation inputs [Test] [TestCase(StabilityPointStructureInflowModelType.LowSill)] [TestCase(StabilityPointStructureInflowModelType.FloodedCulvert)] public void InflowModelType_SetValue_ReturnSetValue(StabilityPointStructureInflowModelType inflowModelType) { // Setup var input = new StabilityPointStructuresInput(); // Call input.InflowModelType = inflowModelType; // Assert Assert.AreEqual(inflowModelType, input.InflowModelType); } [Test] [TestCase(LoadSchematizationType.Linear)] [TestCase(LoadSchematizationType.Quadratic)] public void LoadSchematizationType_SetValue_ReturnSetValue(LoadSchematizationType type) { // Setup var input = new StabilityPointStructuresInput(); // Call input.LoadSchematizationType = type; // Assert Assert.AreEqual(type, input.LoadSchematizationType); } #endregion #region Hydraulic data [Test] public void Properties_VolumicWeightWater_ExpectedValues() { // Setup var input = new StabilityPointStructuresInput(); var random = new Random(22); RoundedDouble volumicWeightWater = new RoundedDouble(5, random.NextDouble()); // Call input.VolumicWeightWater = volumicWeightWater; // Assert Assert.AreEqual(2, input.VolumicWeightWater.NumberOfDecimalPlaces); AssertEqualValue(volumicWeightWater, input.VolumicWeightWater); } [Test] public void Properties_InsideWaterLevelFailureConstruction_ExpectedValues() { // Setup var random = new Random(22); var input = new StabilityPointStructuresInput(); var mean = (RoundedDouble) (0.01 + random.NextDouble()); var standardDeviation = (RoundedDouble) (0.01 + random.NextDouble()); var expectedDistribution = new NormalDistribution(2) { Mean = mean, StandardDeviation = standardDeviation }; var distributionToSet = new NormalDistribution(5) { Mean = mean, StandardDeviation = standardDeviation }; // Call input.InsideWaterLevelFailureConstruction = distributionToSet; // Assert AssertDistributionCorrectlySet(input.InsideWaterLevelFailureConstruction, distributionToSet, expectedDistribution); } [Test] public void Properties_InsideWaterLevel_ExpectedValues() { // Setup var random = new Random(22); var input = new StabilityPointStructuresInput(); var mean = (RoundedDouble)(0.01 + random.NextDouble()); var standardDeviation = (RoundedDouble)(0.01 + random.NextDouble()); var expectedDistribution = new NormalDistribution(2) { Mean = mean, StandardDeviation = standardDeviation }; var distributionToSet = new NormalDistribution(5) { Mean = mean, StandardDeviation = standardDeviation }; // Call input.InsideWaterLevel = distributionToSet; // Assert AssertDistributionCorrectlySet(input.InsideWaterLevel, distributionToSet, expectedDistribution); } #endregion #region Model inputs [Test] public void Properties_FactorStormDurationOpenStructure_ExpectedValues() { // Setup var input = new StabilityPointStructuresInput(); var random = new Random(22); var factorStormDuration = new RoundedDouble(5, random.NextDouble()); // Call input.FactorStormDurationOpenStructure = factorStormDuration; // Assert Assert.AreEqual(2, input.FactorStormDurationOpenStructure.NumberOfDecimalPlaces); AssertEqualValue(factorStormDuration, input.FactorStormDurationOpenStructure); } [Test] public void Properties_DrainCoefficient_ExpectedValues() { // Setup var random = new Random(22); var input = new StabilityPointStructuresInput(); var mean = (RoundedDouble)(0.01 + random.NextDouble()); var standardDeviation = (RoundedDouble)(0.01 + random.NextDouble()); RoundedDouble initialStd = input.DrainCoefficient.StandardDeviation; var expectedDistribution = new NormalDistribution(2) { Mean = mean, StandardDeviation = initialStd }; var distributionToSet = new NormalDistribution(5) { Mean = mean, StandardDeviation = standardDeviation }; // Call input.DrainCoefficient = distributionToSet; // Assert AssertDistributionCorrectlySet(input.DrainCoefficient, distributionToSet, expectedDistribution); } [Test] public void Properties_FlowVelocityStructureClosable_ExpectedValues() { // Setup var random = new Random(22); var input = new StabilityPointStructuresInput(); var mean = (RoundedDouble)(0.01 + random.NextDouble()); var standardDeviation = (RoundedDouble)(0.01 + random.NextDouble()); var expectedDistribution = new NormalDistribution(2) { Mean = mean, StandardDeviation = standardDeviation }; var distributionToSet = new NormalDistribution(5) { Mean = mean, StandardDeviation = standardDeviation }; // Call input.FlowVelocityStructureClosable = distributionToSet; // Assert AssertDistributionCorrectlySet(input.FlowVelocityStructureClosable, distributionToSet, expectedDistribution); } #endregion #region Schematization [Test] public void Properties_LevelCrestStructure_ExpectedValues() { // Setup var random = new Random(22); var input = new StabilityPointStructuresInput(); var mean = (RoundedDouble)(0.01 + random.NextDouble()); var standardDeviation = (RoundedDouble)(0.01 + random.NextDouble()); var expectedDistribution = new NormalDistribution(2) { Mean = mean, StandardDeviation = standardDeviation }; var distributionToSet = new NormalDistribution(5) { Mean = mean, StandardDeviation = standardDeviation }; // Call input.LevelCrestStructure = distributionToSet; // Assert AssertDistributionCorrectlySet(input.LevelCrestStructure, distributionToSet, expectedDistribution); } [Test] public void Properties_ThresholdHeightOpenWeir_ExpectedValues() { // Setup var random = new Random(22); var input = new StabilityPointStructuresInput(); var mean = (RoundedDouble)(0.01 + random.NextDouble()); var standardDeviation = (RoundedDouble)(0.01 + random.NextDouble()); var expectedDistribution = new NormalDistribution(2) { Mean = mean, StandardDeviation = standardDeviation }; var distributionToSet = new NormalDistribution(5) { Mean = mean, StandardDeviation = standardDeviation }; // Call input.ThresholdHeightOpenWeir = distributionToSet; // Assert AssertDistributionCorrectlySet(input.ThresholdHeightOpenWeir, distributionToSet, expectedDistribution); } [Test] public void Properties_AreaFlowApertures_ExpectedValues() { // Setup var random = new Random(22); var input = new StabilityPointStructuresInput(); var mean = (RoundedDouble)(0.01 + random.NextDouble()); var standardDeviation = (RoundedDouble)(0.01 + random.NextDouble()); var expectedDistribution = new LogNormalDistribution(2) { Mean = mean, StandardDeviation = standardDeviation }; var distributionToSet = new LogNormalDistribution(5) { Mean = mean, StandardDeviation = standardDeviation }; // Call input.AreaFlowApertures = distributionToSet; // Assert AssertDistributionCorrectlySet(input.AreaFlowApertures, distributionToSet, expectedDistribution); } [Test] public void Properties_ConstructiveStrengthLinearLoadModel_ExpectedValues() { // Setup var random = new Random(22); var input = new StabilityPointStructuresInput(); var mean = (RoundedDouble)(0.01 + random.NextDouble()); var variation = (RoundedDouble)(0.01 + random.NextDouble()); var expectedDistribution = new VariationCoefficientLogNormalDistribution(2) { Mean = mean, CoefficientOfVariation = variation }; var distributionToSet = new VariationCoefficientLogNormalDistribution(5) { Mean = mean, CoefficientOfVariation = variation }; // Call input.ConstructiveStrengthLinearLoadModel = distributionToSet; // Assert AssertDistributionCorrectlySet(input.ConstructiveStrengthLinearLoadModel, distributionToSet, expectedDistribution); } [Test] public void Properties_ConstructiveStrengthQuadraticLoadModel_ExpectedValues() { // Setup var random = new Random(22); var input = new StabilityPointStructuresInput(); var mean = (RoundedDouble)(0.01 + random.NextDouble()); var variation = (RoundedDouble)(0.01 + random.NextDouble()); var expectedDistribution = new VariationCoefficientLogNormalDistribution(2) { Mean = mean, CoefficientOfVariation = variation }; var distributionToSet = new VariationCoefficientLogNormalDistribution(5) { Mean = mean, CoefficientOfVariation = variation }; // Call input.ConstructiveStrengthQuadraticLoadModel = distributionToSet; // Assert AssertDistributionCorrectlySet(input.ConstructiveStrengthQuadraticLoadModel, distributionToSet, expectedDistribution); } [Test] public void Properties_StabilityLinearLoadModel_ExpectedValues() { // Setup var random = new Random(22); var input = new StabilityPointStructuresInput(); var mean = (RoundedDouble)(0.01 + random.NextDouble()); var variation = (RoundedDouble)(0.01 + random.NextDouble()); var expectedDistribution = new VariationCoefficientLogNormalDistribution(2) { Mean = mean, CoefficientOfVariation = variation }; var distributionToSet = new VariationCoefficientLogNormalDistribution(5) { Mean = mean, CoefficientOfVariation = variation }; // Call input.StabilityLinearLoadModel = distributionToSet; // Assert AssertDistributionCorrectlySet(input.StabilityLinearLoadModel, distributionToSet, expectedDistribution); } [Test] public void Properties_StabilityQuadraticLoadModel() { // Setup var random = new Random(22); var input = new StabilityPointStructuresInput(); var mean = (RoundedDouble)(0.01 + random.NextDouble()); var variation = (RoundedDouble)(0.01 + random.NextDouble()); var expectedDistribution = new VariationCoefficientLogNormalDistribution(2) { Mean = mean, CoefficientOfVariation = variation }; var distributionToSet = new VariationCoefficientLogNormalDistribution(5) { Mean = mean, CoefficientOfVariation = variation }; // Call input.StabilityQuadraticLoadModel = distributionToSet; // Assert AssertDistributionCorrectlySet(input.StabilityQuadraticLoadModel, distributionToSet, expectedDistribution); } [Test] [TestCase(-1.1)] [TestCase(2)] [TestCase(double.NaN)] public void Properties_FailureProbabilityRepairClosure_ThrowArgumentOutOfRangeException(double probability) { // Setup var input = new StabilityPointStructuresInput(); // Call TestDelegate call = () => input.FailureProbabilityRepairClosure = probability; // Assert TestHelper.AssertThrowsArgumentExceptionAndTestMessage(call, "De waarde voor de faalkans moet in het bereik tussen [0, 1] liggen."); } [Test] [TestCase(0)] [TestCase(0.5)] [TestCase(1.0)] public void Properties_FailureProbabilityRepairClosure_ExpectedValues(double probability) { // Setup var input = new StabilityPointStructuresInput(); // Call input.FailureProbabilityRepairClosure = probability; // Assert Assert.AreEqual(probability, input.FailureProbabilityRepairClosure); } [Test] public void Properties_FailureCollisionEnergy_ExpectedValues() { // Setup var random = new Random(22); var input = new StabilityPointStructuresInput(); var mean = (RoundedDouble)(0.01 + random.NextDouble()); var variation = (RoundedDouble)(0.01 + random.NextDouble()); var expectedDistribution = new VariationCoefficientLogNormalDistribution(2) { Mean = mean, CoefficientOfVariation = variation }; var distributionToSet = new VariationCoefficientLogNormalDistribution(5) { Mean = mean, CoefficientOfVariation = variation }; // Call input.FailureCollisionEnergy = distributionToSet; // Assert AssertDistributionCorrectlySet(input.FailureCollisionEnergy, distributionToSet, expectedDistribution); } [Test] public void Properties_ShipMass_ExpectedValues() { // Setup var random = new Random(22); var input = new StabilityPointStructuresInput(); var mean = (RoundedDouble)(0.01 + random.NextDouble()); var variation = (RoundedDouble)(0.01 + random.NextDouble()); var expectedDistribution = new VariationCoefficientNormalDistribution(2) { Mean = mean, CoefficientOfVariation = variation }; var distributionToSet = new VariationCoefficientNormalDistribution(5) { Mean = mean, CoefficientOfVariation = variation }; // Call input.ShipMass = distributionToSet; // Assert AssertDistributionCorrectlySet(input.ShipMass, distributionToSet, expectedDistribution); } [Test] public void Properties_ShipVelocity_ExpectedValues() { // Setup var random = new Random(22); var input = new StabilityPointStructuresInput(); var mean = (RoundedDouble)(0.01 + random.NextDouble()); var variation = (RoundedDouble)(0.01 + random.NextDouble()); var expectedDistribution = new VariationCoefficientNormalDistribution(2) { Mean = mean, CoefficientOfVariation = variation }; var distributionToSet = new VariationCoefficientNormalDistribution(5) { Mean = mean, CoefficientOfVariation = variation }; // Call input.ShipVelocity = distributionToSet; // Assert AssertDistributionCorrectlySet(input.ShipVelocity, distributionToSet, expectedDistribution); } [Test] public void Properties_LevellingCount_ExpectedValues() { // Setup var input = new StabilityPointStructuresInput(); var random = new Random(22); int levellingCount = random.Next(); // Call input.LevellingCount = levellingCount; // Assert Assert.AreEqual(levellingCount, input.LevellingCount); } [Test] [TestCase(-1.1)] [TestCase(2)] [TestCase(double.NaN)] public void Properties_ProbabilityCollisionSecondaryStructure_ThrowArgumentOutOfRangeException(double probability) { // Setup var input = new StabilityPointStructuresInput(); // Call TestDelegate call = () => input.ProbabilityCollisionSecondaryStructure = probability; // Assert TestHelper.AssertThrowsArgumentExceptionAndTestMessage(call, "Kans moet in het bereik [0, 1] opgegeven worden."); } [Test] [TestCase(0)] [TestCase(0.5)] [TestCase(1.0)] public void Properties_ProbabilityCollisionSecondaryStructure_ExpectedValues(double probability) { // Setup var input = new StabilityPointStructuresInput(); // Call input.ProbabilityCollisionSecondaryStructure = probability; // Assert Assert.AreEqual(probability, input.ProbabilityCollisionSecondaryStructure); } [Test] public void Properties_BankWidth_ExpectedValues() { // Setup var random = new Random(22); var input = new StabilityPointStructuresInput(); var mean = (RoundedDouble)(0.01 + random.NextDouble()); var standardDeviation = (RoundedDouble)(0.01 + random.NextDouble()); var expectedDistribution = new NormalDistribution(2) { Mean = mean, StandardDeviation = standardDeviation }; var distributionToSet = new NormalDistribution(5) { Mean = mean, StandardDeviation = standardDeviation }; // Call input.BankWidth = distributionToSet; // Assert AssertDistributionCorrectlySet(input.BankWidth, distributionToSet, expectedDistribution); } [Test] public void Properties_EvaluationLevel_ExpectedValues() { // Setup var input = new StabilityPointStructuresInput(); var random = new Random(22); var evaluationLevel = new RoundedDouble(5, random.NextDouble()); // Call input.EvaluationLevel = evaluationLevel; // Assert Assert.AreEqual(2, input.EvaluationLevel.NumberOfDecimalPlaces); AssertEqualValue(evaluationLevel, input.EvaluationLevel); } [Test] public void Properties_VerticalDistance_ExpectedValues() { // Setup var input = new StabilityPointStructuresInput(); var random = new Random(22); var verticalDistance = new RoundedDouble(5, random.NextDouble()); // Call input.VerticalDistance = verticalDistance; // Assert Assert.AreEqual(2, input.VerticalDistance.NumberOfDecimalPlaces); AssertEqualValue(verticalDistance, input.VerticalDistance); } [Test] public void Properties_StructureNull_DoesNotChangeValues() { var input = new StabilityPointStructuresInput(); // Call input.Structure = null; // Assert AssertStabilityPointStructure(null, input); } [Test] public void Properties_Structure_UpdateValuesAccordingly() { // Setup var input = new StabilityPointStructuresInput(); TestStabilityPointStructure structure = new TestStabilityPointStructure(); // Call input.Structure = structure; // Assert AssertStabilityPointStructure(structure, input); } #endregion #region Helpers private static void AssertStabilityPointStructure(StabilityPointStructure expectedStructure, StabilityPointStructuresInput input) { if (expectedStructure == null) { Assert.IsNull(input.Structure); var defaultInput = new StabilityPointStructuresInput(); AssertEqualValue(defaultInput.StructureNormalOrientation, input.StructureNormalOrientation); DistributionAssert.AreEqual(defaultInput.AllowedLevelIncreaseStorage, input.AllowedLevelIncreaseStorage); DistributionAssert.AreEqual(defaultInput.AreaFlowApertures, input.AreaFlowApertures); DistributionAssert.AreEqual(defaultInput.BankWidth, input.BankWidth); DistributionAssert.AreEqual(defaultInput.ConstructiveStrengthLinearLoadModel, input.ConstructiveStrengthLinearLoadModel); DistributionAssert.AreEqual(defaultInput.ConstructiveStrengthQuadraticLoadModel, input.ConstructiveStrengthQuadraticLoadModel); DistributionAssert.AreEqual(defaultInput.CriticalOvertoppingDischarge, input.CriticalOvertoppingDischarge); AssertEqualValue(defaultInput.EvaluationLevel, input.EvaluationLevel); DistributionAssert.AreEqual(defaultInput.FailureCollisionEnergy, input.FailureCollisionEnergy); Assert.AreEqual(defaultInput.FailureProbabilityRepairClosure, input.FailureProbabilityRepairClosure); DistributionAssert.AreEqual(defaultInput.FlowVelocityStructureClosable, input.FlowVelocityStructureClosable); DistributionAssert.AreEqual(defaultInput.FlowWidthAtBottomProtection, input.FlowWidthAtBottomProtection); Assert.AreEqual(defaultInput.InflowModelType, input.InflowModelType); DistributionAssert.AreEqual(defaultInput.InsideWaterLevel, input.InsideWaterLevel); DistributionAssert.AreEqual(defaultInput.InsideWaterLevelFailureConstruction, input.InsideWaterLevelFailureConstruction); DistributionAssert.AreEqual(defaultInput.LevelCrestStructure, input.LevelCrestStructure); Assert.AreEqual(defaultInput.LevellingCount, input.LevellingCount); Assert.AreEqual(defaultInput.ProbabilityCollisionSecondaryStructure, input.ProbabilityCollisionSecondaryStructure); DistributionAssert.AreEqual(defaultInput.ShipMass, input.ShipMass); DistributionAssert.AreEqual(defaultInput.ShipVelocity, input.ShipVelocity); DistributionAssert.AreEqual(defaultInput.StabilityLinearLoadModel, input.StabilityLinearLoadModel); DistributionAssert.AreEqual(defaultInput.StabilityQuadraticLoadModel, input.StabilityQuadraticLoadModel); DistributionAssert.AreEqual(defaultInput.StorageStructureArea, input.StorageStructureArea); DistributionAssert.AreEqual(defaultInput.ThresholdHeightOpenWeir, input.ThresholdHeightOpenWeir); AssertEqualValue(defaultInput.VerticalDistance, input.VerticalDistance); DistributionAssert.AreEqual(defaultInput.WidthFlowApertures, input.WidthFlowApertures); } else { DistributionAssert.AreEqual(expectedStructure.AllowedLevelIncreaseStorage, input.AllowedLevelIncreaseStorage); DistributionAssert.AreEqual(expectedStructure.AreaFlowApertures, input.AreaFlowApertures); DistributionAssert.AreEqual(expectedStructure.BankWidth, input.BankWidth); DistributionAssert.AreEqual(expectedStructure.ConstructiveStrengthLinearLoadModel, input.ConstructiveStrengthLinearLoadModel); DistributionAssert.AreEqual(expectedStructure.ConstructiveStrengthQuadraticLoadModel, input.ConstructiveStrengthQuadraticLoadModel); DistributionAssert.AreEqual(expectedStructure.CriticalOvertoppingDischarge, input.CriticalOvertoppingDischarge); AssertEqualValue(expectedStructure.EvaluationLevel, input.EvaluationLevel); DistributionAssert.AreEqual(expectedStructure.FailureCollisionEnergy, input.FailureCollisionEnergy); Assert.AreEqual(expectedStructure.FailureProbabilityRepairClosure, input.FailureProbabilityRepairClosure); DistributionAssert.AreEqual(expectedStructure.FlowVelocityStructureClosable, input.FlowVelocityStructureClosable); DistributionAssert.AreEqual(expectedStructure.FlowWidthAtBottomProtection, input.FlowWidthAtBottomProtection); Assert.AreEqual(expectedStructure.InflowModelType, input.InflowModelType); DistributionAssert.AreEqual(expectedStructure.InsideWaterLevel, input.InsideWaterLevel); DistributionAssert.AreEqual(expectedStructure.InsideWaterLevelFailureConstruction, input.InsideWaterLevelFailureConstruction); DistributionAssert.AreEqual(expectedStructure.LevelCrestStructure, input.LevelCrestStructure); Assert.AreEqual(expectedStructure.LevellingCount, input.LevellingCount); Assert.AreEqual(expectedStructure.ProbabilityCollisionSecondaryStructure, input.ProbabilityCollisionSecondaryStructure); DistributionAssert.AreEqual(expectedStructure.ShipMass, input.ShipMass); DistributionAssert.AreEqual(expectedStructure.ShipVelocity, input.ShipVelocity); DistributionAssert.AreEqual(expectedStructure.StabilityLinearLoadModel, input.StabilityLinearLoadModel); DistributionAssert.AreEqual(expectedStructure.StabilityQuadraticLoadModel, input.StabilityQuadraticLoadModel); DistributionAssert.AreEqual(expectedStructure.StorageStructureArea, input.StorageStructureArea); DistributionAssert.AreEqual(expectedStructure.ThresholdHeightOpenWeir, input.ThresholdHeightOpenWeir); AssertEqualValue(expectedStructure.VerticalDistance, input.VerticalDistance); DistributionAssert.AreEqual(expectedStructure.WidthFlowApertures, input.WidthFlowApertures); } } private static void AssertEqualValue(double expectedValue, RoundedDouble actualValue) { Assert.AreEqual(expectedValue, actualValue, actualValue.GetAccuracy()); } private static void AssertDistributionCorrectlySet(IDistribution distributionToAssert, IDistribution setDistribution, IDistribution expectedDistribution) { Assert.AreNotSame(setDistribution, distributionToAssert); DistributionAssert.AreEqual(expectedDistribution, distributionToAssert); } private static void AssertDistributionCorrectlySet(IVariationCoefficientDistribution distributionToAssert, IVariationCoefficientDistribution setDistribution, IVariationCoefficientDistribution expectedDistribution) { Assert.AreNotSame(setDistribution, distributionToAssert); DistributionAssert.AreEqual(expectedDistribution, distributionToAssert); } #endregion } }