public void GetSubMechanismModelId_Always_ReturnsExpectedValues(int subMechanismModelId, int?expectedSubMechanismModelId)
        {
            // Setup
            var input = new StructuresClosureVerticalWallCalculationInput(111, double.NaN,
                                                                          Enumerable.Empty <HydraRingForelandPoint>(),
                                                                          new HydraRingBreakWater(1, 1.1),
                                                                          1.1, 222, 333, 5.5, 6, 7.7, 8.8, 11, 22, 33, 44, 55,
                                                                          66, 77, 88, 99, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21,
                                                                          22, 23, 24, 25);

            // Call
            int?actualSubMechanismModelId = input.GetSubMechanismModelId(subMechanismModelId);

            // Assert
            Assert.AreEqual(expectedSubMechanismModelId, actualSubMechanismModelId);
        }
        public void Constructor_ExpectedValues()
        {
            // Setup
            const int hydraulicBoundaryLocationId = 1000;
            IEnumerable <HydraRingForelandPoint> forelandPoints = Enumerable.Empty <HydraRingForelandPoint>();
            var breakWater = new HydraRingBreakWater(1, 1.1);

            const double sectionNormal                                  = 31.1;
            const double gravitationalAcceleration                      = 1.1;
            const double factorStormDurationOpenStructure               = 2.2;
            const double failureProbabilityOpenStructure                = 3.3;
            const double failureProbabilityReparation                   = 4.4;
            const int    identicalApertures                             = 5;
            const double allowedLevelIncreaseStorageMean                = 6.6;
            const double allowedLevelIncreaseStorageStandardDeviation   = 7.7;
            const double modelFactorStorageVolumeMean                   = 8.8;
            const double modelFactorStorageVolumeStandardDeviation      = 9.9;
            const double storageStructureAreaMean                       = 10.0;
            const double storageStructureAreaVariation                  = 11.1;
            const double modelFactorInflowVolume                        = 12.2;
            const double flowWidthAtBottomProtectionMean                = 13.3;
            const double flowWidthAtBottomProtectionStandardDeviation   = 14.4;
            const double criticalOvertoppingDischargeMean               = 15.5;
            const double criticalOvertoppingDischargeVariation          = 16.6;
            const double failureProbabilityStructureWithErosion         = 17.7;
            const double stormDurationMean                              = 18.8;
            const double stormDurationVariation                         = 19.9;
            const double probabilityOpenStructureBeforeFlooding         = 20.0;
            const double modelFactorOvertoppingFlowMean                 = 21.1;
            const double modelFactorOvertoppingFlowStandardDeviation    = 22.2;
            const double structureNormalOrientation                     = 23.3;
            const double modelFactorSuperCriticalFlowMean               = 24.4;
            const double modelFactorSuperCriticalFlowStandardDeviation  = 25.5;
            const double levelCrestStructureNotClosingMean              = 26.6;
            const double levelCrestStructureNotClosingStandardDeviation = 27.7;
            const double widthFlowAperturesMean                         = 28.8;
            const double widthFlowAperturesStandardDeviation            = 29.9;
            const double deviationWaveDirection                         = 30.0;

            // Call
            var input = new StructuresClosureVerticalWallCalculationInput(hydraulicBoundaryLocationId,
                                                                          sectionNormal,
                                                                          forelandPoints, breakWater,
                                                                          gravitationalAcceleration,
                                                                          factorStormDurationOpenStructure,
                                                                          failureProbabilityOpenStructure,
                                                                          failureProbabilityReparation,
                                                                          identicalApertures,
                                                                          allowedLevelIncreaseStorageMean, allowedLevelIncreaseStorageStandardDeviation,
                                                                          modelFactorStorageVolumeMean, modelFactorStorageVolumeStandardDeviation,
                                                                          storageStructureAreaMean, storageStructureAreaVariation,
                                                                          modelFactorInflowVolume,
                                                                          flowWidthAtBottomProtectionMean, flowWidthAtBottomProtectionStandardDeviation,
                                                                          criticalOvertoppingDischargeMean, criticalOvertoppingDischargeVariation,
                                                                          failureProbabilityStructureWithErosion,
                                                                          stormDurationMean, stormDurationVariation,
                                                                          probabilityOpenStructureBeforeFlooding,
                                                                          modelFactorOvertoppingFlowMean, modelFactorOvertoppingFlowStandardDeviation,
                                                                          structureNormalOrientation,
                                                                          modelFactorSuperCriticalFlowMean, modelFactorSuperCriticalFlowStandardDeviation,
                                                                          levelCrestStructureNotClosingMean, levelCrestStructureNotClosingStandardDeviation,
                                                                          widthFlowAperturesMean, widthFlowAperturesStandardDeviation,
                                                                          deviationWaveDirection);

            // Assert
            Assert.IsInstanceOf <StructuresClosureCalculationInput>(input);
            Assert.AreEqual(hydraulicBoundaryLocationId, input.HydraulicBoundaryLocationId);
            Assert.AreEqual(1, input.CalculationTypeId);
            Assert.AreEqual(58, input.VariableId);
            Assert.AreEqual(HydraRingFailureMechanismType.StructuresClosure, input.FailureMechanismType);

            HydraRingSection section = input.Section;

            Assert.AreEqual(1, section.SectionId);
            Assert.IsNaN(section.SectionLength);
            Assert.AreEqual(sectionNormal, section.CrossSectionNormal);
            Assert.AreSame(forelandPoints, input.ForelandPoints);
            Assert.AreSame(breakWater, input.BreakWater);
            HydraRingDataEqualityHelper.AreEqual(GetDefaultVariables().ToArray(), input.Variables.ToArray());
        }