Index: Core/Common/src/Core.Common.Base/Data/RoundedDouble.cs =================================================================== diff -u -rb902215a3a5f2ea3547a1c85b1adfc1e11391694 -r7281eec1d929b1495d44b0c18655de9b0c21a392 --- Core/Common/src/Core.Common.Base/Data/RoundedDouble.cs (.../RoundedDouble.cs) (revision b902215a3a5f2ea3547a1c85b1adfc1e11391694) +++ Core/Common/src/Core.Common.Base/Data/RoundedDouble.cs (.../RoundedDouble.cs) (revision 7281eec1d929b1495d44b0c18655de9b0c21a392) @@ -12,7 +12,7 @@ /// number of places. /// [TypeConverter(typeof(RoundedDoubleConverter))] - public struct RoundedDouble : IEquatable, IEquatable + public struct RoundedDouble : IEquatable, IEquatable, IFormattable { /// /// The maximum number of decimal places supported by this class. @@ -144,7 +144,7 @@ return Value.GetHashCode(); } - public override string ToString() + public string ToString(string format, IFormatProvider formatProvider) { if (double.IsPositiveInfinity(value)) { @@ -154,9 +154,15 @@ { return Resources.RoundedDouble_ToString_NegativeInfinity; } - return Value.ToString(GetFormat(), CultureInfo.CurrentCulture); + + return Value.ToString(format ?? GetFormat(), formatProvider ?? CultureInfo.CurrentCulture); } + public override string ToString() + { + return ToString(null, null); + } + public bool Equals(double other) { return Value.Equals(other); Index: Core/Common/test/Core.Common.Base.Test/Data/RoundedDoubleTest.cs =================================================================== diff -u -rb902215a3a5f2ea3547a1c85b1adfc1e11391694 -r7281eec1d929b1495d44b0c18655de9b0c21a392 --- Core/Common/test/Core.Common.Base.Test/Data/RoundedDoubleTest.cs (.../RoundedDoubleTest.cs) (revision b902215a3a5f2ea3547a1c85b1adfc1e11391694) +++ Core/Common/test/Core.Common.Base.Test/Data/RoundedDoubleTest.cs (.../RoundedDoubleTest.cs) (revision 7281eec1d929b1495d44b0c18655de9b0c21a392) @@ -1,5 +1,6 @@ using System; using System.ComponentModel; +using System.Globalization; using System.Linq; using Core.Common.Base.Data; @@ -25,6 +26,7 @@ // Assert Assert.IsInstanceOf>(roundedDouble); Assert.IsInstanceOf>(roundedDouble); + Assert.IsInstanceOf(roundedDouble); Assert.AreEqual(numberOfDecimalPlaces, roundedDouble.NumberOfDecimalPlaces); Assert.AreEqual(0.0, roundedDouble.Value); @@ -180,6 +182,78 @@ } [Test] + [SetCulture("nl-NL")] + [TestCase("N", 1.0, 2, "1,00")] + [TestCase("N0", 123456789.0, 3, "123.456.789")] + [TestCase("N1", 12345678.90, 2, "12.345.678,9")] + [TestCase("N1", 12345678.90, 3, "12.345.678,9")] + [TestCase("G", 1234567.890, 2, "1234567,89")] + [TestCase("G3", 1234567.890, 3, "1,23E+06")] + [TestCase("G9", 123456.7890, 2, "123456,79")] + [TestCase("P3", 12.34567890, 2, "1.235,000 %")] + [TestCase("P1", 12.34567890, 3, "1.234,6 %")] + [TestCase("P", 1.234567890, 2, "123,00 %")] + [TestCase("P3", 1.234567890, 3, "123,500 %")] + [TestCase("F1", 0.1234567890, 2, "0,1")] + [TestCase("F3", 0.1234567890, 3, "0,123")] + [TestCase("F3", 0.01234567890, 2, "0,010")] + [TestCase("F5", 0.01234567890, 3, "0,01200")] + [TestCase("F2", 0.001234567890, 2, "0,00")] + [TestCase("N0", 0.0001234567890, 2, "0")] + [TestCase("N1", 0.0001234567890, 3, "0,0")] + [TestCase("N", double.NaN, 2, "NaN")] + [TestCase("F7", double.NegativeInfinity, 2, "-Oneindig")] + [TestCase("G3", double.PositiveInfinity, 2, "Oneindig")] + public void ToString_WithFormatAndCurrentCultureVariousScenarios_ExpectedText(string format, + double value, int numberOfDecimals, string expectedText) + { + // Setup + var roundedValue = new RoundedDouble(numberOfDecimals, value); + + // Call + string text = roundedValue.ToString(format, null); + + // Assert + Assert.AreEqual(expectedText, text); + } + + [Test] + [SetCulture("nl-NL")] + [TestCase("N", 1.0, 2, "1.00")] + [TestCase("N0", 123456789.0, 3, "123,456,789")] + [TestCase("N1", 12345678.90, 2, "12,345,678.9")] + [TestCase("N1", 12345678.90, 3, "12,345,678.9")] + [TestCase("G", 1234567.890, 2, "1234567.89")] + [TestCase("G3", 1234567.890, 3, "1.23E+06")] + [TestCase("G9", 123456.7890, 2, "123456.79")] + [TestCase("P3", 12.34567890, 2, "1,235.000 %")] + [TestCase("P1", 12.34567890, 3, "1,234.6 %")] + [TestCase("P", 1.234567890, 2, "123.00 %")] + [TestCase("P3", 1.234567890, 3, "123.500 %")] + [TestCase("F1", 0.1234567890, 2, "0.1")] + [TestCase("F3", 0.1234567890, 3, "0.123")] + [TestCase("F3", 0.01234567890, 2, "0.010")] + [TestCase("F5", 0.01234567890, 3, "0.01200")] + [TestCase("F2", 0.001234567890, 2, "0.00")] + [TestCase("N0", 0.0001234567890, 2, "0")] + [TestCase("N1", 0.0001234567890, 3, "0.0")] + [TestCase("N", double.NaN, 2, "NaN")] + [TestCase("F7", double.NegativeInfinity, 2, "-Oneindig")] + [TestCase("G3", double.PositiveInfinity, 2, "Oneindig")] + public void ToString_WithFormatAndDifferentCultureVariousScenarios_ExpectedText(string format, + double value, int numberOfDecimals, string expectedText) + { + // Setup + var roundedValue = new RoundedDouble(numberOfDecimals, value); + + // Call + string text = roundedValue.ToString(format, CultureInfo.GetCultureInfo("en-GB")); + + // Assert + Assert.AreEqual(expectedText, text); + } + + [Test] public void Equals_ToNull_ReturnFalse() { // Setup Index: Ringtoets/Piping/src/Ringtoets.Piping.Forms/PropertyClasses/PipingSemiProbabilisticOutputProperties.cs =================================================================== diff -u -rd5326f028bd3c83dc0479606ea1e2e1ead914e29 -r7281eec1d929b1495d44b0c18655de9b0c21a392 --- Ringtoets/Piping/src/Ringtoets.Piping.Forms/PropertyClasses/PipingSemiProbabilisticOutputProperties.cs (.../PipingSemiProbabilisticOutputProperties.cs) (revision d5326f028bd3c83dc0479606ea1e2e1ead914e29) +++ Ringtoets/Piping/src/Ringtoets.Piping.Forms/PropertyClasses/PipingSemiProbabilisticOutputProperties.cs (.../PipingSemiProbabilisticOutputProperties.cs) (revision 7281eec1d929b1495d44b0c18655de9b0c21a392) @@ -178,9 +178,9 @@ } } - private static string ToProbabilityFormat(RoundedDouble requiredProbability) + private static string ToProbabilityFormat(RoundedDouble probability) { - return string.Format(CoreCommonResources.ProbabilityPerYearFormat, requiredProbability.Value); + return string.Format(CoreCommonResources.ProbabilityPerYearFormat, probability); } } } \ No newline at end of file Index: Ringtoets/Piping/test/Ringtoets.Piping.Forms.Test/PropertyClasses/PipingSemiProbabilisticOutputPropertiesTest.cs =================================================================== diff -u -rd5326f028bd3c83dc0479606ea1e2e1ead914e29 -r7281eec1d929b1495d44b0c18655de9b0c21a392 --- Ringtoets/Piping/test/Ringtoets.Piping.Forms.Test/PropertyClasses/PipingSemiProbabilisticOutputPropertiesTest.cs (.../PipingSemiProbabilisticOutputPropertiesTest.cs) (revision d5326f028bd3c83dc0479606ea1e2e1ead914e29) +++ Ringtoets/Piping/test/Ringtoets.Piping.Forms.Test/PropertyClasses/PipingSemiProbabilisticOutputPropertiesTest.cs (.../PipingSemiProbabilisticOutputPropertiesTest.cs) (revision 7281eec1d929b1495d44b0c18655de9b0c21a392) @@ -20,25 +20,26 @@ Assert.IsInstanceOf>(properties); Assert.IsNull(properties.Data); } - + [Test] public void GetProperties_WithData_ReturnExpectedValues() { // Setup var random = new Random(22); + var bigFactor = 1000000; double upliftFactorOfSafety = random.NextDouble(); double upliftReliability = random.NextDouble(); - double upliftProbability = random.NextDouble(); + double upliftProbability = random.NextDouble() * bigFactor; double heaveFactorOfSafety = random.NextDouble(); double heaveReliability = random.NextDouble(); - double heaveProbability = random.NextDouble(); + double heaveProbability = random.NextDouble() * bigFactor; double sellmeijerFactorOfSafety = random.NextDouble(); double sellmeijerReliability = random.NextDouble(); - double sellmeijerProbability = random.NextDouble(); + double sellmeijerProbability = random.NextDouble() * bigFactor; double requiredProbability = random.NextDouble(); double requiredReliability = random.NextDouble(); - double pipingProbability = random.NextDouble(); - double pipingReliability = random.NextDouble(); + double pipingProbability = random.NextDouble() * bigFactor; + double pipingReliability = random.NextDouble() * bigFactor; double pipingFactorOfSafety = random.NextDouble(); // Call @@ -67,18 +68,70 @@ var probabilityFormat = "1/{0:n0}"; Assert.AreEqual(upliftFactorOfSafety, properties.UpliftFactorOfSafety, properties.UpliftFactorOfSafety.GetAccuracy()); Assert.AreEqual(upliftReliability, properties.UpliftReliability, properties.UpliftReliability.GetAccuracy()); - Assert.AreEqual(string.Format(probabilityFormat, upliftProbability), properties.UpliftProbability, properties.UpliftProbability); + Assert.AreEqual(string.Format(probabilityFormat, upliftProbability), properties.UpliftProbability); Assert.AreEqual(heaveFactorOfSafety, properties.HeaveFactorOfSafety, properties.HeaveFactorOfSafety.GetAccuracy()); Assert.AreEqual(heaveReliability, properties.HeaveReliability, properties.HeaveReliability.GetAccuracy()); - Assert.AreEqual(string.Format(probabilityFormat, heaveProbability), properties.HeaveProbability, properties.HeaveProbability); + Assert.AreEqual(string.Format(probabilityFormat, heaveProbability), properties.HeaveProbability); Assert.AreEqual(sellmeijerFactorOfSafety, properties.SellmeijerFactorOfSafety, properties.SellmeijerFactorOfSafety.GetAccuracy()); Assert.AreEqual(sellmeijerReliability, properties.SellmeijerReliability, properties.SellmeijerReliability.GetAccuracy()); - Assert.AreEqual(string.Format(probabilityFormat, sellmeijerProbability), properties.SellmeijerProbability, properties.SellmeijerProbability); - Assert.AreEqual(string.Format(probabilityFormat, requiredProbability), properties.RequiredProbability, properties.RequiredProbability); + Assert.AreEqual(string.Format(probabilityFormat, sellmeijerProbability), properties.SellmeijerProbability); + Assert.AreEqual(string.Format(probabilityFormat, requiredProbability), properties.RequiredProbability); Assert.AreEqual(requiredReliability, properties.RequiredReliability, properties.RequiredReliability.GetAccuracy()); - Assert.AreEqual(string.Format(probabilityFormat, pipingProbability), properties.PipingProbability, properties.PipingProbability); + Assert.AreEqual(string.Format(probabilityFormat, pipingProbability), properties.PipingProbability); Assert.AreEqual(pipingReliability, properties.PipingReliability, properties.PipingReliability.GetAccuracy()); Assert.AreEqual(pipingFactorOfSafety, properties.PipingFactorOfSafety, properties.PipingFactorOfSafety.GetAccuracy()); } + + [Test] + public void GetProperties_WithInfinityValues_ReturnTranslatedFormat() + { + // Setup + var random = new Random(22); + double upliftFactorOfSafety = random.NextDouble(); + double upliftReliability = random.NextDouble(); + double heaveFactorOfSafety = random.NextDouble(); + double heaveReliability = random.NextDouble(); + double sellmeijerFactorOfSafety = random.NextDouble(); + double sellmeijerReliability = random.NextDouble(); + double requiredReliability = random.NextDouble(); + double pipingReliability = random.NextDouble(); + double pipingFactorOfSafety = random.NextDouble(); + + double upliftProbability = double.PositiveInfinity; + double heaveProbability = double.PositiveInfinity; + double sellmeijerProbability = double.PositiveInfinity; + double requiredProbability = double.PositiveInfinity; + double pipingProbability = double.PositiveInfinity; + + // Call + var semiProbabilisticOutput = new PipingSemiProbabilisticOutput( + upliftFactorOfSafety, + upliftReliability, + upliftProbability, + heaveFactorOfSafety, + heaveReliability, + heaveProbability, + sellmeijerFactorOfSafety, + sellmeijerReliability, + sellmeijerProbability, + requiredProbability, + requiredReliability, + pipingProbability, + pipingReliability, + pipingFactorOfSafety); + + var properties = new PipingSemiProbabilisticOutputProperties + { + Data = semiProbabilisticOutput + }; + + // Call & Assert + var probability = "1/Oneindig"; + Assert.AreEqual(probability, properties.UpliftProbability); + Assert.AreEqual(probability, properties.HeaveProbability); + Assert.AreEqual(probability, properties.SellmeijerProbability); + Assert.AreEqual(probability, properties.RequiredProbability); + Assert.AreEqual(probability, properties.PipingProbability); + } } } \ No newline at end of file