public void CreateOutput_ValidParameters_ReturnsExpectedValues(bool?convergence, CalculationConvergence expectedConvergence)
        {
            // Setup
            const double waterLevel            = 1.1;
            const double waveHeight            = 2.2;
            const double wavePeakPeriod        = 3.3;
            const double waveAngle             = 4.4;
            const double waveDirection         = 5.5;
            const double targetProbability     = 1 / 6.6;
            const double calculatedReliability = -7.7;

            // Call
            WaveConditionsOutput output = WaveConditionsOutputFactory.CreateOutput(waterLevel, waveHeight, wavePeakPeriod,
                                                                                   waveAngle, waveDirection, targetProbability,
                                                                                   calculatedReliability, convergence);

            // Assert
            Assert.AreEqual(waterLevel, output.WaterLevel, output.WaterLevel.GetAccuracy());
            Assert.AreEqual(waveHeight, output.WaveHeight, output.WaveHeight.GetAccuracy());
            Assert.AreEqual(wavePeakPeriod, output.WavePeakPeriod, output.WavePeakPeriod.GetAccuracy());
            Assert.AreEqual(waveAngle, output.WaveAngle, output.WaveAngle.GetAccuracy());
            Assert.AreEqual(waveDirection, output.WaveDirection, output.WaveDirection.GetAccuracy());
            Assert.AreEqual(targetProbability, output.TargetProbability, 1e-6);
            Assert.AreEqual(StatisticsConverter.ProbabilityToReliability(targetProbability), output.TargetReliability, output.TargetReliability.GetAccuracy());
            Assert.AreEqual(calculatedReliability, output.CalculatedReliability, output.CalculatedReliability.GetAccuracy());
            Assert.AreEqual(StatisticsConverter.ReliabilityToProbability(calculatedReliability), output.CalculatedProbability, 1e-6);
            Assert.AreEqual(expectedConvergence, output.CalculationConvergence);
        }
        public void CreateFailedOutput_ValidParameters_ReturnsExpectedValues()
        {
            // Setup
            const double waterLevel        = 1.1;
            const double targetProbability = 1 / 2.2;

            // Call
            WaveConditionsOutput output = WaveConditionsOutputFactory.CreateFailedOutput(waterLevel, targetProbability);

            // Assert
            Assert.AreEqual(waterLevel, output.WaterLevel, output.WaterLevel.GetAccuracy());
            Assert.IsNaN(output.WaveHeight);
            Assert.IsNaN(output.WavePeakPeriod);
            Assert.IsNaN(output.WaveAngle);
            Assert.IsNaN(output.WaveDirection);
            Assert.AreEqual(targetProbability, output.TargetProbability, 1e-6);
            Assert.AreEqual(StatisticsConverter.ProbabilityToReliability(targetProbability), output.TargetReliability, output.TargetReliability.GetAccuracy());
            Assert.IsNaN(output.CalculatedProbability);
            Assert.IsNaN(output.CalculatedReliability);
            Assert.AreEqual(CalculationConvergence.CalculatedNotConverged, output.CalculationConvergence);
        }