Index: Riskeer/Revetment/src/Riskeer.Revetment.Data/Properties/Resources.Designer.cs =================================================================== diff -u -rd1b677c4bef119458dc4ec64058c68dd508578e3 -rca27aad321f52f827c76143342c222946e587f7f --- Riskeer/Revetment/src/Riskeer.Revetment.Data/Properties/Resources.Designer.cs (.../Resources.Designer.cs) (revision d1b677c4bef119458dc4ec64058c68dd508578e3) +++ Riskeer/Revetment/src/Riskeer.Revetment.Data/Properties/Resources.Designer.cs (.../Resources.Designer.cs) (revision ca27aad321f52f827c76143342c222946e587f7f) @@ -82,6 +82,15 @@ } /// + /// Looks up a localized string similar to De waarde voor de stapgrootte moet in het bereik {0} liggen.. + /// + internal static string StepSize_Value_needs_to_be_in_Range_0_ { + get { + return ResourceManager.GetString("StepSize_Value_needs_to_be_in_Range_0_", resourceCulture); + } + } + + /// /// Looks up a localized string similar to De bovengrens van de bekleding moet boven de ondergrens liggen.. /// internal static string WaveConditionsInput_ValidateRevetmentBoundaries_Upper_boundary_revetment_must_be_above_lower_boundary_revetment { Index: Riskeer/Revetment/src/Riskeer.Revetment.Data/Properties/Resources.resx =================================================================== diff -u -rbf1fde9d2147a6eeaecebbb371be2c4856759159 -rca27aad321f52f827c76143342c222946e587f7f --- Riskeer/Revetment/src/Riskeer.Revetment.Data/Properties/Resources.resx (.../Resources.resx) (revision bf1fde9d2147a6eeaecebbb371be2c4856759159) +++ Riskeer/Revetment/src/Riskeer.Revetment.Data/Properties/Resources.resx (.../Resources.resx) (revision ca27aad321f52f827c76143342c222946e587f7f) @@ -132,4 +132,7 @@ 2.0 + + De waarde voor de stapgrootte moet in het bereik {0} liggen. + \ No newline at end of file Index: Riskeer/Revetment/src/Riskeer.Revetment.Data/WaveConditionsInput.cs =================================================================== diff -u -rd1b677c4bef119458dc4ec64058c68dd508578e3 -rca27aad321f52f827c76143342c222946e587f7f --- Riskeer/Revetment/src/Riskeer.Revetment.Data/WaveConditionsInput.cs (.../WaveConditionsInput.cs) (revision d1b677c4bef119458dc4ec64058c68dd508578e3) +++ Riskeer/Revetment/src/Riskeer.Revetment.Data/WaveConditionsInput.cs (.../WaveConditionsInput.cs) (revision ca27aad321f52f827c76143342c222946e587f7f) @@ -44,12 +44,18 @@ new RoundedDouble(orientationNumberOfDecimals), new RoundedDouble(orientationNumberOfDecimals, 360)); + private const int stepSizeNumberOfDecimals = 2; + private static readonly Range stepSizeValidityRange = new Range( + new RoundedDouble(stepSizeNumberOfDecimals, 0.01), + new RoundedDouble(stepSizeNumberOfDecimals, 2.0)); + private ForeshoreProfile foreshoreProfile; private RoundedDouble upperBoundaryRevetment; private RoundedDouble lowerBoundaryRevetment; private RoundedDouble upperBoundaryWaterLevels; private RoundedDouble lowerBoundaryWaterLevels; private RoundedDouble orientation; + private RoundedDouble stepSize; /// /// Creates a new instance of . @@ -60,7 +66,7 @@ upperBoundaryRevetment = new RoundedDouble(2, double.NaN); lowerBoundaryRevetment = new RoundedDouble(2, double.NaN); - StepSize = WaveConditionsInputStepSize.Half; + stepSize = new RoundedDouble(stepSizeNumberOfDecimals, 0.5); upperBoundaryWaterLevels = new RoundedDouble(2, double.NaN); lowerBoundaryWaterLevels = new RoundedDouble(2, double.NaN); WaterLevelType = WaveConditionsInputWaterLevelType.None; @@ -133,8 +139,22 @@ /// /// Gets or sets the step size used for determining water levels. /// - public WaveConditionsInputStepSize StepSize { get; set; } + public RoundedDouble StepSize + { + get => stepSize; + set + { + RoundedDouble newStepSize = value.ToPrecision(stepSizeNumberOfDecimals); + if (double.IsNaN(newStepSize) || !stepSizeValidityRange.InRange(newStepSize)) + { + throw new ArgumentOutOfRangeException(null, string.Format(Resources.StepSize_Value_needs_to_be_in_Range_0_, + stepSizeValidityRange)); + } + stepSize = newStepSize; + } + } + /// /// Gets or sets the lower boundary of the water levels range. /// Index: Riskeer/Revetment/test/Riskeer.Revetment.Data.Test/WaveConditionsInputTest.cs =================================================================== diff -u -rd1b677c4bef119458dc4ec64058c68dd508578e3 -rca27aad321f52f827c76143342c222946e587f7f --- Riskeer/Revetment/test/Riskeer.Revetment.Data.Test/WaveConditionsInputTest.cs (.../WaveConditionsInputTest.cs) (revision d1b677c4bef119458dc4ec64058c68dd508578e3) +++ Riskeer/Revetment/test/Riskeer.Revetment.Data.Test/WaveConditionsInputTest.cs (.../WaveConditionsInputTest.cs) (revision ca27aad321f52f827c76143342c222946e587f7f) @@ -68,7 +68,8 @@ Assert.AreEqual(2, input.LowerBoundaryWaterLevels.NumberOfDecimalPlaces); Assert.IsNaN(input.UpperBoundaryWaterLevels.Value); Assert.AreEqual(2, input.UpperBoundaryWaterLevels.NumberOfDecimalPlaces); - Assert.AreEqual(WaveConditionsInputStepSize.Half, input.StepSize); + Assert.AreEqual(0.5, input.StepSize); + Assert.AreEqual(2, input.StepSize.NumberOfDecimalPlaces); Assert.AreEqual(WaveConditionsInputWaterLevelType.None, input.WaterLevelType); Assert.IsNull(input.CalculationsTargetProbability); } @@ -337,6 +338,46 @@ } [Test] + [TestCase(2.004)] + [TestCase(2.0)] + [TestCase(0.01)] + [TestCase(0.005)] + public void StepSize_ValidValue_NewValueSet(double stepSize) + { + // Setup + var input = new WaveConditionsInput(); + + // Call + input.StepSize = (RoundedDouble) stepSize; + + // Assert + Assert.AreEqual(2, input.StepSize.NumberOfDecimalPlaces); + Assert.AreEqual(stepSize, input.StepSize, input.StepSize.GetAccuracy()); + } + + [Test] + [SetCulture("nl-NL")] + [TestCase(double.NaN)] + [TestCase(5)] + [TestCase(2.01)] + [TestCase(0.004)] + [TestCase(0)] + [TestCase(double.PositiveInfinity)] + [TestCase(double.NegativeInfinity)] + public void StepSize_InvalidValue_ThrowsArgumentOutOfRangeException(double invalidValue) + { + // Setup + var input = new WaveConditionsInput(); + + // Call + void Call() => input.StepSize = (RoundedDouble) invalidValue; + + // Assert + const string message = "De waarde voor de stapgrootte moet in het bereik [0,01, 2,00] liggen."; + TestHelper.AssertThrowsArgumentExceptionAndTestMessage(Call, message); + } + + [Test] public void LowerBoundaryRevetment_SetNewValue_ValueIsRounded() { // Setup