// Copyright (C) Stichting Deltares 2017. 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 System.Collections.Generic; using System.IO; using System.Linq; using System.Threading; using Application.Ringtoets.Storage.Create; using Application.Ringtoets.Storage.DbContext; using Application.Ringtoets.Storage.TestUtil; using Core.Common.Base.Geometry; using Core.Common.Base.Storage; using Core.Common.Gui; using Core.Common.Gui.Forms.MainWindow; using Core.Common.Gui.Settings; using Core.Common.TestUtil; using NUnit.Framework; using Rhino.Mocks; using Ringtoets.ClosingStructures.Data; using Ringtoets.Common.Data; using Ringtoets.Common.Data.AssessmentSection; using Ringtoets.Common.Data.Calculation; using Ringtoets.Common.Data.Contribution; using Ringtoets.Common.Data.DikeProfiles; using Ringtoets.Common.Data.FailureMechanism; using Ringtoets.Common.Data.Hydraulics; using Ringtoets.Common.Data.IllustrationPoints; using Ringtoets.Common.Data.Probabilistics; using Ringtoets.Common.Data.Probability; using Ringtoets.Common.Data.Structures; using Ringtoets.Common.Data.TestUtil; using Ringtoets.DuneErosion.Data; using Ringtoets.GrassCoverErosionInwards.Data; using Ringtoets.GrassCoverErosionOutwards.Data; using Ringtoets.HeightStructures.Data; using Ringtoets.Integration.Data; using Ringtoets.Integration.Data.StandAlone.SectionResults; using Ringtoets.MacroStabilityInwards.Data; using Ringtoets.MacroStabilityInwards.Data.SoilProfile; using Ringtoets.MacroStabilityInwards.Primitives; using Ringtoets.Piping.Data; using Ringtoets.Piping.Data.SoilProfile; using Ringtoets.Piping.Primitives; using Ringtoets.Revetment.Data; using Ringtoets.StabilityPointStructures.Data; using Ringtoets.StabilityStoneCover.Data; using Ringtoets.WaveImpactAsphaltCover.Data; namespace Application.Ringtoets.Storage.Test.IntegrationTests { [TestFixture] public class StorageSqLiteIntegrationTest { private const string tempExtension = ".temp"; private DirectoryDisposeHelper directoryDisposeHelper; [Test] public void SaveProjectAs_DuplicateItemsInProjectSaveAsNewFile_ProjectAsEntitiesInFile() { // Setup RingtoetsProject fullProject = RingtoetsProjectTestHelper.GetFullTestProject(); RingtoetsProject duplicateProject = RingtoetsProjectTestHelper.GetFullTestProject(); AssessmentSection duplicateAssessmentSection = duplicateProject.AssessmentSections.First(); fullProject.AssessmentSections.Add(duplicateAssessmentSection); string ringtoetsFile = GetRandomRingtoetsFile(); var storage = new StorageSqLite(); storage.StageProject(fullProject); // Call storage.SaveProjectAs(ringtoetsFile); var firstProject = (RingtoetsProject) storage.LoadProject(ringtoetsFile); // Assert AssertProjectsAreEqual(fullProject, firstProject); } [Test] public void SaveProjectAs_SaveAsNewFile_ProjectAsEntitiesInBothFiles() { // Setup RingtoetsProject fullProject = RingtoetsProjectTestHelper.GetFullTestProject(); string firstRingtoetsFile = GetRandomRingtoetsFile(); string secondRingtoetsFile = GetRandomRingtoetsFile(); var storage = new StorageSqLite(); storage.StageProject(fullProject); storage.SaveProjectAs(firstRingtoetsFile); // Call storage.StageProject(fullProject); storage.SaveProjectAs(secondRingtoetsFile); var firstProject = (RingtoetsProject) storage.LoadProject(firstRingtoetsFile); var secondProject = (RingtoetsProject) storage.LoadProject(secondRingtoetsFile); // Assert AssertProjectsAreEqual(firstProject, secondProject); } [Test] public void GivenRingtoetsProject_WhenComparingFingerPrintsVariousScenariosUnchangedData_ThenFingerprintUnchanged() { // Given RingtoetsProject fullProject = RingtoetsProjectTestHelper.GetFullTestProject(); string tempRingtoetsFile = GetRandomRingtoetsFile(); // When ProjectEntity entityBeforeSave = fullProject.Create(new PersistenceRegistry()); byte[] hash1 = FingerprintHelper.Get(entityBeforeSave); var storage = new StorageSqLite(); storage.StageProject(fullProject); storage.SaveProjectAs(tempRingtoetsFile); ProjectEntity entityAfterSave = fullProject.Create(new PersistenceRegistry()); byte[] hash2 = FingerprintHelper.Get(entityAfterSave); var openedProject = (RingtoetsProject) storage.LoadProject(tempRingtoetsFile); ProjectEntity entityAfterOpening = openedProject.Create(new PersistenceRegistry()); byte[] hash3 = FingerprintHelper.Get(entityAfterOpening); // Then CollectionAssert.AreEqual(hash1, hash2); CollectionAssert.AreEqual(hash1, hash3); } [Test] public void LoadProject_FullTestProjectSaved_ProjectAsEntitiesInNewStorage() { // Setup var storage = new StorageSqLite(); RingtoetsProject fullProject = RingtoetsProjectTestHelper.GetFullTestProject(); storage.StageProject(fullProject); string tempRingtoetsFile = GetRandomRingtoetsFile(); storage.SaveProjectAs(tempRingtoetsFile); // Call var loadedProject = (RingtoetsProject) storage.LoadProject(tempRingtoetsFile); // Assert AssertProjectsAreEqual(fullProject, loadedProject); } [Test] [Apartment(ApartmentState.STA)] [TestCase(null)] [TestCase("")] [TestCase(" ")] public void GivenRingtoetsGuiWithStorageSqlAndMigrator_WhenRunWithEmptyFile_DefaultProjectStillSet(string testFile) { // Given var mocks = new MockRepository(); var projectMigrator = mocks.Stub(); mocks.ReplayAll(); var projectStore = new StorageSqLite(); using (var gui = new GuiCore(new MainWindow(), projectStore, projectMigrator, new RingtoetsProjectFactory(), new GuiCoreSettings())) { // When gui.Run(testFile); // Then Assert.AreEqual(null, gui.ProjectFilePath); Assert.NotNull(gui.Project); Assert.AreEqual("Project", gui.Project.Name); Assert.IsEmpty(gui.Project.Description); Assert.IsInstanceOf(gui.Project); CollectionAssert.IsEmpty(((RingtoetsProject) gui.Project).AssessmentSections); } mocks.VerifyAll(); } [Test] [Apartment(ApartmentState.STA)] public void GivenRingtoetsGuiWithStorageSqlAndMigrator_WhenRunWithValidFile_ProjectSet() { // Given string tempRingtoetsFile = GetRandomRingtoetsFile(); string expectedProjectName = Path.GetFileNameWithoutExtension(tempRingtoetsFile); var mocks = new MockRepository(); var projectMigrator = mocks.Stub(); projectMigrator.Stub(pm => pm.ShouldMigrate(tempRingtoetsFile)).Return(MigrationRequired.No); mocks.ReplayAll(); var projectStore = new StorageSqLite(); RingtoetsProject fullProject = RingtoetsProjectTestHelper.GetFullTestProject(); string expectedProjectDescription = fullProject.Description; SqLiteDatabaseHelper.CreateValidRingtoetsDatabase(tempRingtoetsFile, fullProject); using (var gui = new GuiCore(new MainWindow(), projectStore, projectMigrator, new RingtoetsProjectFactory(), new GuiCoreSettings())) { // When Action action = () => gui.Run(tempRingtoetsFile); // Then var expectedMessages = new[] { Tuple.Create("Openen van project is gestart.", LogLevelConstant.Info), Tuple.Create("Openen van project is gelukt.", LogLevelConstant.Info) }; TestHelper.AssertLogMessagesWithLevelAreGenerated(action, expectedMessages, 3); Assert.AreEqual(tempRingtoetsFile, gui.ProjectFilePath); Assert.NotNull(gui.Project); Assert.AreEqual(expectedProjectName, gui.Project.Name); Assert.AreEqual(expectedProjectDescription, gui.Project.Description); Assert.IsInstanceOf(gui.Project); AssertProjectsAreEqual(fullProject, (RingtoetsProject) gui.Project); } mocks.VerifyAll(); } [OneTimeSetUp] public void SetUp() { directoryDisposeHelper = new DirectoryDisposeHelper(TestHelper.GetScratchPadPath(), nameof(StorageSqLiteIntegrationTest)); } [OneTimeTearDown] public void TearDown() { GC.Collect(); GC.WaitForPendingFinalizers(); directoryDisposeHelper.Dispose(); } private static string GetRandomRingtoetsFile() { return Path.Combine(TestHelper.GetScratchPadPath(), nameof(StorageSqLiteIntegrationTest), string.Concat(Path.GetRandomFileName(), tempExtension)); } private static void AssertProjectsAreEqual(RingtoetsProject expectedProject, RingtoetsProject actualProject) { Assert.NotNull(expectedProject); Assert.NotNull(actualProject); Assert.AreNotSame(expectedProject, actualProject); List expectedProjectAssessmentSections = expectedProject.AssessmentSections; List actualProjectAssessmentSections = actualProject.AssessmentSections; Assert.AreEqual(expectedProjectAssessmentSections.Count, actualProjectAssessmentSections.Count); for (var i = 0; i < expectedProjectAssessmentSections.Count; i++) { AssessmentSection expectedAssessmentSection = expectedProjectAssessmentSections[i]; AssessmentSection actualAssessmentSection = actualProjectAssessmentSections[i]; Assert.AreEqual(expectedAssessmentSection.Id, actualAssessmentSection.Id); Assert.AreEqual(expectedAssessmentSection.Name, actualAssessmentSection.Name); AssertComments(expectedAssessmentSection.Comments, actualAssessmentSection.Comments); FailureMechanismContribution expectedContribution = expectedAssessmentSection.FailureMechanismContribution; FailureMechanismContribution actualContribution = actualAssessmentSection.FailureMechanismContribution; Assert.AreEqual(expectedContribution.LowerLimitNorm, actualContribution.LowerLimitNorm); Assert.AreEqual(expectedContribution.SignalingNorm, actualContribution.SignalingNorm); Assert.AreEqual(expectedContribution.NormativeNorm, actualContribution.NormativeNorm); BackgroundDataTestHelper.AssertBackgroundData(expectedAssessmentSection.BackgroundData, actualAssessmentSection.BackgroundData); AssertHydraulicBoundaryDatabase(expectedAssessmentSection.HydraulicBoundaryDatabase, actualAssessmentSection.HydraulicBoundaryDatabase); AssertReferenceLine(expectedAssessmentSection.ReferenceLine, actualAssessmentSection.ReferenceLine); AssertPipingFailureMechanism(expectedAssessmentSection.Piping, actualAssessmentSection.Piping); AssertMacroStabilityInwardsFailureMechanism(expectedAssessmentSection.MacroStabilityInwards, actualAssessmentSection.MacroStabilityInwards); AssertGrassCoverErosionInwardsFailureMechanism(expectedAssessmentSection.GrassCoverErosionInwards, actualAssessmentSection.GrassCoverErosionInwards); AssertGrassCoverErosionOutwardsFailureMechanism(expectedAssessmentSection.GrassCoverErosionOutwards, actualAssessmentSection.GrassCoverErosionOutwards); AssertStabilityStoneCoverFailureMechanism(expectedAssessmentSection.StabilityStoneCover, actualAssessmentSection.StabilityStoneCover); AssertWaveImpactAsphaltCoverFailureMechanism(expectedAssessmentSection.WaveImpactAsphaltCover, actualAssessmentSection.WaveImpactAsphaltCover); AssertHeightStructuresFailureMechanism(expectedAssessmentSection.HeightStructures, actualAssessmentSection.HeightStructures); AssertClosingStructuresFailureMechanism(expectedAssessmentSection.ClosingStructures, actualAssessmentSection.ClosingStructures); AssertDuneErosionFailureMechanism(expectedAssessmentSection.DuneErosion, actualAssessmentSection.DuneErosion); AssertStabilityPointStructuresFailureMechanism(expectedAssessmentSection.StabilityPointStructures, actualAssessmentSection.StabilityPointStructures); IFailureMechanism[] expectedProjectFailureMechanisms = expectedAssessmentSection.GetFailureMechanisms().ToArray(); IFailureMechanism[] actualProjectFailureMechanisms = actualAssessmentSection.GetFailureMechanisms().ToArray(); for (var fmi = 0; fmi < expectedProjectFailureMechanisms.Length; fmi++) { AssertFailureMechanism(expectedProjectFailureMechanisms[fmi], actualProjectFailureMechanisms[fmi]); } AssertFailureMechanismSectionResults( expectedAssessmentSection.Piping.SectionResults, actualAssessmentSection.Piping.SectionResults); AssertFailureMechanismSectionResults( expectedAssessmentSection.GrassCoverErosionInwards.SectionResults, actualAssessmentSection.GrassCoverErosionInwards.SectionResults); AssertFailureMechanismSectionResults( expectedAssessmentSection.HeightStructures.SectionResults, actualAssessmentSection.HeightStructures.SectionResults); AssertFailureMechanismSectionResults( expectedAssessmentSection.StrengthStabilityLengthwiseConstruction.SectionResults, actualAssessmentSection.StrengthStabilityLengthwiseConstruction.SectionResults); AssertFailureMechanismSectionResults( expectedAssessmentSection.TechnicalInnovation.SectionResults, actualAssessmentSection.TechnicalInnovation.SectionResults); AssertFailureMechanismSectionResults( expectedAssessmentSection.WaterPressureAsphaltCover.SectionResults, actualAssessmentSection.WaterPressureAsphaltCover.SectionResults); AssertFailureMechanismSectionResults( expectedAssessmentSection.ClosingStructures.SectionResults, actualAssessmentSection.ClosingStructures.SectionResults); AssertFailureMechanismSectionResults( expectedAssessmentSection.MacrostabilityOutwards.SectionResults, actualAssessmentSection.MacrostabilityOutwards.SectionResults); AssertFailureMechanismSectionResults( expectedAssessmentSection.MacroStabilityInwards.SectionResults, actualAssessmentSection.MacroStabilityInwards.SectionResults); AssertFailureMechanismSectionResults( expectedAssessmentSection.WaveImpactAsphaltCover.SectionResults, actualAssessmentSection.WaveImpactAsphaltCover.SectionResults); AssertFailureMechanismSectionResults( expectedAssessmentSection.GrassCoverErosionOutwards.SectionResults, actualAssessmentSection.GrassCoverErosionOutwards.SectionResults); AssertFailureMechanismSectionResults( expectedAssessmentSection.GrassCoverSlipOffInwards.SectionResults, actualAssessmentSection.GrassCoverSlipOffInwards.SectionResults); AssertFailureMechanismSectionResults( expectedAssessmentSection.GrassCoverSlipOffOutwards.SectionResults, actualAssessmentSection.GrassCoverSlipOffOutwards.SectionResults); AssertFailureMechanismSectionResults( expectedAssessmentSection.Microstability.SectionResults, actualAssessmentSection.Microstability.SectionResults); AssertFailureMechanismSectionResults( expectedAssessmentSection.PipingStructure.SectionResults, actualAssessmentSection.PipingStructure.SectionResults); AssertFailureMechanismSectionResults( expectedAssessmentSection.DuneErosion.SectionResults, actualAssessmentSection.DuneErosion.SectionResults); AssertFailureMechanismSectionResults( expectedAssessmentSection.StabilityStoneCover.SectionResults, actualAssessmentSection.StabilityStoneCover.SectionResults); AssertFailureMechanismSectionResults( expectedAssessmentSection.StabilityPointStructures.SectionResults, actualAssessmentSection.StabilityPointStructures.SectionResults); } } private static void AssertFailureMechanismSectionResults( IEnumerable expectedSectionResults, IEnumerable actualSectionResults) { AssertCollectionAndItems(expectedSectionResults, actualSectionResults, (expectedItem, actualItem) => { Assert.AreEqual(expectedItem.AssessmentLayerOne, actualItem.AssessmentLayerOne); Assert.AreEqual(expectedItem.AssessmentLayerThree, actualItem.AssessmentLayerThree); }); } private static void AssertFailureMechanismSectionResults( IEnumerable expectedSectionResults, IEnumerable actualSectionResults) { AssertCollectionAndItems(expectedSectionResults, actualSectionResults, (expectedItem, actualItem) => { Assert.AreEqual(expectedItem.AssessmentLayerOne, actualItem.AssessmentLayerOne); Assert.AreEqual(expectedItem.AssessmentLayerThree, actualItem.AssessmentLayerThree); }); } private static void AssertFailureMechanismSectionResults( IEnumerable expectedSectionResults, IEnumerable actualSectionResults) { AssertCollectionAndItems(expectedSectionResults, actualSectionResults, (expectedItem, actualItem) => { Assert.AreEqual(expectedItem.AssessmentLayerOne, actualItem.AssessmentLayerOne); Assert.AreEqual(expectedItem.AssessmentLayerThree, actualItem.AssessmentLayerThree); }); } private static void AssertFailureMechanismSectionResults( IEnumerable expectedSectionResults, IEnumerable actualSectionResults) { AssertCollectionAndItems(expectedSectionResults, actualSectionResults, (expectedItem, actualItem) => { Assert.AreEqual(expectedItem.AssessmentLayerOne, actualItem.AssessmentLayerOne); Assert.AreEqual(expectedItem.AssessmentLayerTwoA, actualItem.AssessmentLayerTwoA); Assert.AreEqual(expectedItem.AssessmentLayerThree, actualItem.AssessmentLayerThree); }); } private static void AssertFailureMechanismSectionResults( IEnumerable expectedSectionResults, IEnumerable actualSectionResults) { AssertCollectionAndItems(expectedSectionResults, actualSectionResults, (expectedItem, actualItem) => { Assert.AreEqual(expectedItem.AssessmentLayerOne, actualItem.AssessmentLayerOne); Assert.AreEqual(expectedItem.AssessmentLayerTwoA, actualItem.AssessmentLayerTwoA); Assert.AreEqual(expectedItem.AssessmentLayerThree, actualItem.AssessmentLayerThree); }); } private static void AssertFailureMechanismSectionResults( IEnumerable expectedSectionResults, IEnumerable actualSectionResults) { AssertCollectionAndItems(expectedSectionResults, actualSectionResults, (expectedItem, actualItem) => { Assert.AreEqual(expectedItem.AssessmentLayerOne, actualItem.AssessmentLayerOne); Assert.AreEqual(expectedItem.AssessmentLayerTwoA, actualItem.AssessmentLayerTwoA); Assert.AreEqual(expectedItem.AssessmentLayerThree, actualItem.AssessmentLayerThree); }); } private static void AssertFailureMechanismSectionResults( IEnumerable expectedSectionResults, IEnumerable actualSectionResults) { AssertCollectionAndItems(expectedSectionResults, actualSectionResults, (expectedItem, actualItem) => { Assert.AreEqual(expectedItem.AssessmentLayerOne, actualItem.AssessmentLayerOne); Assert.AreEqual(expectedItem.AssessmentLayerTwoA, actualItem.AssessmentLayerTwoA); Assert.AreEqual(expectedItem.AssessmentLayerThree, actualItem.AssessmentLayerThree); }); } private static void AssertFailureMechanismSectionResults( IEnumerable expectedSectionResults, IEnumerable actualSectionResults) { AssertCollectionAndItems(expectedSectionResults, actualSectionResults, (expectedItem, actualItem) => { Assert.AreEqual(expectedItem.AssessmentLayerOne, actualItem.AssessmentLayerOne); Assert.AreEqual(expectedItem.AssessmentLayerTwoA, actualItem.AssessmentLayerTwoA); Assert.AreEqual(expectedItem.AssessmentLayerThree, actualItem.AssessmentLayerThree); }); } private static void AssertFailureMechanism(IFailureMechanism expectedFailureMechanism, IFailureMechanism actualFailureMechanism) { Assert.AreEqual(expectedFailureMechanism.Name, actualFailureMechanism.Name); Assert.AreEqual(expectedFailureMechanism.Code, actualFailureMechanism.Code); Assert.AreEqual(expectedFailureMechanism.IsRelevant, actualFailureMechanism.IsRelevant); AssertFailureMechanismSections(expectedFailureMechanism.Sections, actualFailureMechanism.Sections); } private static void AssertFailureMechanismSections(IEnumerable expectedSections, IEnumerable actualSections) { AssertCollectionAndItems(expectedSections, actualSections, (expectedItem, actualItem) => { Assert.AreEqual(expectedItem.Name, actualItem.Name); CollectionAssert.AreEqual(expectedItem.Points, actualItem.Points); }); } private static void AssertReferenceLine(ReferenceLine expectedReferenceLine, ReferenceLine actualReferenceLine) { Assert.IsNotNull(expectedReferenceLine); CollectionAssert.AreEqual(expectedReferenceLine.Points, actualReferenceLine.Points); } private static void AssertSegmentPoints(IEnumerable expectedSoilModelSegmentPoints, IEnumerable actualSoilModelSegmentPoints) { Assert.Greater(expectedSoilModelSegmentPoints.Count(), 0); CollectionAssert.AreEqual(expectedSoilModelSegmentPoints, actualSoilModelSegmentPoints); } private static void AssertCalculationGroup(CalculationGroup expectedRootCalculationGroup, CalculationGroup actualRootCalculationGroup) { Assert.AreEqual(expectedRootCalculationGroup.Name, actualRootCalculationGroup.Name); Assert.AreEqual(expectedRootCalculationGroup.Children.Count, actualRootCalculationGroup.Children.Count); for (var i = 0; i < expectedRootCalculationGroup.Children.Count; i++) { ICalculationBase expectedChild = expectedRootCalculationGroup.Children[i]; ICalculationBase actualChild = actualRootCalculationGroup.Children[i]; Assert.AreEqual(expectedChild.GetType(), actualChild.GetType()); var expectedChildGroup = expectedChild as CalculationGroup; if (expectedChildGroup != null) { AssertCalculationGroup(expectedChildGroup, (CalculationGroup) actualChild); } var expectedPipingCalculation = expectedChild as PipingCalculationScenario; if (expectedPipingCalculation != null) { AssertPipingCalculationScenario(expectedPipingCalculation, (PipingCalculationScenario) actualChild); } var expectedMacroStabilityInwardsCalculation = expectedChild as MacroStabilityInwardsCalculationScenario; if (expectedMacroStabilityInwardsCalculation != null) { AssertMacroStabilityInwardsCalculationScenario(expectedMacroStabilityInwardsCalculation, (MacroStabilityInwardsCalculationScenario) actualChild); } var expectedGrassCoverErosionInwardsCalculation = expectedChild as GrassCoverErosionInwardsCalculation; if (expectedGrassCoverErosionInwardsCalculation != null) { AssertGrassCoverErosionInwardsCalculation(expectedGrassCoverErosionInwardsCalculation, (GrassCoverErosionInwardsCalculation) actualChild); } var expectedGrassCoverErosionOutwardsCalculation = expectedChild as GrassCoverErosionOutwardsWaveConditionsCalculation; if (expectedGrassCoverErosionOutwardsCalculation != null) { AssertGrassCoverErosionOutwardsWaveConditionsCalculation(expectedGrassCoverErosionOutwardsCalculation, (GrassCoverErosionOutwardsWaveConditionsCalculation) actualChild); } var expectedHeightStructuresCalculation = expectedChild as StructuresCalculation; if (expectedHeightStructuresCalculation != null) { AssertStructuresCalculation(expectedHeightStructuresCalculation, (StructuresCalculation) actualChild); } var expectedClosingStructuresCalculation = expectedChild as StructuresCalculation; if (expectedClosingStructuresCalculation != null) { AssertStructuresCalculation(expectedClosingStructuresCalculation, (StructuresCalculation) actualChild); } var expectedStabilityPointStructuresCalculation = expectedChild as StructuresCalculation; if (expectedStabilityPointStructuresCalculation != null) { AssertStructuresCalculation(expectedStabilityPointStructuresCalculation, (StructuresCalculation) actualChild); } var expectedStabilityStoneCoverWaveConditionsCalculation = expectedChild as StabilityStoneCoverWaveConditionsCalculation; if (expectedStabilityStoneCoverWaveConditionsCalculation != null) { AssertStabilityStoneCoverWaveConditionsCalculation(expectedStabilityStoneCoverWaveConditionsCalculation, (StabilityStoneCoverWaveConditionsCalculation) actualChild); } var expectedWaveImpactAsphaltCoverWaveConditionsCalculation = expectedChild as WaveImpactAsphaltCoverWaveConditionsCalculation; if (expectedWaveImpactAsphaltCoverWaveConditionsCalculation != null) { AssertWaveImpactAsphaltCoverWaveConditionsCalculation(expectedWaveImpactAsphaltCoverWaveConditionsCalculation, (WaveImpactAsphaltCoverWaveConditionsCalculation) actualChild); } } } private static void AssertProbabilityAssessmentOutput(ProbabilityAssessmentOutput expectedOutput, ProbabilityAssessmentOutput actualOutput) { Assert.AreEqual(expectedOutput.FactorOfSafety, actualOutput.FactorOfSafety); Assert.AreEqual(expectedOutput.Probability, actualOutput.Probability); Assert.AreEqual(expectedOutput.Reliability, actualOutput.Reliability); Assert.AreEqual(expectedOutput.RequiredProbability, actualOutput.RequiredProbability); Assert.AreEqual(expectedOutput.RequiredReliability, actualOutput.RequiredReliability); } private static void AssertWaveConditionsInput(WaveConditionsInput expectedInput, WaveConditionsInput actualInput) { AssertReferencedObject(() => expectedInput.ForeshoreProfile, () => actualInput.ForeshoreProfile, AssertForeshoreProfile); AssertReferencedObject(() => expectedInput.HydraulicBoundaryLocation, () => actualInput.HydraulicBoundaryLocation, AssertHydraulicBoundaryLocation); AssertBreakWater(expectedInput.BreakWater, actualInput.BreakWater); Assert.AreEqual(expectedInput.Orientation, actualInput.Orientation); Assert.AreEqual(expectedInput.UseBreakWater, actualInput.UseBreakWater); Assert.AreEqual(expectedInput.UseForeshore, actualInput.UseForeshore); Assert.AreEqual(expectedInput.UpperBoundaryRevetment, actualInput.UpperBoundaryRevetment); Assert.AreEqual(expectedInput.LowerBoundaryRevetment, actualInput.LowerBoundaryRevetment); Assert.AreEqual(expectedInput.UpperBoundaryWaterLevels, actualInput.UpperBoundaryWaterLevels); Assert.AreEqual(expectedInput.LowerBoundaryWaterLevels, actualInput.LowerBoundaryWaterLevels); Assert.AreEqual(expectedInput.StepSize, actualInput.StepSize); } private static void AssertWaveConditionsOutputs(IEnumerable expectedOutputs, IEnumerable actualOutputs) { AssertCollectionAndItems(expectedOutputs, actualOutputs, AssertWaveConditionsOutput); } private static void AssertWaveConditionsOutput(WaveConditionsOutput expectedOutput, WaveConditionsOutput actualOutput) { Assert.AreEqual(expectedOutput.WaterLevel, actualOutput.WaterLevel, expectedOutput.WaterLevel.GetAccuracy()); Assert.AreEqual(expectedOutput.WaveHeight, actualOutput.WaveHeight, expectedOutput.WaveHeight.GetAccuracy()); Assert.AreEqual(expectedOutput.WavePeakPeriod, actualOutput.WavePeakPeriod, expectedOutput.WavePeakPeriod.GetAccuracy()); Assert.AreEqual(expectedOutput.WaveAngle, actualOutput.WaveAngle, expectedOutput.WaveAngle.GetAccuracy()); Assert.AreEqual(expectedOutput.WaveDirection, actualOutput.WaveDirection, expectedOutput.WaveDirection.GetAccuracy()); Assert.AreEqual(expectedOutput.TargetProbability, actualOutput.TargetProbability); Assert.AreEqual(expectedOutput.TargetReliability, actualOutput.TargetReliability, expectedOutput.TargetReliability.GetAccuracy()); Assert.AreEqual(expectedOutput.CalculatedProbability, actualOutput.CalculatedProbability); Assert.AreEqual(expectedOutput.CalculatedReliability, actualOutput.CalculatedReliability, expectedOutput.CalculatedReliability.GetAccuracy()); Assert.AreEqual(expectedOutput.CalculationConvergence, actualOutput.CalculationConvergence); } private static void AssertDikeProfiles(DikeProfileCollection expectedDikeProfiles, DikeProfileCollection actualDikeProfiles) { Assert.AreEqual(expectedDikeProfiles.SourcePath, actualDikeProfiles.SourcePath); AssertCollectionAndItems(expectedDikeProfiles, actualDikeProfiles, AssertDikeProfile); } private static void AssertDikeProfile(DikeProfile expectedDikeProfile, DikeProfile actualDikeProfile) { Assert.AreEqual(expectedDikeProfile.Name, actualDikeProfile.Name); Assert.AreEqual(expectedDikeProfile.WorldReferencePoint, actualDikeProfile.WorldReferencePoint); Assert.AreEqual(expectedDikeProfile.X0, actualDikeProfile.X0); Assert.AreEqual(expectedDikeProfile.Orientation, actualDikeProfile.Orientation); AssertBreakWater(expectedDikeProfile.BreakWater, actualDikeProfile.BreakWater); CollectionAssert.AreEqual(expectedDikeProfile.ForeshoreGeometry, actualDikeProfile.ForeshoreGeometry); AssertRoughnessPoints(expectedDikeProfile.DikeGeometry, actualDikeProfile.DikeGeometry); Assert.AreEqual(expectedDikeProfile.DikeHeight, actualDikeProfile.DikeHeight); } private static void AssertForeshoreProfiles(ForeshoreProfileCollection expectedForeshoreProfiles, ForeshoreProfileCollection actualForeshoreProfiles) { Assert.AreEqual(expectedForeshoreProfiles.SourcePath, actualForeshoreProfiles.SourcePath); AssertCollectionAndItems(expectedForeshoreProfiles, actualForeshoreProfiles, AssertForeshoreProfile); } private static void AssertForeshoreProfile(ForeshoreProfile expectedDikeProfile, ForeshoreProfile actualDikeProfile) { Assert.AreEqual(expectedDikeProfile.Name, actualDikeProfile.Name); Assert.AreEqual(expectedDikeProfile.WorldReferencePoint, actualDikeProfile.WorldReferencePoint); Assert.AreEqual(expectedDikeProfile.X0, actualDikeProfile.X0); Assert.AreEqual(expectedDikeProfile.Orientation, actualDikeProfile.Orientation); AssertBreakWater(expectedDikeProfile.BreakWater, actualDikeProfile.BreakWater); CollectionAssert.AreEqual(expectedDikeProfile.Geometry, actualDikeProfile.Geometry); } private static void AssertBreakWater(BreakWater expectedBreakWater, BreakWater actualBreakWater) { if (expectedBreakWater == null) { Assert.IsNull(actualBreakWater); } else { Assert.AreEqual(expectedBreakWater.Height, actualBreakWater.Height); Assert.AreEqual(expectedBreakWater.Type, actualBreakWater.Type); } } private static void AssertRoughnessPoints(IEnumerable expectedRoughnessPoints, IEnumerable actualRoughnessPoints) { AssertCollectionAndItems(expectedRoughnessPoints, actualRoughnessPoints, AssertRoughnessPoint); } private static void AssertRoughnessPoint(RoughnessPoint expectedRoughnessPoint, RoughnessPoint actualRoughnessPoint) { Assert.AreEqual(expectedRoughnessPoint.Point, actualRoughnessPoint.Point); Assert.AreEqual(expectedRoughnessPoint.Roughness, actualRoughnessPoint.Roughness); } private static void AssertComments(Comment expectedComments, Comment actualComments) { Assert.AreEqual(expectedComments.Body, actualComments.Body); } private static void AssertStructureInputBase(StructuresInputBase expectedInput, StructuresInputBase actualInput) where T : StructureBase { AssertReferencedObject(() => expectedInput.ForeshoreProfile, () => actualInput.ForeshoreProfile, AssertForeshoreProfile); AssertReferencedObject(() => expectedInput.HydraulicBoundaryLocation, () => actualInput.HydraulicBoundaryLocation, AssertHydraulicBoundaryLocation); Assert.AreEqual(expectedInput.StructureNormalOrientation, actualInput.StructureNormalOrientation); DistributionAssert.AreEqual(expectedInput.ModelFactorSuperCriticalFlow, actualInput.ModelFactorSuperCriticalFlow); DistributionAssert.AreEqual(expectedInput.AllowedLevelIncreaseStorage, actualInput.AllowedLevelIncreaseStorage); DistributionAssert.AreEqual(expectedInput.StorageStructureArea, actualInput.StorageStructureArea); DistributionAssert.AreEqual(expectedInput.FlowWidthAtBottomProtection, actualInput.FlowWidthAtBottomProtection); DistributionAssert.AreEqual(expectedInput.CriticalOvertoppingDischarge, actualInput.CriticalOvertoppingDischarge); Assert.AreEqual(expectedInput.FailureProbabilityStructureWithErosion, actualInput.FailureProbabilityStructureWithErosion); DistributionAssert.AreEqual(expectedInput.WidthFlowApertures, actualInput.WidthFlowApertures); DistributionAssert.AreEqual(expectedInput.StormDuration, actualInput.StormDuration); Assert.AreEqual(expectedInput.UseBreakWater, actualInput.UseBreakWater); AssertBreakWater(expectedInput.BreakWater, actualInput.BreakWater); } /// /// Asserts two collections with items of on the /// length of the collections and whether the items are equal according to /// . /// /// The item type to assert. /// The expected collection to assert /// against to. /// The actual collection to assert. /// The action to compare items in the collection /// against each other. /// Thrown when the collections are /// not of equal length or when the items within the collection are not equal. private static void AssertCollectionAndItems(IEnumerable expectedCollection, IEnumerable actualCollection, Action assertAction) { T[] expectedArray = expectedCollection.ToArray(); T[] actualArray = actualCollection.ToArray(); int expectedNrOfItems = expectedArray.Length; Assert.AreEqual(expectedNrOfItems, actualArray.Length); for (var i = 0; i < expectedNrOfItems; i++) { assertAction(expectedArray[i], actualArray[i]); } } /// /// Asserts two referenced objects of and whether /// the objects are equal. /// /// The type to assert. /// The function to perform to retrieve the expected object. /// The function to perform to retrieve the actual object /// The action to compare the objects against each other. /// Thrown when the items are not equal. private static void AssertReferencedObject(Func getExpectedReference, Func getActualReference, Action assertAction) { T expectedReferenceValue = getExpectedReference(); if (expectedReferenceValue == null) { Assert.IsNull(getActualReference()); } else { assertAction(expectedReferenceValue, getActualReference()); } } #region StabilityPointStructures FailureMechanism private static void AssertStabilityPointStructuresFailureMechanism(StabilityPointStructuresFailureMechanism expectedFailureMechanism, StabilityPointStructuresFailureMechanism actualFailureMechanism) { Assert.AreEqual(expectedFailureMechanism.GeneralInput.N, actualFailureMechanism.GeneralInput.N); AssertForeshoreProfiles(expectedFailureMechanism.ForeshoreProfiles, actualFailureMechanism.ForeshoreProfiles); AssertStabilityPointStructures(expectedFailureMechanism.StabilityPointStructures, actualFailureMechanism.StabilityPointStructures); AssertCalculationGroup(expectedFailureMechanism.CalculationsGroup, actualFailureMechanism.CalculationsGroup); AssertComments(expectedFailureMechanism.InputComments, actualFailureMechanism.InputComments); AssertComments(expectedFailureMechanism.OutputComments, actualFailureMechanism.OutputComments); AssertComments(expectedFailureMechanism.NotRelevantComments, actualFailureMechanism.NotRelevantComments); } private static void AssertFailureMechanismSectionResults(IEnumerable expectedSectionResults, IEnumerable actualSectionResults) { AssertCollectionAndItems(expectedSectionResults, actualSectionResults, (expectedItem, actualItem) => { Assert.AreEqual(expectedItem.AssessmentLayerOne, actualItem.AssessmentLayerOne); Assert.AreEqual(expectedItem.AssessmentLayerTwoA, actualItem.AssessmentLayerTwoA); Assert.AreEqual(expectedItem.AssessmentLayerThree, actualItem.AssessmentLayerThree); if (expectedItem.Calculation == null) { Assert.IsNull(actualItem.Calculation); } else { AssertStructuresCalculation(expectedItem.Calculation, actualItem.Calculation); } }); } private static void AssertStabilityPointStructures(StructureCollection expectedStabilityPointStructures, StructureCollection actualStabilityPointStructures) { Assert.AreEqual(expectedStabilityPointStructures.Count, actualStabilityPointStructures.Count); for (var i = 0; i < expectedStabilityPointStructures.Count; i++) { AssertStabilityPointStructure(expectedStabilityPointStructures[i], actualStabilityPointStructures[i]); } } private static void AssertStabilityPointStructure(StabilityPointStructure expectedStabilityPointStructure, StabilityPointStructure actualStabilityPointStructure) { Assert.AreEqual(expectedStabilityPointStructure.Name, actualStabilityPointStructure.Name); Assert.AreEqual(expectedStabilityPointStructure.Id, actualStabilityPointStructure.Id); Assert.AreEqual(expectedStabilityPointStructure.Location, actualStabilityPointStructure.Location); Assert.AreEqual(expectedStabilityPointStructure.StructureNormalOrientation, actualStabilityPointStructure.StructureNormalOrientation); DistributionAssert.AreEqual(expectedStabilityPointStructure.StorageStructureArea, actualStabilityPointStructure.StorageStructureArea); DistributionAssert.AreEqual(expectedStabilityPointStructure.AllowedLevelIncreaseStorage, actualStabilityPointStructure.AllowedLevelIncreaseStorage); DistributionAssert.AreEqual(expectedStabilityPointStructure.WidthFlowApertures, actualStabilityPointStructure.WidthFlowApertures); DistributionAssert.AreEqual(expectedStabilityPointStructure.InsideWaterLevel, actualStabilityPointStructure.InsideWaterLevel); DistributionAssert.AreEqual(expectedStabilityPointStructure.ThresholdHeightOpenWeir, actualStabilityPointStructure.ThresholdHeightOpenWeir); DistributionAssert.AreEqual(expectedStabilityPointStructure.CriticalOvertoppingDischarge, actualStabilityPointStructure.CriticalOvertoppingDischarge); DistributionAssert.AreEqual(expectedStabilityPointStructure.FlowWidthAtBottomProtection, actualStabilityPointStructure.FlowWidthAtBottomProtection); DistributionAssert.AreEqual(expectedStabilityPointStructure.ConstructiveStrengthLinearLoadModel, actualStabilityPointStructure.ConstructiveStrengthLinearLoadModel); DistributionAssert.AreEqual(expectedStabilityPointStructure.ConstructiveStrengthQuadraticLoadModel, actualStabilityPointStructure.ConstructiveStrengthQuadraticLoadModel); DistributionAssert.AreEqual(expectedStabilityPointStructure.BankWidth, actualStabilityPointStructure.BankWidth); DistributionAssert.AreEqual(expectedStabilityPointStructure.InsideWaterLevelFailureConstruction, actualStabilityPointStructure.InsideWaterLevelFailureConstruction); Assert.AreEqual(expectedStabilityPointStructure.EvaluationLevel, actualStabilityPointStructure.EvaluationLevel); DistributionAssert.AreEqual(expectedStabilityPointStructure.LevelCrestStructure, actualStabilityPointStructure.LevelCrestStructure); Assert.AreEqual(expectedStabilityPointStructure.VerticalDistance, actualStabilityPointStructure.VerticalDistance); Assert.AreEqual(expectedStabilityPointStructure.FailureProbabilityRepairClosure, actualStabilityPointStructure.FailureProbabilityRepairClosure); DistributionAssert.AreEqual(expectedStabilityPointStructure.FailureCollisionEnergy, actualStabilityPointStructure.FailureCollisionEnergy); DistributionAssert.AreEqual(expectedStabilityPointStructure.ShipMass, actualStabilityPointStructure.ShipMass); DistributionAssert.AreEqual(expectedStabilityPointStructure.ShipVelocity, actualStabilityPointStructure.ShipVelocity); Assert.AreEqual(expectedStabilityPointStructure.LevellingCount, actualStabilityPointStructure.LevellingCount); Assert.AreEqual(expectedStabilityPointStructure.ProbabilityCollisionSecondaryStructure, actualStabilityPointStructure.ProbabilityCollisionSecondaryStructure); DistributionAssert.AreEqual(expectedStabilityPointStructure.FlowVelocityStructureClosable, actualStabilityPointStructure.FlowVelocityStructureClosable); DistributionAssert.AreEqual(expectedStabilityPointStructure.StabilityLinearLoadModel, actualStabilityPointStructure.StabilityLinearLoadModel); DistributionAssert.AreEqual(expectedStabilityPointStructure.StabilityQuadraticLoadModel, actualStabilityPointStructure.StabilityQuadraticLoadModel); DistributionAssert.AreEqual(expectedStabilityPointStructure.AreaFlowApertures, actualStabilityPointStructure.AreaFlowApertures); Assert.AreEqual(expectedStabilityPointStructure.InflowModelType, actualStabilityPointStructure.InflowModelType); } private static void AssertStructuresCalculation(StructuresCalculation expectedCalculation, StructuresCalculation actualCalculation) { Assert.AreEqual(expectedCalculation.Name, actualCalculation.Name); AssertComments(expectedCalculation.Comments, actualCalculation.Comments); AssertStabilityPointStructuresInput(expectedCalculation.InputParameters, actualCalculation.InputParameters); if (!expectedCalculation.HasOutput) { Assert.IsFalse(actualCalculation.HasOutput); return; } StructuresOutput expectedOutput = expectedCalculation.Output; StructuresOutput actualOutput = actualCalculation.Output; Assert.IsNotNull(actualOutput); AssertProbabilityAssessmentOutput(expectedOutput.ProbabilityAssessmentOutput, actualOutput.ProbabilityAssessmentOutput); AssertGeneralResultTopLevelFaultTreeIllustrationPoint( expectedOutput.GeneralResult, actualOutput.GeneralResult); } private static void AssertStabilityPointStructuresInput(StabilityPointStructuresInput expectedInput, StabilityPointStructuresInput actualInput) { AssertStructureInputBase(expectedInput, actualInput); AssertReferencedObject(() => expectedInput.Structure, () => actualInput.Structure, AssertStabilityPointStructure); DistributionAssert.AreEqual(expectedInput.InsideWaterLevel, actualInput.InsideWaterLevel); DistributionAssert.AreEqual(expectedInput.ThresholdHeightOpenWeir, actualInput.ThresholdHeightOpenWeir); DistributionAssert.AreEqual(expectedInput.ConstructiveStrengthLinearLoadModel, actualInput.ConstructiveStrengthLinearLoadModel); DistributionAssert.AreEqual(expectedInput.ConstructiveStrengthQuadraticLoadModel, actualInput.ConstructiveStrengthQuadraticLoadModel); DistributionAssert.AreEqual(expectedInput.BankWidth, actualInput.BankWidth); DistributionAssert.AreEqual(expectedInput.InsideWaterLevelFailureConstruction, actualInput.InsideWaterLevelFailureConstruction); Assert.AreEqual(expectedInput.EvaluationLevel, actualInput.EvaluationLevel); DistributionAssert.AreEqual(expectedInput.LevelCrestStructure, actualInput.LevelCrestStructure); Assert.AreEqual(expectedInput.VerticalDistance, actualInput.VerticalDistance); Assert.AreEqual(expectedInput.FailureProbabilityRepairClosure, actualInput.FailureProbabilityRepairClosure); DistributionAssert.AreEqual(expectedInput.FailureCollisionEnergy, actualInput.FailureCollisionEnergy); DistributionAssert.AreEqual(expectedInput.ShipMass, actualInput.ShipMass); DistributionAssert.AreEqual(expectedInput.ShipVelocity, actualInput.ShipVelocity); Assert.AreEqual(expectedInput.LevellingCount, actualInput.LevellingCount); Assert.AreEqual(expectedInput.ProbabilityCollisionSecondaryStructure, actualInput.ProbabilityCollisionSecondaryStructure); DistributionAssert.AreEqual(expectedInput.FlowVelocityStructureClosable, actualInput.FlowVelocityStructureClosable); DistributionAssert.AreEqual(expectedInput.StabilityLinearLoadModel, actualInput.StabilityLinearLoadModel); DistributionAssert.AreEqual(expectedInput.StabilityQuadraticLoadModel, actualInput.StabilityQuadraticLoadModel); DistributionAssert.AreEqual(expectedInput.AreaFlowApertures, actualInput.AreaFlowApertures); Assert.AreEqual(expectedInput.InflowModelType, actualInput.InflowModelType); Assert.AreEqual(expectedInput.LoadSchematizationType, actualInput.LoadSchematizationType); Assert.AreEqual(expectedInput.VolumicWeightWater, actualInput.VolumicWeightWater); Assert.AreEqual(expectedInput.FactorStormDurationOpenStructure, actualInput.FactorStormDurationOpenStructure); DistributionAssert.AreEqual(expectedInput.DrainCoefficient, actualInput.DrainCoefficient); } #endregion #region ClosingStructures FailureMechanism private static void AssertClosingStructuresFailureMechanism(ClosingStructuresFailureMechanism expectedFailureMechanism, ClosingStructuresFailureMechanism actualFailureMechanism) { Assert.AreEqual(expectedFailureMechanism.GeneralInput.N2A, actualFailureMechanism.GeneralInput.N2A); AssertForeshoreProfiles(expectedFailureMechanism.ForeshoreProfiles, actualFailureMechanism.ForeshoreProfiles); AssertClosingStructures(expectedFailureMechanism.ClosingStructures, actualFailureMechanism.ClosingStructures); AssertCalculationGroup(expectedFailureMechanism.CalculationsGroup, actualFailureMechanism.CalculationsGroup); AssertComments(expectedFailureMechanism.InputComments, actualFailureMechanism.InputComments); AssertComments(expectedFailureMechanism.OutputComments, actualFailureMechanism.OutputComments); AssertComments(expectedFailureMechanism.NotRelevantComments, actualFailureMechanism.NotRelevantComments); } private static void AssertFailureMechanismSectionResults(IEnumerable expectedSectionResults, IEnumerable actualSectionResults) { AssertCollectionAndItems(expectedSectionResults, actualSectionResults, (expectedItem, actualItem) => { Assert.AreEqual(expectedItem.AssessmentLayerOne, actualItem.AssessmentLayerOne); Assert.AreEqual(expectedItem.AssessmentLayerTwoA, actualItem.AssessmentLayerTwoA); Assert.AreEqual(expectedItem.AssessmentLayerThree, actualItem.AssessmentLayerThree); if (expectedItem.Calculation == null) { Assert.IsNull(actualItem.Calculation); } else { AssertStructuresCalculation(expectedItem.Calculation, actualItem.Calculation); } }); } private static void AssertClosingStructures(StructureCollection expectedClosingStructures, StructureCollection actualClosingStructures) { Assert.AreEqual(expectedClosingStructures.SourcePath, actualClosingStructures.SourcePath); AssertCollectionAndItems(expectedClosingStructures, actualClosingStructures, AssertClosingStructure); } private static void AssertClosingStructure(ClosingStructure expectedClosingStructure, ClosingStructure actualClosingStructure) { Assert.AreEqual(expectedClosingStructure.Name, actualClosingStructure.Name); Assert.AreEqual(expectedClosingStructure.Id, actualClosingStructure.Id); Assert.AreEqual(expectedClosingStructure.Location, actualClosingStructure.Location); Assert.AreEqual(expectedClosingStructure.StructureNormalOrientation, actualClosingStructure.StructureNormalOrientation); DistributionAssert.AreEqual(expectedClosingStructure.StorageStructureArea, actualClosingStructure.StorageStructureArea); DistributionAssert.AreEqual(expectedClosingStructure.AllowedLevelIncreaseStorage, actualClosingStructure.AllowedLevelIncreaseStorage); DistributionAssert.AreEqual(expectedClosingStructure.WidthFlowApertures, actualClosingStructure.WidthFlowApertures); DistributionAssert.AreEqual(expectedClosingStructure.LevelCrestStructureNotClosing, actualClosingStructure.LevelCrestStructureNotClosing); DistributionAssert.AreEqual(expectedClosingStructure.InsideWaterLevel, actualClosingStructure.InsideWaterLevel); DistributionAssert.AreEqual(expectedClosingStructure.ThresholdHeightOpenWeir, actualClosingStructure.ThresholdHeightOpenWeir); DistributionAssert.AreEqual(expectedClosingStructure.AreaFlowApertures, actualClosingStructure.AreaFlowApertures); DistributionAssert.AreEqual(expectedClosingStructure.CriticalOvertoppingDischarge, actualClosingStructure.CriticalOvertoppingDischarge); DistributionAssert.AreEqual(expectedClosingStructure.FlowWidthAtBottomProtection, actualClosingStructure.FlowWidthAtBottomProtection); Assert.AreEqual(expectedClosingStructure.ProbabilityOrFrequencyOpenStructureBeforeFlooding, actualClosingStructure.ProbabilityOrFrequencyOpenStructureBeforeFlooding); Assert.AreEqual(expectedClosingStructure.FailureProbabilityOpenStructure, actualClosingStructure.FailureProbabilityOpenStructure); Assert.AreEqual(expectedClosingStructure.IdenticalApertures, actualClosingStructure.IdenticalApertures); Assert.AreEqual(expectedClosingStructure.FailureProbabilityReparation, actualClosingStructure.FailureProbabilityReparation); Assert.AreEqual(expectedClosingStructure.InflowModelType, actualClosingStructure.InflowModelType); } private static void AssertStructuresCalculation(StructuresCalculation expectedCalculation, StructuresCalculation actualCalculation) { Assert.AreEqual(expectedCalculation.Name, actualCalculation.Name); AssertComments(expectedCalculation.Comments, actualCalculation.Comments); AssertClosingStructuresInput(expectedCalculation.InputParameters, actualCalculation.InputParameters); if (!expectedCalculation.HasOutput) { Assert.IsFalse(actualCalculation.HasOutput); return; } StructuresOutput expectedOutput = expectedCalculation.Output; StructuresOutput actualOutput = actualCalculation.Output; Assert.IsNotNull(actualOutput); AssertProbabilityAssessmentOutput(expectedOutput.ProbabilityAssessmentOutput, actualOutput.ProbabilityAssessmentOutput); AssertGeneralResultTopLevelFaultTreeIllustrationPoint( expectedOutput.GeneralResult, actualOutput.GeneralResult); } private static void AssertClosingStructuresInput(ClosingStructuresInput expectedInput, ClosingStructuresInput actualInput) { AssertStructureInputBase(expectedInput, actualInput); AssertReferencedObject(() => expectedInput.Structure, () => actualInput.Structure, AssertClosingStructure); Assert.AreEqual(expectedInput.InflowModelType, actualInput.InflowModelType); DistributionAssert.AreEqual(expectedInput.InsideWaterLevel, actualInput.InsideWaterLevel); Assert.AreEqual(expectedInput.DeviationWaveDirection, actualInput.DeviationWaveDirection); DistributionAssert.AreEqual(expectedInput.DrainCoefficient, actualInput.DrainCoefficient); Assert.AreEqual(expectedInput.FactorStormDurationOpenStructure, actualInput.FactorStormDurationOpenStructure); DistributionAssert.AreEqual(expectedInput.ThresholdHeightOpenWeir, actualInput.ThresholdHeightOpenWeir); DistributionAssert.AreEqual(expectedInput.AreaFlowApertures, actualInput.AreaFlowApertures); Assert.AreEqual(expectedInput.FailureProbabilityOpenStructure, actualInput.FailureProbabilityOpenStructure); Assert.AreEqual(expectedInput.FailureProbabilityReparation, actualInput.FailureProbabilityReparation); Assert.AreEqual(expectedInput.IdenticalApertures, actualInput.IdenticalApertures); DistributionAssert.AreEqual(expectedInput.LevelCrestStructureNotClosing, actualInput.LevelCrestStructureNotClosing); Assert.AreEqual(expectedInput.ProbabilityOrFrequencyOpenStructureBeforeFlooding, actualInput.ProbabilityOrFrequencyOpenStructureBeforeFlooding); } #endregion #region DuneErosion FailureMechanism private static void AssertDuneErosionFailureMechanism(DuneErosionFailureMechanism expectedFailureMechanism, DuneErosionFailureMechanism actualFailureMechanism) { Assert.AreEqual(expectedFailureMechanism.GeneralInput.N, actualFailureMechanism.GeneralInput.N); AssertDuneLocations(expectedFailureMechanism.DuneLocations, actualFailureMechanism.DuneLocations); AssertComments(expectedFailureMechanism.InputComments, actualFailureMechanism.InputComments); AssertComments(expectedFailureMechanism.OutputComments, actualFailureMechanism.OutputComments); AssertComments(expectedFailureMechanism.NotRelevantComments, actualFailureMechanism.NotRelevantComments); } private static void AssertFailureMechanismSectionResults( IEnumerable expectedSectionResults, IEnumerable actualSectionResults) { AssertCollectionAndItems(expectedSectionResults, actualSectionResults, (expectedItem, actualItem) => { Assert.AreEqual(expectedItem.AssessmentLayerTwoA, actualItem.AssessmentLayerTwoA); Assert.AreEqual(expectedItem.AssessmentLayerThree, actualItem.AssessmentLayerThree); }); } private static void AssertDuneLocations(IEnumerable expectedDuneLocations, IEnumerable actualDuneLocations) { AssertCollectionAndItems(expectedDuneLocations, actualDuneLocations, AssertDuneBoundaryLocation); } private static void AssertDuneBoundaryLocation(DuneLocation expectedLocation, DuneLocation actualLocation) { Assert.AreEqual(expectedLocation.Id, actualLocation.Id); Assert.AreEqual(expectedLocation.Name, actualLocation.Name); Assert.AreEqual(expectedLocation.Location, actualLocation.Location); Assert.AreEqual(expectedLocation.CoastalAreaId, actualLocation.CoastalAreaId); Assert.AreEqual(expectedLocation.Offset, actualLocation.Offset); Assert.AreEqual(expectedLocation.Orientation, actualLocation.Orientation); Assert.AreEqual(expectedLocation.D50, actualLocation.D50); AssertDuneBoundaryLocationOutput(expectedLocation.Output, actualLocation.Output); } private static void AssertDuneBoundaryLocationOutput(DuneLocationOutput expectedOutput, DuneLocationOutput actualOutput) { if (expectedOutput == null) { Assert.IsNull(actualOutput); return; } Assert.AreEqual(expectedOutput.WaterLevel, actualOutput.WaterLevel); Assert.AreEqual(expectedOutput.WaveHeight, actualOutput.WaveHeight); Assert.AreEqual(expectedOutput.WavePeriod, actualOutput.WavePeriod); Assert.AreEqual(expectedOutput.TargetProbability, actualOutput.TargetProbability); Assert.AreEqual(expectedOutput.TargetReliability, actualOutput.TargetReliability); Assert.AreEqual(expectedOutput.CalculatedProbability, actualOutput.CalculatedProbability); Assert.AreEqual(expectedOutput.CalculatedReliability, actualOutput.CalculatedReliability); Assert.AreEqual(expectedOutput.CalculationConvergence, actualOutput.CalculationConvergence); } #endregion #region HeightStructures FailureMechanism private static void AssertHeightStructuresFailureMechanism(HeightStructuresFailureMechanism expectedFailureMechanism, HeightStructuresFailureMechanism actualFailureMechanism) { Assert.AreEqual(expectedFailureMechanism.GeneralInput.N, actualFailureMechanism.GeneralInput.N); AssertForeshoreProfiles(expectedFailureMechanism.ForeshoreProfiles, actualFailureMechanism.ForeshoreProfiles); AssertHeightStructures(expectedFailureMechanism.HeightStructures, actualFailureMechanism.HeightStructures); AssertCalculationGroup(expectedFailureMechanism.CalculationsGroup, actualFailureMechanism.CalculationsGroup); AssertComments(expectedFailureMechanism.InputComments, actualFailureMechanism.InputComments); AssertComments(expectedFailureMechanism.OutputComments, actualFailureMechanism.OutputComments); AssertComments(expectedFailureMechanism.NotRelevantComments, actualFailureMechanism.NotRelevantComments); } private static void AssertFailureMechanismSectionResults(IEnumerable expectedSectionResults, IEnumerable actualSectionResults) { AssertCollectionAndItems(expectedSectionResults, actualSectionResults, (expectedItem, actualItem) => { Assert.AreEqual(expectedItem.AssessmentLayerOne, actualItem.AssessmentLayerOne); Assert.AreEqual(expectedItem.AssessmentLayerTwoA, actualItem.AssessmentLayerTwoA); Assert.AreEqual(expectedItem.AssessmentLayerThree, actualItem.AssessmentLayerThree); if (expectedItem.Calculation == null) { Assert.IsNull(actualItem.Calculation); } else { AssertStructuresCalculation(expectedItem.Calculation, actualItem.Calculation); } }); } private static void AssertHeightStructures(StructureCollection expectedHeightStructures, StructureCollection actualHeightStructures) { Assert.AreEqual(expectedHeightStructures.SourcePath, actualHeightStructures.SourcePath); AssertCollectionAndItems(expectedHeightStructures, actualHeightStructures, AssertHeightStructure); } private static void AssertHeightStructure(HeightStructure expectedHeightStructure, HeightStructure actualHeightStructure) { Assert.AreEqual(expectedHeightStructure.Name, actualHeightStructure.Name); Assert.AreEqual(expectedHeightStructure.Id, actualHeightStructure.Id); Assert.AreEqual(expectedHeightStructure.Location, actualHeightStructure.Location); Assert.AreEqual(expectedHeightStructure.StructureNormalOrientation, actualHeightStructure.StructureNormalOrientation); DistributionAssert.AreEqual(expectedHeightStructure.LevelCrestStructure, actualHeightStructure.LevelCrestStructure); DistributionAssert.AreEqual(expectedHeightStructure.FlowWidthAtBottomProtection, actualHeightStructure.FlowWidthAtBottomProtection); DistributionAssert.AreEqual(expectedHeightStructure.CriticalOvertoppingDischarge, actualHeightStructure.CriticalOvertoppingDischarge); DistributionAssert.AreEqual(expectedHeightStructure.WidthFlowApertures, actualHeightStructure.WidthFlowApertures); Assert.AreEqual(expectedHeightStructure.FailureProbabilityStructureWithErosion, actualHeightStructure.FailureProbabilityStructureWithErosion); DistributionAssert.AreEqual(expectedHeightStructure.StorageStructureArea, actualHeightStructure.StorageStructureArea); DistributionAssert.AreEqual(expectedHeightStructure.AllowedLevelIncreaseStorage, actualHeightStructure.AllowedLevelIncreaseStorage); } private static void AssertStructuresCalculation(StructuresCalculation expectedCalculation, StructuresCalculation actualCalculation) { Assert.AreEqual(expectedCalculation.Name, actualCalculation.Name); AssertComments(expectedCalculation.Comments, actualCalculation.Comments); AssertHeightStructuresInput(expectedCalculation.InputParameters, actualCalculation.InputParameters); if (!expectedCalculation.HasOutput) { Assert.IsFalse(actualCalculation.HasOutput); return; } StructuresOutput expectedOutput = expectedCalculation.Output; StructuresOutput actualOutput = actualCalculation.Output; Assert.IsNotNull(actualOutput); AssertProbabilityAssessmentOutput(expectedOutput.ProbabilityAssessmentOutput, actualOutput.ProbabilityAssessmentOutput); AssertGeneralResultTopLevelFaultTreeIllustrationPoint( expectedOutput.GeneralResult, actualOutput.GeneralResult); } private static void AssertHeightStructuresInput(HeightStructuresInput expectedInput, HeightStructuresInput actualInput) { AssertStructureInputBase(expectedInput, actualInput); AssertReferencedObject(() => expectedInput.Structure, () => actualInput.Structure, AssertHeightStructure); Assert.AreEqual(expectedInput.DeviationWaveDirection, actualInput.DeviationWaveDirection); DistributionAssert.AreEqual(expectedInput.LevelCrestStructure, actualInput.LevelCrestStructure); } #endregion #region Piping FailureMechanism private static void AssertPipingFailureMechanism(PipingFailureMechanism expectedFailureMechanism, PipingFailureMechanism actualFailureMechanism) { AssertPipingProbabilityAssessmentInput(expectedFailureMechanism.PipingProbabilityAssessmentInput, actualFailureMechanism.PipingProbabilityAssessmentInput); AssertPipingStochasticSoilModels(expectedFailureMechanism.StochasticSoilModels, actualFailureMechanism.StochasticSoilModels); AssertCalculationGroup(expectedFailureMechanism.CalculationsGroup, actualFailureMechanism.CalculationsGroup); AssertComments(expectedFailureMechanism.InputComments, actualFailureMechanism.InputComments); AssertComments(expectedFailureMechanism.OutputComments, actualFailureMechanism.OutputComments); AssertComments(expectedFailureMechanism.NotRelevantComments, actualFailureMechanism.NotRelevantComments); Assert.AreEqual(expectedFailureMechanism.SurfaceLines.SourcePath, actualFailureMechanism.SurfaceLines.SourcePath); AssertCollectionAndItems(expectedFailureMechanism.SurfaceLines, actualFailureMechanism.SurfaceLines, AssertPipingSurfaceLine); } private static void AssertFailureMechanismSectionResults( IEnumerable expectedSectionResults, IEnumerable actualSectionResults) { AssertCollectionAndItems(expectedSectionResults, actualSectionResults, (expectedItem, actualItem) => { Assert.AreEqual(expectedItem.AssessmentLayerOne, actualItem.AssessmentLayerOne); Assert.AreEqual(expectedItem.AssessmentLayerThree, actualItem.AssessmentLayerThree); }); } private static void AssertPipingProbabilityAssessmentInput(PipingProbabilityAssessmentInput expectedModel, PipingProbabilityAssessmentInput actualModel) { Assert.AreEqual(expectedModel.A, actualModel.A); } private static void AssertPipingCalculationScenario(PipingCalculationScenario expectedPipingCalculation, PipingCalculationScenario actualPipingCalculation) { Assert.AreEqual(expectedPipingCalculation.IsRelevant, actualPipingCalculation.IsRelevant); Assert.AreEqual(expectedPipingCalculation.Contribution, actualPipingCalculation.Contribution); Assert.AreEqual(expectedPipingCalculation.Name, actualPipingCalculation.Name); AssertComments(expectedPipingCalculation.Comments, actualPipingCalculation.Comments); AssertPipingInput(expectedPipingCalculation.InputParameters, actualPipingCalculation.InputParameters); AssertPipingOutput(expectedPipingCalculation.Output, actualPipingCalculation.Output); AssertPipingSemiProbabilisticOutput(expectedPipingCalculation.SemiProbabilisticOutput, actualPipingCalculation.SemiProbabilisticOutput); } private static void AssertPipingInput(PipingInput expectedPipingInput, PipingInput actualPipingInput) { AssertReferencedObject(() => expectedPipingInput.HydraulicBoundaryLocation, () => actualPipingInput.HydraulicBoundaryLocation, AssertHydraulicBoundaryLocation); AssertReferencedObject(() => expectedPipingInput.SurfaceLine, () => actualPipingInput.SurfaceLine, AssertPipingSurfaceLine); AssertReferencedObject(() => expectedPipingInput.StochasticSoilModel, () => actualPipingInput.StochasticSoilModel, AssertPipingStochasticSoilModel); AssertReferencedObject(() => expectedPipingInput.StochasticSoilProfile, () => actualPipingInput.StochasticSoilProfile, AssertPipingStochasticSoilProfile); Assert.AreEqual(expectedPipingInput.ExitPointL, actualPipingInput.ExitPointL); Assert.AreEqual(expectedPipingInput.EntryPointL, actualPipingInput.EntryPointL); Assert.AreEqual(expectedPipingInput.PhreaticLevelExit.Mean, actualPipingInput.PhreaticLevelExit.Mean); Assert.AreEqual(expectedPipingInput.PhreaticLevelExit.StandardDeviation, actualPipingInput.PhreaticLevelExit.StandardDeviation); Assert.AreEqual(expectedPipingInput.DampingFactorExit.Mean, actualPipingInput.DampingFactorExit.Mean); Assert.AreEqual(expectedPipingInput.DampingFactorExit.StandardDeviation, actualPipingInput.DampingFactorExit.StandardDeviation); Assert.AreEqual(expectedPipingInput.SaturatedVolumicWeightOfCoverageLayer.Mean, actualPipingInput.SaturatedVolumicWeightOfCoverageLayer.Mean); Assert.AreEqual(expectedPipingInput.SaturatedVolumicWeightOfCoverageLayer.StandardDeviation, actualPipingInput.SaturatedVolumicWeightOfCoverageLayer.StandardDeviation); Assert.AreEqual(expectedPipingInput.SaturatedVolumicWeightOfCoverageLayer.Shift, actualPipingInput.SaturatedVolumicWeightOfCoverageLayer.Shift); Assert.AreEqual(expectedPipingInput.Diameter70.Mean, actualPipingInput.Diameter70.Mean); Assert.AreEqual(expectedPipingInput.Diameter70.CoefficientOfVariation, actualPipingInput.Diameter70.CoefficientOfVariation); Assert.AreEqual(expectedPipingInput.DarcyPermeability.Mean, actualPipingInput.DarcyPermeability.Mean); Assert.AreEqual(expectedPipingInput.DarcyPermeability.CoefficientOfVariation, actualPipingInput.DarcyPermeability.CoefficientOfVariation); Assert.AreEqual(expectedPipingInput.UseAssessmentLevelManualInput, actualPipingInput.UseAssessmentLevelManualInput); Assert.AreEqual(expectedPipingInput.AssessmentLevel, actualPipingInput.AssessmentLevel); } private static void AssertPipingOutput(PipingOutput expectedOutput, PipingOutput actualOutput) { if (expectedOutput == null) { Assert.IsNull(actualOutput); } else { Assert.AreEqual(expectedOutput.HeaveGradient, actualOutput.HeaveGradient); Assert.AreEqual(expectedOutput.HeaveFactorOfSafety, actualOutput.HeaveFactorOfSafety); Assert.AreEqual(expectedOutput.HeaveZValue, actualOutput.HeaveZValue); Assert.AreEqual(expectedOutput.UpliftEffectiveStress, actualOutput.UpliftEffectiveStress); Assert.AreEqual(expectedOutput.UpliftFactorOfSafety, actualOutput.UpliftFactorOfSafety); Assert.AreEqual(expectedOutput.UpliftZValue, actualOutput.UpliftZValue); Assert.AreEqual(expectedOutput.SellmeijerCreepCoefficient, actualOutput.SellmeijerCreepCoefficient); Assert.AreEqual(expectedOutput.SellmeijerCriticalFall, actualOutput.SellmeijerCriticalFall); Assert.AreEqual(expectedOutput.SellmeijerReducedFall, actualOutput.SellmeijerReducedFall); Assert.AreEqual(expectedOutput.SellmeijerFactorOfSafety, actualOutput.SellmeijerFactorOfSafety); Assert.AreEqual(expectedOutput.SellmeijerZValue, actualOutput.SellmeijerZValue); } } private static void AssertPipingSemiProbabilisticOutput(PipingSemiProbabilisticOutput expectedOutput, PipingSemiProbabilisticOutput actualOutput) { if (expectedOutput == null) { Assert.IsNull(actualOutput); } else { Assert.AreEqual(expectedOutput.HeaveFactorOfSafety, actualOutput.HeaveFactorOfSafety); Assert.AreEqual(expectedOutput.HeaveProbability, actualOutput.HeaveProbability); Assert.AreEqual(expectedOutput.HeaveReliability, actualOutput.HeaveReliability); Assert.AreEqual(expectedOutput.SellmeijerFactorOfSafety, actualOutput.SellmeijerFactorOfSafety); Assert.AreEqual(expectedOutput.SellmeijerProbability, actualOutput.SellmeijerProbability); Assert.AreEqual(expectedOutput.SellmeijerReliability, actualOutput.SellmeijerReliability); Assert.AreEqual(expectedOutput.UpliftFactorOfSafety, actualOutput.UpliftFactorOfSafety); Assert.AreEqual(expectedOutput.UpliftProbability, actualOutput.UpliftProbability); Assert.AreEqual(expectedOutput.UpliftReliability, actualOutput.UpliftReliability); Assert.AreEqual(expectedOutput.RequiredReliability, actualOutput.RequiredReliability); Assert.AreEqual(expectedOutput.RequiredProbability, actualOutput.RequiredProbability); Assert.AreEqual(expectedOutput.PipingFactorOfSafety, actualOutput.PipingFactorOfSafety); Assert.AreEqual(expectedOutput.PipingReliability, actualOutput.PipingReliability); Assert.AreEqual(expectedOutput.PipingProbability, actualOutput.PipingProbability); } } private static void AssertPipingStochasticSoilModels(PipingStochasticSoilModelCollection expectedModels, PipingStochasticSoilModelCollection actualModels) { Assert.AreEqual(expectedModels.SourcePath, actualModels.SourcePath); AssertCollectionAndItems(expectedModels, actualModels, AssertPipingStochasticSoilModel); } private static void AssertPipingStochasticSoilModel(PipingStochasticSoilModel expectedSoilModel, PipingStochasticSoilModel actualSoilModel) { Assert.AreEqual(expectedSoilModel.Name, actualSoilModel.Name); AssertSegmentPoints(expectedSoilModel.Geometry, actualSoilModel.Geometry); AssertCollectionAndItems(expectedSoilModel.StochasticSoilProfiles, actualSoilModel.StochasticSoilProfiles, AssertPipingStochasticSoilProfile); } private static void AssertPipingStochasticSoilProfile(PipingStochasticSoilProfile expectedProfile, PipingStochasticSoilProfile actualProfile) { Assert.AreEqual(expectedProfile.Probability, actualProfile.Probability); AssertPipingSoilProfile(expectedProfile.SoilProfile, actualProfile.SoilProfile); } private static void AssertPipingSoilProfile(PipingSoilProfile expectedProfile, PipingSoilProfile actualProfile) { Assert.AreEqual(expectedProfile.Bottom, actualProfile.Bottom); Assert.AreEqual(expectedProfile.Name, actualProfile.Name); Assert.AreEqual(expectedProfile.SoilProfileSourceType, actualProfile.SoilProfileSourceType); AssertCollectionAndItems(expectedProfile.Layers, actualProfile.Layers, AssertPipingSoilLayer); } private static void AssertPipingSoilLayer(PipingSoilLayer expectedLayer, PipingSoilLayer actualLayer) { Assert.AreEqual(expectedLayer.Top, actualLayer.Top); Assert.AreEqual(expectedLayer.IsAquifer, actualLayer.IsAquifer); Assert.AreEqual(expectedLayer.Color.ToArgb(), actualLayer.Color.ToArgb()); DistributionAssert.AreEqual(expectedLayer.BelowPhreaticLevel, actualLayer.BelowPhreaticLevel); DistributionAssert.AreEqual(expectedLayer.DiameterD70, actualLayer.DiameterD70); DistributionAssert.AreEqual(expectedLayer.Permeability, actualLayer.Permeability); } private static void AssertPipingSurfaceLine(PipingSurfaceLine expectedSurfaceLine, PipingSurfaceLine actualSurfaceLine) { Assert.AreEqual(expectedSurfaceLine.Name, actualSurfaceLine.Name); Assert.AreEqual(expectedSurfaceLine.ReferenceLineIntersectionWorldPoint, actualSurfaceLine.ReferenceLineIntersectionWorldPoint); CollectionAssert.AreEqual(expectedSurfaceLine.Points, actualSurfaceLine.Points); Assert.AreEqual(expectedSurfaceLine.BottomDitchDikeSide, actualSurfaceLine.BottomDitchDikeSide); Assert.AreEqual(expectedSurfaceLine.BottomDitchPolderSide, actualSurfaceLine.BottomDitchPolderSide); Assert.AreEqual(expectedSurfaceLine.DikeToeAtPolder, actualSurfaceLine.DikeToeAtPolder); Assert.AreEqual(expectedSurfaceLine.DikeToeAtRiver, actualSurfaceLine.DikeToeAtRiver); Assert.AreEqual(expectedSurfaceLine.DitchDikeSide, actualSurfaceLine.DitchDikeSide); Assert.AreEqual(expectedSurfaceLine.DitchPolderSide, actualSurfaceLine.DitchPolderSide); } #endregion #region MacroStabilityInwards FailureMechanism private static void AssertMacroStabilityInwardsFailureMechanism(MacroStabilityInwardsFailureMechanism expectedFailureMechanism, MacroStabilityInwardsFailureMechanism actualFailureMechanism) { AssertMacroStabilityInwardsProbabilityAssessmentInput(expectedFailureMechanism.MacroStabilityInwardsProbabilityAssessmentInput, actualFailureMechanism.MacroStabilityInwardsProbabilityAssessmentInput); AssertMacroStabilityInwardsStochasticSoilModels(expectedFailureMechanism.StochasticSoilModels, actualFailureMechanism.StochasticSoilModels); AssertCalculationGroup(expectedFailureMechanism.CalculationsGroup, actualFailureMechanism.CalculationsGroup); AssertComments(expectedFailureMechanism.InputComments, actualFailureMechanism.InputComments); AssertComments(expectedFailureMechanism.OutputComments, actualFailureMechanism.OutputComments); AssertComments(expectedFailureMechanism.NotRelevantComments, actualFailureMechanism.NotRelevantComments); Assert.AreEqual(expectedFailureMechanism.SurfaceLines.SourcePath, actualFailureMechanism.SurfaceLines.SourcePath); AssertCollectionAndItems(expectedFailureMechanism.SurfaceLines, actualFailureMechanism.SurfaceLines, AssertMacroStabilityInwardsSurfaceLine); } private static void AssertFailureMechanismSectionResults( IEnumerable expectedSectionResults, IEnumerable actualSectionResults) { AssertCollectionAndItems(expectedSectionResults, actualSectionResults, (expectedItem, actualItem) => { Assert.AreEqual(expectedItem.AssessmentLayerOne, actualItem.AssessmentLayerOne); Assert.AreEqual(expectedItem.AssessmentLayerThree, actualItem.AssessmentLayerThree); }); } private static void AssertMacroStabilityInwardsProbabilityAssessmentInput(MacroStabilityInwardsProbabilityAssessmentInput expectedModel, MacroStabilityInwardsProbabilityAssessmentInput actualModel) { Assert.AreEqual(expectedModel.A, actualModel.A); } private static void AssertMacroStabilityInwardsStochasticSoilModels(MacroStabilityInwardsStochasticSoilModelCollection expectedModels, MacroStabilityInwardsStochasticSoilModelCollection actualModels) { Assert.AreEqual(expectedModels.SourcePath, actualModels.SourcePath); AssertCollectionAndItems(expectedModels, actualModels, AssertMacroStabilityInwardsStochasticSoilModel); } private static void AssertMacroStabilityInwardsStochasticSoilModel(MacroStabilityInwardsStochasticSoilModel expectedSoilModel, MacroStabilityInwardsStochasticSoilModel actualSoilModel) { Assert.AreEqual(expectedSoilModel.Name, actualSoilModel.Name); AssertSegmentPoints(expectedSoilModel.Geometry, actualSoilModel.Geometry); AssertCollectionAndItems(expectedSoilModel.StochasticSoilProfiles, actualSoilModel.StochasticSoilProfiles, AssertMacroStabilityInwardsStochasticSoilProfile); } private static void AssertMacroStabilityInwardsStochasticSoilProfile(MacroStabilityInwardsStochasticSoilProfile expectedProfile, MacroStabilityInwardsStochasticSoilProfile actualProfile) { Assert.AreEqual(expectedProfile.Probability, actualProfile.Probability); var expectedSoilProfile1D = expectedProfile.SoilProfile as MacroStabilityInwardsSoilProfile1D; if (expectedSoilProfile1D != null) { var actualSoilProfile1D = actualProfile.SoilProfile as MacroStabilityInwardsSoilProfile1D; Assert.IsNotNull(actualSoilProfile1D); AssertMacroStabilityInwardsSoilProfile(expectedSoilProfile1D, actualSoilProfile1D); } var expectedSoilProfile2D = expectedProfile.SoilProfile as MacroStabilityInwardsSoilProfile2D; if (expectedSoilProfile2D != null) { var actualSoilProfile2D = actualProfile.SoilProfile as MacroStabilityInwardsSoilProfile2D; Assert.IsNotNull(actualSoilProfile2D); AssertMacroStabilityInwardsSoilProfile(expectedSoilProfile2D, actualSoilProfile2D); } } private static void AssertMacroStabilityInwardsSoilProfile(MacroStabilityInwardsSoilProfile1D expectedSoilProfile, MacroStabilityInwardsSoilProfile1D actualSoilProfile) { Assert.AreEqual(expectedSoilProfile.Bottom, actualSoilProfile.Bottom); Assert.AreEqual(expectedSoilProfile.Name, actualSoilProfile.Name); AssertCollectionAndItems(expectedSoilProfile.Layers, actualSoilProfile.Layers, AssertMacroStabilityInwardsSoilLayer); } private static void AssertMacroStabilityInwardsSoilProfile(MacroStabilityInwardsSoilProfile2D expectedSoilProfile, MacroStabilityInwardsSoilProfile2D actualSoilProfile) { Assert.AreEqual(expectedSoilProfile.Name, actualSoilProfile.Name); AssertCollectionAndItems(expectedSoilProfile.Layers, actualSoilProfile.Layers, AssertMacroStabilityInwardsSoilLayer); } private static void AssertMacroStabilityInwardsSoilLayer(MacroStabilityInwardsSoilLayer1D expectedLayer, MacroStabilityInwardsSoilLayer1D actualLayer) { Assert.AreEqual(expectedLayer.Top, actualLayer.Top); AssertMacroStabilityInwardsSoilLayerData(expectedLayer.Data, actualLayer.Data); } private static void AssertMacroStabilityInwardsSoilLayer(MacroStabilityInwardsSoilLayer2D expectedLayer, MacroStabilityInwardsSoilLayer2D actualLayer) { Assert.AreEqual(expectedLayer.OuterRing, actualLayer.OuterRing); AssertMacroStabilityInwardsSoilLayerData(expectedLayer.Data, actualLayer.Data); AssertCollectionAndItems(expectedLayer.NestedLayers, actualLayer.NestedLayers, AssertMacroStabilityInwardsSoilLayer); } private static void AssertMacroStabilityInwardsSoilLayerData(MacroStabilityInwardsSoilLayerData expectedData, MacroStabilityInwardsSoilLayerData actualData) { Assert.AreEqual(expectedData.IsAquifer, actualData.IsAquifer); Assert.AreEqual(expectedData.MaterialName, actualData.MaterialName); Assert.AreEqual(expectedData.Color.ToArgb(), actualData.Color.ToArgb()); Assert.AreEqual(expectedData.UsePop, actualData.UsePop); Assert.AreEqual(expectedData.ShearStrengthModel, actualData.ShearStrengthModel); DistributionAssert.AreEqual(new VariationCoefficientLogNormalDistribution(2) { Mean = expectedData.AbovePhreaticLevel.Mean, CoefficientOfVariation = expectedData.AbovePhreaticLevel.CoefficientOfVariation, Shift = expectedData.AbovePhreaticLevel.Shift }, actualData.AbovePhreaticLevel); DistributionAssert.AreEqual(new VariationCoefficientLogNormalDistribution(2) { Mean = expectedData.BelowPhreaticLevel.Mean, CoefficientOfVariation = expectedData.BelowPhreaticLevel.CoefficientOfVariation, Shift = expectedData.BelowPhreaticLevel.Shift }, actualData.BelowPhreaticLevel); DistributionAssert.AreEqual(new VariationCoefficientLogNormalDistribution(2) { Mean = expectedData.Cohesion.Mean, CoefficientOfVariation = expectedData.Cohesion.CoefficientOfVariation }, actualData.Cohesion); DistributionAssert.AreEqual(new VariationCoefficientLogNormalDistribution(2) { Mean = expectedData.FrictionAngle.Mean, CoefficientOfVariation = expectedData.FrictionAngle.CoefficientOfVariation }, actualData.FrictionAngle); DistributionAssert.AreEqual(new VariationCoefficientLogNormalDistribution(2) { Mean = expectedData.ShearStrengthRatio.Mean, CoefficientOfVariation = expectedData.ShearStrengthRatio.CoefficientOfVariation }, actualData.ShearStrengthRatio); DistributionAssert.AreEqual(new VariationCoefficientLogNormalDistribution(2) { Mean = expectedData.StrengthIncreaseExponent.Mean, CoefficientOfVariation = expectedData.StrengthIncreaseExponent.CoefficientOfVariation }, actualData.StrengthIncreaseExponent); DistributionAssert.AreEqual(new VariationCoefficientLogNormalDistribution(2) { Mean = expectedData.Pop.Mean, CoefficientOfVariation = expectedData.Pop.CoefficientOfVariation }, actualData.Pop); } private static void AssertMacroStabilityInwardsSurfaceLine(MacroStabilityInwardsSurfaceLine expectedSurfaceLine, MacroStabilityInwardsSurfaceLine actualSurfaceLine) { Assert.AreEqual(expectedSurfaceLine.Name, actualSurfaceLine.Name); Assert.AreEqual(expectedSurfaceLine.ReferenceLineIntersectionWorldPoint, actualSurfaceLine.ReferenceLineIntersectionWorldPoint); CollectionAssert.AreEqual(expectedSurfaceLine.Points, actualSurfaceLine.Points); Assert.AreEqual(expectedSurfaceLine.SurfaceLevelOutside, actualSurfaceLine.SurfaceLevelOutside); Assert.AreEqual(expectedSurfaceLine.DikeToeAtRiver, actualSurfaceLine.DikeToeAtRiver); Assert.AreEqual(expectedSurfaceLine.DikeTopAtPolder, actualSurfaceLine.DikeTopAtPolder); Assert.AreEqual(expectedSurfaceLine.DikeTopAtRiver, actualSurfaceLine.DikeTopAtRiver); Assert.AreEqual(expectedSurfaceLine.ShoulderBaseInside, actualSurfaceLine.ShoulderBaseInside); Assert.AreEqual(expectedSurfaceLine.ShoulderTopInside, actualSurfaceLine.ShoulderTopInside); Assert.AreEqual(expectedSurfaceLine.DikeToeAtPolder, actualSurfaceLine.DikeToeAtPolder); Assert.AreEqual(expectedSurfaceLine.DitchDikeSide, actualSurfaceLine.DitchDikeSide); Assert.AreEqual(expectedSurfaceLine.BottomDitchDikeSide, actualSurfaceLine.BottomDitchDikeSide); Assert.AreEqual(expectedSurfaceLine.BottomDitchPolderSide, actualSurfaceLine.BottomDitchPolderSide); Assert.AreEqual(expectedSurfaceLine.DitchPolderSide, actualSurfaceLine.DitchPolderSide); Assert.AreEqual(expectedSurfaceLine.SurfaceLevelInside, actualSurfaceLine.SurfaceLevelInside); } private static void AssertMacroStabilityInwardsCalculationScenario(MacroStabilityInwardsCalculationScenario expectedMacroStabilityInwardsCalculation, MacroStabilityInwardsCalculationScenario actualMacroStabilityInwardsCalculation) { Assert.AreEqual(expectedMacroStabilityInwardsCalculation.IsRelevant, actualMacroStabilityInwardsCalculation.IsRelevant); Assert.AreEqual(expectedMacroStabilityInwardsCalculation.Contribution, actualMacroStabilityInwardsCalculation.Contribution); Assert.AreEqual(expectedMacroStabilityInwardsCalculation.Name, actualMacroStabilityInwardsCalculation.Name); AssertComments(expectedMacroStabilityInwardsCalculation.Comments, actualMacroStabilityInwardsCalculation.Comments); AssertMacroStabilityInwardsInput(expectedMacroStabilityInwardsCalculation.InputParameters, actualMacroStabilityInwardsCalculation.InputParameters); AssertMacroStabilityInwardsOutput(expectedMacroStabilityInwardsCalculation.Output, actualMacroStabilityInwardsCalculation.Output); AssertMacroStabilityInwardsSemiProbabilisticOutput(expectedMacroStabilityInwardsCalculation.SemiProbabilisticOutput, actualMacroStabilityInwardsCalculation.SemiProbabilisticOutput); } private static void AssertMacroStabilityInwardsInput(MacroStabilityInwardsInput expectedInput, MacroStabilityInwardsInput actualInput) { AssertReferencedObject(() => expectedInput.HydraulicBoundaryLocation, () => actualInput.HydraulicBoundaryLocation, AssertHydraulicBoundaryLocation); AssertReferencedObject(() => expectedInput.SurfaceLine, () => actualInput.SurfaceLine, AssertMacroStabilityInwardsSurfaceLine); AssertReferencedObject(() => expectedInput.StochasticSoilModel, () => actualInput.StochasticSoilModel, AssertMacroStabilityInwardsStochasticSoilModel); AssertReferencedObject(() => expectedInput.StochasticSoilProfile, () => actualInput.StochasticSoilProfile, AssertMacroStabilityInwardsStochasticSoilProfile); Assert.AreEqual(expectedInput.AssessmentLevel, actualInput.AssessmentLevel); Assert.AreEqual(expectedInput.UseAssessmentLevelManualInput, actualInput.UseAssessmentLevelManualInput); Assert.AreEqual(expectedInput.SlipPlaneMinimumDepth, actualInput.SlipPlaneMinimumDepth); Assert.AreEqual(expectedInput.SlipPlaneMinimumLength, actualInput.SlipPlaneMinimumLength); Assert.AreEqual(expectedInput.MaximumSliceWidth, actualInput.MaximumSliceWidth); Assert.AreEqual(expectedInput.MoveGrid, actualInput.MoveGrid); Assert.AreEqual(expectedInput.DikeSoilScenario, actualInput.DikeSoilScenario); Assert.AreEqual(expectedInput.WaterLevelRiverAverage, actualInput.WaterLevelRiverAverage); Assert.AreEqual(expectedInput.DrainageConstructionPresent, actualInput.DrainageConstructionPresent); Assert.AreEqual(expectedInput.XCoordinateDrainageConstruction, actualInput.XCoordinateDrainageConstruction); Assert.AreEqual(expectedInput.ZCoordinateDrainageConstruction, actualInput.ZCoordinateDrainageConstruction); Assert.AreEqual(expectedInput.MinimumLevelPhreaticLineAtDikeTopRiver, actualInput.MinimumLevelPhreaticLineAtDikeTopRiver); Assert.AreEqual(expectedInput.MinimumLevelPhreaticLineAtDikeTopPolder, actualInput.MinimumLevelPhreaticLineAtDikeTopPolder); AsssertMacroStabilityInwardsLocationInputBase(expectedInput.LocationInputDaily, actualInput.LocationInputDaily); AssertMacroStabilityInwardsLocationInput(expectedInput.LocationInputExtreme, actualInput.LocationInputExtreme); Assert.AreEqual(expectedInput.AdjustPhreaticLine3And4ForUplift, actualInput.AdjustPhreaticLine3And4ForUplift); Assert.AreEqual(expectedInput.LeakageLengthOutwardsPhreaticLine3, actualInput.LeakageLengthOutwardsPhreaticLine3); Assert.AreEqual(expectedInput.LeakageLengthInwardsPhreaticLine3, actualInput.LeakageLengthInwardsPhreaticLine3); Assert.AreEqual(expectedInput.LeakageLengthOutwardsPhreaticLine4, actualInput.LeakageLengthOutwardsPhreaticLine4); Assert.AreEqual(expectedInput.LeakageLengthInwardsPhreaticLine4, actualInput.LeakageLengthInwardsPhreaticLine4); Assert.AreEqual(expectedInput.PiezometricHeadPhreaticLine2Outwards, actualInput.PiezometricHeadPhreaticLine2Outwards); Assert.AreEqual(expectedInput.PiezometricHeadPhreaticLine2Inwards, actualInput.PiezometricHeadPhreaticLine2Inwards); Assert.AreEqual(expectedInput.GridDeterminationType, actualInput.GridDeterminationType); Assert.AreEqual(expectedInput.TangentLineDeterminationType, actualInput.TangentLineDeterminationType); Assert.AreEqual(expectedInput.TangentLineZTop, actualInput.TangentLineZTop); Assert.AreEqual(expectedInput.TangentLineZBottom, actualInput.TangentLineZBottom); Assert.AreEqual(expectedInput.TangentLineNumber, actualInput.TangentLineNumber); AssertMacroStabilityInwardsGrid(expectedInput.LeftGrid, actualInput.LeftGrid); AssertMacroStabilityInwardsGrid(expectedInput.RightGrid, actualInput.RightGrid); Assert.AreEqual(expectedInput.CreateZones, actualInput.CreateZones); } private static void AssertMacroStabilityInwardsGrid(MacroStabilityInwardsGrid expectedGrid, MacroStabilityInwardsGrid actualGrid) { Assert.AreEqual(expectedGrid.XLeft, actualGrid.XLeft); Assert.AreEqual(expectedGrid.XRight, actualGrid.XRight); Assert.AreEqual(expectedGrid.NumberOfHorizontalPoints, actualGrid.NumberOfHorizontalPoints); Assert.AreEqual(expectedGrid.ZTop, actualGrid.ZTop); Assert.AreEqual(expectedGrid.ZBottom, actualGrid.ZBottom); Assert.AreEqual(expectedGrid.NumberOfVerticalPoints, actualGrid.NumberOfVerticalPoints); } private static void AsssertMacroStabilityInwardsLocationInputBase(IMacroStabilityInwardsLocationInput expectedLocationInput, IMacroStabilityInwardsLocationInput actuaLocationInput) { Assert.AreEqual(expectedLocationInput.WaterLevelPolder, actuaLocationInput.WaterLevelPolder); Assert.AreEqual(expectedLocationInput.UseDefaultOffsets, actuaLocationInput.UseDefaultOffsets); Assert.AreEqual(expectedLocationInput.PhreaticLineOffsetBelowDikeTopAtRiver, actuaLocationInput.PhreaticLineOffsetBelowDikeTopAtRiver); Assert.AreEqual(expectedLocationInput.PhreaticLineOffsetBelowDikeTopAtPolder, actuaLocationInput.PhreaticLineOffsetBelowDikeTopAtPolder); Assert.AreEqual(expectedLocationInput.PhreaticLineOffsetBelowShoulderBaseInside, actuaLocationInput.PhreaticLineOffsetBelowShoulderBaseInside); Assert.AreEqual(expectedLocationInput.PhreaticLineOffsetBelowDikeToeAtPolder, actuaLocationInput.PhreaticLineOffsetBelowDikeToeAtPolder); } private static void AssertMacroStabilityInwardsLocationInput(IMacroStabilityInwardsLocationInputExtreme expectedLocationInput, IMacroStabilityInwardsLocationInputExtreme actualLocationInput) { AsssertMacroStabilityInwardsLocationInputBase(expectedLocationInput, actualLocationInput); Assert.AreEqual(expectedLocationInput.PenetrationLength, actualLocationInput.PenetrationLength); } private static void AssertMacroStabilityInwardsOutput(MacroStabilityInwardsOutput expectedOutput, MacroStabilityInwardsOutput actualOutput) { if (expectedOutput == null) { Assert.IsNull(actualOutput); } else { Assert.AreEqual(expectedOutput.FactorOfStability, actualOutput.FactorOfStability); Assert.AreEqual(expectedOutput.ZValue, actualOutput.ZValue); Assert.AreEqual(expectedOutput.ForbiddenZonesXEntryMin, actualOutput.ForbiddenZonesXEntryMin); Assert.AreEqual(expectedOutput.ForbiddenZonesXEntryMax, actualOutput.ForbiddenZonesXEntryMax); AssertMacroStabilityInwardsSlidingCurve(expectedOutput.SlidingCurve, actualOutput.SlidingCurve); AssertMacroStabilityInwardsSlipPlaneUpliftVan(expectedOutput.SlipPlane, actualOutput.SlipPlane); } } private static void AssertMacroStabilityInwardsSlipPlaneUpliftVan(MacroStabilityInwardsSlipPlaneUpliftVan expectedSlipPlane, MacroStabilityInwardsSlipPlaneUpliftVan actualSlipPlane) { AssertMacroStabilityInwardsGrid(expectedSlipPlane.LeftGrid, actualSlipPlane.LeftGrid); AssertMacroStabilityInwardsGrid(expectedSlipPlane.RightGrid, actualSlipPlane.RightGrid); CollectionAssert.AreEqual(expectedSlipPlane.TangentLines, actualSlipPlane.TangentLines); } private static void AssertMacroStabilityInwardsSlidingCurve(MacroStabilityInwardsSlidingCurve expectedCurve, MacroStabilityInwardsSlidingCurve actualCurve) { Assert.AreEqual(expectedCurve.NonIteratedHorizontalForce, actualCurve.NonIteratedHorizontalForce); Assert.AreEqual(expectedCurve.IteratedHorizontalForce, actualCurve.IteratedHorizontalForce); AssertMacroStabilityInwardsSlidingCircle(expectedCurve.LeftCircle, actualCurve.LeftCircle); AssertMacroStabilityInwardsSlidingCircle(expectedCurve.RightCircle, actualCurve.RightCircle); AssertCollectionAndItems(expectedCurve.Slices, actualCurve.Slices, AssertMacroStabilityInwardsSlice); } private static void AssertMacroStabilityInwardsSlidingCircle(MacroStabilityInwardsSlidingCircle expectedCircle, MacroStabilityInwardsSlidingCircle actualCircle) { Assert.AreEqual(expectedCircle.Center, actualCircle.Center); Assert.AreEqual(expectedCircle.Radius, actualCircle.Radius); Assert.AreEqual(expectedCircle.IsActive, actualCircle.IsActive); Assert.AreEqual(expectedCircle.NonIteratedForce, actualCircle.NonIteratedForce); Assert.AreEqual(expectedCircle.IteratedForce, actualCircle.IteratedForce); Assert.AreEqual(expectedCircle.DrivingMoment, actualCircle.DrivingMoment); Assert.AreEqual(expectedCircle.ResistingMoment, actualCircle.ResistingMoment); } private static void AssertMacroStabilityInwardsSlice(MacroStabilityInwardsSlice expectedSlice, MacroStabilityInwardsSlice actualSlice) { Assert.AreEqual(expectedSlice.TopLeftPoint, actualSlice.TopLeftPoint); Assert.AreEqual(expectedSlice.TopRightPoint, actualSlice.TopRightPoint); Assert.AreEqual(expectedSlice.BottomLeftPoint, actualSlice.BottomLeftPoint); Assert.AreEqual(expectedSlice.BottomRightPoint, actualSlice.BottomRightPoint); Assert.AreEqual(expectedSlice.Cohesion, actualSlice.Cohesion); Assert.AreEqual(expectedSlice.FrictionAngle, actualSlice.FrictionAngle); Assert.AreEqual(expectedSlice.CriticalPressure, actualSlice.CriticalPressure); Assert.AreEqual(expectedSlice.OverConsolidationRatio, actualSlice.OverConsolidationRatio); Assert.AreEqual(expectedSlice.Pop, actualSlice.Pop); Assert.AreEqual(expectedSlice.DegreeOfConsolidationPorePressureSoil, actualSlice.DegreeOfConsolidationPorePressureSoil); Assert.AreEqual(expectedSlice.DegreeOfConsolidationPorePressureLoad, actualSlice.DegreeOfConsolidationPorePressureLoad); Assert.AreEqual(expectedSlice.Dilatancy, actualSlice.Dilatancy); Assert.AreEqual(expectedSlice.ExternalLoad, actualSlice.ExternalLoad); Assert.AreEqual(expectedSlice.HydrostaticPorePressure, actualSlice.HydrostaticPorePressure); Assert.AreEqual(expectedSlice.LeftForce, actualSlice.LeftForce); Assert.AreEqual(expectedSlice.LeftForceAngle, actualSlice.LeftForceAngle); Assert.AreEqual(expectedSlice.LeftForceY, actualSlice.LeftForceY); Assert.AreEqual(expectedSlice.RightForce, actualSlice.RightForce); Assert.AreEqual(expectedSlice.RightForceAngle, actualSlice.RightForceAngle); Assert.AreEqual(expectedSlice.RightForceY, actualSlice.RightForceY); Assert.AreEqual(expectedSlice.LoadStress, actualSlice.LoadStress); Assert.AreEqual(expectedSlice.NormalStress, actualSlice.NormalStress); Assert.AreEqual(expectedSlice.PorePressure, actualSlice.PorePressure); Assert.AreEqual(expectedSlice.HorizontalPorePressure, actualSlice.HorizontalPorePressure); Assert.AreEqual(expectedSlice.VerticalPorePressure, actualSlice.VerticalPorePressure); Assert.AreEqual(expectedSlice.PiezometricPorePressure, actualSlice.PiezometricPorePressure); Assert.AreEqual(expectedSlice.EffectiveStress, actualSlice.EffectiveStress); Assert.AreEqual(expectedSlice.EffectiveStressDaily, actualSlice.EffectiveStressDaily); Assert.AreEqual(expectedSlice.ExcessPorePressure, actualSlice.ExcessPorePressure); Assert.AreEqual(expectedSlice.ShearStress, actualSlice.ShearStress); Assert.AreEqual(expectedSlice.SoilStress, actualSlice.SoilStress); Assert.AreEqual(expectedSlice.TotalPorePressure, actualSlice.TotalPorePressure); Assert.AreEqual(expectedSlice.TotalStress, actualSlice.TotalStress); Assert.AreEqual(expectedSlice.Weight, actualSlice.Weight); } private static void AssertMacroStabilityInwardsSemiProbabilisticOutput(MacroStabilityInwardsSemiProbabilisticOutput expectedOutput, MacroStabilityInwardsSemiProbabilisticOutput actualOutput) { if (expectedOutput == null) { Assert.IsNull(actualOutput); } else { Assert.AreEqual(expectedOutput.FactorOfStability, actualOutput.FactorOfStability); Assert.AreEqual(expectedOutput.MacroStabilityInwardsProbability, actualOutput.MacroStabilityInwardsProbability); Assert.AreEqual(expectedOutput.MacroStabilityInwardsReliability, actualOutput.MacroStabilityInwardsReliability); Assert.AreEqual(expectedOutput.RequiredProbability, actualOutput.RequiredProbability); Assert.AreEqual(expectedOutput.RequiredReliability, actualOutput.RequiredReliability); Assert.AreEqual(expectedOutput.MacroStabilityInwardsFactorOfSafety, actualOutput.MacroStabilityInwardsFactorOfSafety); } } #endregion #region GrassCoverErosionInwards FailureMechanism private static void AssertGrassCoverErosionInwardsFailureMechanism(GrassCoverErosionInwardsFailureMechanism expectedFailureMechanism, GrassCoverErosionInwardsFailureMechanism actualFailureMechanism) { Assert.AreEqual(expectedFailureMechanism.GeneralInput.N, actualFailureMechanism.GeneralInput.N); AssertDikeProfiles(expectedFailureMechanism.DikeProfiles, actualFailureMechanism.DikeProfiles); AssertCalculationGroup(expectedFailureMechanism.CalculationsGroup, actualFailureMechanism.CalculationsGroup); AssertComments(expectedFailureMechanism.InputComments, actualFailureMechanism.InputComments); AssertComments(expectedFailureMechanism.OutputComments, actualFailureMechanism.OutputComments); AssertComments(expectedFailureMechanism.NotRelevantComments, actualFailureMechanism.NotRelevantComments); } private static void AssertFailureMechanismSectionResults( IEnumerable expectedSectionResults, IEnumerable actualSectionResults) { AssertCollectionAndItems(expectedSectionResults, actualSectionResults, (expectedItem, actualItem) => { Assert.AreEqual(expectedItem.AssessmentLayerOne, actualItem.AssessmentLayerOne); Assert.AreEqual(expectedItem.AssessmentLayerTwoA, actualItem.AssessmentLayerTwoA); Assert.AreEqual(expectedItem.AssessmentLayerThree, actualItem.AssessmentLayerThree); if (expectedItem.Calculation == null) { Assert.IsNull(expectedItem.Calculation); } else { AssertGrassCoverErosionInwardsCalculation(expectedItem.Calculation, actualItem.Calculation); } }); } private static void AssertGrassCoverErosionInwardsCalculation(GrassCoverErosionInwardsCalculation expectedCalculation, GrassCoverErosionInwardsCalculation actualCalculation) { Assert.AreEqual(expectedCalculation.Name, actualCalculation.Name); AssertComments(expectedCalculation.Comments, actualCalculation.Comments); AssertGrassCoverErosionInwardsInput(expectedCalculation.InputParameters, actualCalculation.InputParameters); if (expectedCalculation.HasOutput) { AssertGrassCoverErosionInwardsOutput(expectedCalculation.Output, actualCalculation.Output); } else { Assert.IsFalse(actualCalculation.HasOutput); } } private static void AssertGrassCoverErosionInwardsInput(GrassCoverErosionInwardsInput expectedInput, GrassCoverErosionInwardsInput actualInput) { AssertReferencedObject(() => expectedInput.DikeProfile, () => actualInput.DikeProfile, AssertDikeProfile); AssertReferencedObject(() => expectedInput.HydraulicBoundaryLocation, () => actualInput.HydraulicBoundaryLocation, AssertHydraulicBoundaryLocation); AssertBreakWater(expectedInput.BreakWater, actualInput.BreakWater); Assert.AreEqual(expectedInput.Orientation, actualInput.Orientation); Assert.AreEqual(expectedInput.UseBreakWater, actualInput.UseBreakWater); Assert.AreEqual(expectedInput.UseForeshore, actualInput.UseForeshore); Assert.AreEqual(expectedInput.DikeHeight, actualInput.DikeHeight); Assert.AreEqual(expectedInput.CriticalFlowRate.Mean, actualInput.CriticalFlowRate.Mean); Assert.AreEqual(expectedInput.CriticalFlowRate.StandardDeviation, actualInput.CriticalFlowRate.StandardDeviation); Assert.AreEqual(expectedInput.DikeHeightCalculationType, actualInput.DikeHeightCalculationType); Assert.AreEqual(expectedInput.OvertoppingRateCalculationType, actualInput.OvertoppingRateCalculationType); } private static void AssertGrassCoverErosionInwardsOutput(GrassCoverErosionInwardsOutput expectedOutput, GrassCoverErosionInwardsOutput actualOutput) { AssertOvertoppingOutput(expectedOutput.OvertoppingOutput, actualOutput.OvertoppingOutput); AssertDikeHeightOutput(expectedOutput.DikeHeightOutput, actualOutput.DikeHeightOutput); AssertOvertoppingRateOutput(expectedOutput.OvertoppingRateOutput, actualOutput.OvertoppingRateOutput); } private static void AssertOvertoppingOutput(OvertoppingOutput expectedOutput, OvertoppingOutput actualOutput) { Assert.AreEqual(expectedOutput.WaveHeight, actualOutput.WaveHeight); Assert.AreEqual(expectedOutput.IsOvertoppingDominant, actualOutput.IsOvertoppingDominant); AssertProbabilityAssessmentOutput(expectedOutput.ProbabilityAssessmentOutput, actualOutput.ProbabilityAssessmentOutput); AssertGeneralResultTopLevelFaultTreeIllustrationPoint(expectedOutput.GeneralResult, actualOutput.GeneralResult); } private static void AssertDikeHeightOutput(DikeHeightOutput expectedOutput, DikeHeightOutput actualOutput) { AssertHydraulicLoadsOutput(expectedOutput, actualOutput); Assert.AreEqual(expectedOutput.DikeHeight, actualOutput.DikeHeight); } private static void AssertOvertoppingRateOutput(OvertoppingRateOutput expectedOutput, OvertoppingRateOutput actualOutput) { AssertHydraulicLoadsOutput(expectedOutput, actualOutput); Assert.AreEqual(expectedOutput.OvertoppingRate, actualOutput.OvertoppingRate); } private static void AssertHydraulicLoadsOutput(HydraulicLoadsOutput expectedOutput, HydraulicLoadsOutput actualOutput) { if (expectedOutput == null) { Assert.IsNull(actualOutput); return; } Assert.AreEqual(expectedOutput.TargetProbability, actualOutput.TargetProbability); Assert.AreEqual(expectedOutput.TargetReliability, actualOutput.TargetReliability); Assert.AreEqual(expectedOutput.CalculatedProbability, actualOutput.CalculatedProbability); Assert.AreEqual(expectedOutput.CalculatedReliability, actualOutput.CalculatedReliability); AssertGeneralResultTopLevelFaultTreeIllustrationPoint(expectedOutput.GeneralResult, actualOutput.GeneralResult); } #endregion #region GrassCoverErosionOutwards FailureMechanism private static void AssertGrassCoverErosionOutwardsFailureMechanism(GrassCoverErosionOutwardsFailureMechanism expectedFailureMechanism, GrassCoverErosionOutwardsFailureMechanism actualFailureMechanism) { Assert.AreEqual(expectedFailureMechanism.GeneralInput.N, actualFailureMechanism.GeneralInput.N); AssertForeshoreProfiles(expectedFailureMechanism.ForeshoreProfiles, actualFailureMechanism.ForeshoreProfiles); AssertHydraulicBoundaryLocations(expectedFailureMechanism.HydraulicBoundaryLocations, actualFailureMechanism.HydraulicBoundaryLocations); AssertCalculationGroup(expectedFailureMechanism.WaveConditionsCalculationGroup, actualFailureMechanism.WaveConditionsCalculationGroup); AssertComments(expectedFailureMechanism.InputComments, actualFailureMechanism.InputComments); AssertComments(expectedFailureMechanism.OutputComments, actualFailureMechanism.OutputComments); AssertComments(expectedFailureMechanism.NotRelevantComments, actualFailureMechanism.NotRelevantComments); } private static void AssertFailureMechanismSectionResults(IEnumerable expectedSectionResults, IEnumerable actualSectionResults) { AssertCollectionAndItems(expectedSectionResults, actualSectionResults, (expectedItem, actualItem) => { Assert.AreEqual(expectedItem.AssessmentLayerOne, actualItem.AssessmentLayerOne); Assert.AreEqual(expectedItem.AssessmentLayerTwoA, actualItem.AssessmentLayerTwoA); Assert.AreEqual(expectedItem.AssessmentLayerThree, actualItem.AssessmentLayerThree); }); } private static void AssertGrassCoverErosionOutwardsWaveConditionsCalculation(GrassCoverErosionOutwardsWaveConditionsCalculation expectedCalculation, GrassCoverErosionOutwardsWaveConditionsCalculation actualCalculation) { Assert.AreEqual(expectedCalculation.Name, actualCalculation.Name); AssertComments(expectedCalculation.Comments, actualCalculation.Comments); AssertWaveConditionsInput(expectedCalculation.InputParameters, actualCalculation.InputParameters); if (expectedCalculation.HasOutput) { AssertWaveConditionsOutputs(expectedCalculation.Output.Items.ToArray(), actualCalculation.Output.Items.ToArray()); } else { Assert.IsFalse(actualCalculation.HasOutput); } } #endregion #region StabilityStoneCover FailureMechanism private static void AssertStabilityStoneCoverFailureMechanism(StabilityStoneCoverFailureMechanism expectedFailureMechanism, StabilityStoneCoverFailureMechanism actualFailureMechanism) { AssertForeshoreProfiles(expectedFailureMechanism.ForeshoreProfiles, actualFailureMechanism.ForeshoreProfiles); AssertCalculationGroup(expectedFailureMechanism.WaveConditionsCalculationGroup, actualFailureMechanism.WaveConditionsCalculationGroup); AssertComments(expectedFailureMechanism.InputComments, actualFailureMechanism.InputComments); AssertComments(expectedFailureMechanism.OutputComments, actualFailureMechanism.OutputComments); AssertComments(expectedFailureMechanism.NotRelevantComments, actualFailureMechanism.NotRelevantComments); } private static void AssertFailureMechanismSectionResults(IEnumerable expectedSectionResults, IEnumerable actualSectionResults) { StabilityStoneCoverFailureMechanismSectionResult[] expectedSectionResultsArray = expectedSectionResults.ToArray(); StabilityStoneCoverFailureMechanismSectionResult[] actualSectionResultsArray = actualSectionResults.ToArray(); Assert.AreEqual(expectedSectionResultsArray.Length, actualSectionResultsArray.Length); for (var i = 0; i < expectedSectionResultsArray.Length; i++) { StabilityStoneCoverFailureMechanismSectionResult expectedSection = expectedSectionResultsArray[i]; StabilityStoneCoverFailureMechanismSectionResult actualSection = actualSectionResultsArray[i]; Assert.AreEqual(expectedSection.AssessmentLayerTwoA, actualSection.AssessmentLayerTwoA); Assert.AreEqual(expectedSection.AssessmentLayerThree, actualSection.AssessmentLayerThree); } } private static void AssertStabilityStoneCoverWaveConditionsCalculation(StabilityStoneCoverWaveConditionsCalculation expectedCalculation, StabilityStoneCoverWaveConditionsCalculation actualCalculation) { Assert.AreEqual(expectedCalculation.Name, actualCalculation.Name); AssertComments(expectedCalculation.Comments, actualCalculation.Comments); AssertWaveConditionsInput(expectedCalculation.InputParameters, actualCalculation.InputParameters); if (expectedCalculation.HasOutput) { AssertWaveConditionsOutputs(expectedCalculation.Output.BlocksOutput.ToArray(), actualCalculation.Output.BlocksOutput.ToArray()); AssertWaveConditionsOutputs(expectedCalculation.Output.ColumnsOutput.ToArray(), actualCalculation.Output.ColumnsOutput.ToArray()); } else { Assert.IsFalse(actualCalculation.HasOutput); } } #endregion #region WaveImpactAsphaltCover FailureMechanism private static void AssertWaveImpactAsphaltCoverFailureMechanism(WaveImpactAsphaltCoverFailureMechanism expectedFailureMechanism, WaveImpactAsphaltCoverFailureMechanism actualFailureMechanism) { AssertForeshoreProfiles(expectedFailureMechanism.ForeshoreProfiles, actualFailureMechanism.ForeshoreProfiles); AssertCalculationGroup(expectedFailureMechanism.WaveConditionsCalculationGroup, actualFailureMechanism.WaveConditionsCalculationGroup); AssertComments(expectedFailureMechanism.InputComments, actualFailureMechanism.InputComments); AssertComments(expectedFailureMechanism.OutputComments, actualFailureMechanism.OutputComments); AssertComments(expectedFailureMechanism.NotRelevantComments, actualFailureMechanism.NotRelevantComments); } private static void AssertFailureMechanismSectionResults(IEnumerable expectedSectionResults, IEnumerable actualSectionResults) { AssertCollectionAndItems(expectedSectionResults, actualSectionResults, (expectedItem, actualItem) => { Assert.AreEqual(expectedItem.AssessmentLayerOne, actualItem.AssessmentLayerOne); Assert.AreEqual(expectedItem.AssessmentLayerTwoA, actualItem.AssessmentLayerTwoA); Assert.AreEqual(expectedItem.AssessmentLayerThree, actualItem.AssessmentLayerThree); }); } private static void AssertWaveImpactAsphaltCoverWaveConditionsCalculation(WaveImpactAsphaltCoverWaveConditionsCalculation expectedCalculation, WaveImpactAsphaltCoverWaveConditionsCalculation actualCalculation) { Assert.AreEqual(expectedCalculation.Name, actualCalculation.Name); AssertComments(expectedCalculation.Comments, actualCalculation.Comments); AssertWaveConditionsInput(expectedCalculation.InputParameters, actualCalculation.InputParameters); if (expectedCalculation.HasOutput) { AssertWaveConditionsOutputs(expectedCalculation.Output.Items.ToArray(), actualCalculation.Output.Items.ToArray()); } else { Assert.IsFalse(actualCalculation.HasOutput); } } #endregion #region Hydraulic Boundary Database private static void AssertHydraulicBoundaryDatabase(HydraulicBoundaryDatabase expectedBoundaryDatabase, HydraulicBoundaryDatabase actualBoundaryDatabase) { Assert.IsNotNull(expectedBoundaryDatabase); Assert.AreEqual(expectedBoundaryDatabase.Version, actualBoundaryDatabase.Version); Assert.AreEqual(expectedBoundaryDatabase.FilePath, actualBoundaryDatabase.FilePath); Assert.AreEqual(expectedBoundaryDatabase.Locations.Count, actualBoundaryDatabase.Locations.Count); Assert.AreEqual(expectedBoundaryDatabase.CanUsePreprocessor, actualBoundaryDatabase.CanUsePreprocessor); Assert.AreEqual(expectedBoundaryDatabase.UsePreprocessor, actualBoundaryDatabase.UsePreprocessor); Assert.AreEqual(expectedBoundaryDatabase.PreprocessorDirectory, actualBoundaryDatabase.PreprocessorDirectory); AssertHydraulicBoundaryLocations(expectedBoundaryDatabase.Locations, actualBoundaryDatabase.Locations); } private static void AssertHydraulicBoundaryLocations(IEnumerable expectedHydraulicBoundaryLocations, IEnumerable actualHydraulicBoundaryLocations) { AssertCollectionAndItems(expectedHydraulicBoundaryLocations, actualHydraulicBoundaryLocations, AssertHydraulicBoundaryLocation); } private static void AssertHydraulicBoundaryLocation(HydraulicBoundaryLocation expectedBoundaryLocation, HydraulicBoundaryLocation actualBoundaryLocation) { Assert.AreEqual(expectedBoundaryLocation.Id, actualBoundaryLocation.Id); Assert.AreEqual(expectedBoundaryLocation.Name, actualBoundaryLocation.Name); Assert.AreEqual(expectedBoundaryLocation.Location, actualBoundaryLocation.Location); HydraulicBoundaryLocationCalculation expectedDesignWaterLevelCalculation = expectedBoundaryLocation.DesignWaterLevelCalculation; HydraulicBoundaryLocationCalculation actualDesignWaterLevelCalculation = actualBoundaryLocation.DesignWaterLevelCalculation; Assert.AreEqual(expectedDesignWaterLevelCalculation.InputParameters.ShouldIllustrationPointsBeCalculated, actualDesignWaterLevelCalculation.InputParameters.ShouldIllustrationPointsBeCalculated); AssertHydraulicBoundaryLocationOutput(expectedDesignWaterLevelCalculation.Output, actualDesignWaterLevelCalculation.Output); HydraulicBoundaryLocationCalculation expectedWaveHeightCalculation = expectedBoundaryLocation.WaveHeightCalculation; HydraulicBoundaryLocationCalculation actualWaveHeightCalculation = actualBoundaryLocation.WaveHeightCalculation; Assert.AreEqual(expectedWaveHeightCalculation.InputParameters.ShouldIllustrationPointsBeCalculated, actualWaveHeightCalculation.InputParameters.ShouldIllustrationPointsBeCalculated); AssertHydraulicBoundaryLocationOutput(expectedWaveHeightCalculation.Output, actualWaveHeightCalculation.Output); } private static void AssertHydraulicBoundaryLocationOutput(HydraulicBoundaryLocationOutput expectedOutput, HydraulicBoundaryLocationOutput actualOutput) { if (expectedOutput == null) { Assert.IsNull(actualOutput); return; } Assert.AreEqual(expectedOutput.Result, actualOutput.Result); Assert.AreEqual(expectedOutput.TargetProbability, actualOutput.TargetProbability); Assert.AreEqual(expectedOutput.TargetReliability, actualOutput.TargetReliability); Assert.AreEqual(expectedOutput.CalculatedProbability, actualOutput.CalculatedProbability); Assert.AreEqual(expectedOutput.CalculatedReliability, actualOutput.CalculatedReliability); Assert.AreEqual(expectedOutput.CalculationConvergence, actualOutput.CalculationConvergence); AssertGeneralResultTopLevelSubMechanismIllustrationPoint(expectedOutput.GeneralResult, actualOutput.GeneralResult); } #endregion #region IllustrationPoints private static void AssertGeneralResultTopLevelFaultTreeIllustrationPoint( GeneralResult expected, GeneralResult actual) { if (expected == null) { Assert.IsNull(actual); return; } AssertWindDirection(expected.GoverningWindDirection, actual.GoverningWindDirection); AssertCollectionAndItems(expected.Stochasts, actual.Stochasts, AssertStochast); AssertCollectionAndItems(expected.TopLevelIllustrationPoints, actual.TopLevelIllustrationPoints, AssertTopLevelFaultTreeIllustrationPoint); } private static void AssertTopLevelFaultTreeIllustrationPoint( TopLevelFaultTreeIllustrationPoint expected, TopLevelFaultTreeIllustrationPoint actual) { AssertWindDirection(expected.WindDirection, actual.WindDirection); Assert.AreEqual(expected.ClosingSituation, actual.ClosingSituation); AssertIllustrationPointNode(expected.FaultTreeNodeRoot, actual.FaultTreeNodeRoot); } private static void AssertIllustrationPointNode(IllustrationPointNode expected, IllustrationPointNode actual) { var expectedFaultTreeIllustrationPoint = expected.Data as FaultTreeIllustrationPoint; if (expectedFaultTreeIllustrationPoint != null) { var actualFaultTreeIllustrationPoint = actual.Data as FaultTreeIllustrationPoint; Assert.IsNotNull(actualFaultTreeIllustrationPoint); AssertFaultTreeIllustrationPoint(expectedFaultTreeIllustrationPoint, actualFaultTreeIllustrationPoint); AssertCollectionAndItems(expected.Children, actual.Children, AssertIllustrationPointNode); return; } var expectedSubMechanismIllustrationPoint = expected.Data as SubMechanismIllustrationPoint; if (expectedSubMechanismIllustrationPoint != null) { var actualSubMechanismIllustrationPoint = actual.Data as SubMechanismIllustrationPoint; Assert.IsNotNull(actualSubMechanismIllustrationPoint); AssertSubMechanismIllustrationPoint(expectedSubMechanismIllustrationPoint, actualSubMechanismIllustrationPoint); return; } Assert.Fail($"Expected data type {expected.Data.GetType()} is not supported."); } private static void AssertFaultTreeIllustrationPoint(FaultTreeIllustrationPoint expected, FaultTreeIllustrationPoint actual) { Assert.AreEqual(expected.Name, actual.Name); Assert.AreEqual(expected.Beta, actual.Beta); Assert.AreEqual(expected.CombinationType, actual.CombinationType); AssertCollectionAndItems(expected.Stochasts, actual.Stochasts, AssertStochast); } private static void AssertGeneralResultTopLevelSubMechanismIllustrationPoint( GeneralResult expectedGeneralResult, GeneralResult actualGeneralResult) { if (expectedGeneralResult == null) { Assert.IsNull(actualGeneralResult); return; } AssertWindDirection(expectedGeneralResult.GoverningWindDirection, actualGeneralResult.GoverningWindDirection); AssertCollectionAndItems(expectedGeneralResult.Stochasts, actualGeneralResult.Stochasts, AssertStochast); AssertCollectionAndItems(expectedGeneralResult.TopLevelIllustrationPoints, actualGeneralResult.TopLevelIllustrationPoints, AssertTopLevelSubMechanismIllustrationPoint); } private static void AssertWindDirection(WindDirection expectedWindDirection, WindDirection actualWindDirection) { Assert.AreEqual(expectedWindDirection.Name, actualWindDirection.Name); Assert.AreEqual(expectedWindDirection.Angle, actualWindDirection.Angle); } private static void AssertStochast(Stochast expectedStochast, Stochast actualStochast) { Assert.AreEqual(expectedStochast.Name, actualStochast.Name); Assert.AreEqual(expectedStochast.Alpha, actualStochast.Alpha); Assert.AreEqual(expectedStochast.Duration, actualStochast.Duration); } private static void AssertTopLevelSubMechanismIllustrationPoint( TopLevelSubMechanismIllustrationPoint expectedTopLevelSubMechanismIllustrationPoint, TopLevelSubMechanismIllustrationPoint actualTopLevelSubMechanismIllustrationPoint) { Assert.AreEqual(expectedTopLevelSubMechanismIllustrationPoint.ClosingSituation, actualTopLevelSubMechanismIllustrationPoint.ClosingSituation); WindDirection expectedWindDirection = expectedTopLevelSubMechanismIllustrationPoint.WindDirection; WindDirection actualWindDirection = actualTopLevelSubMechanismIllustrationPoint.WindDirection; AssertWindDirection(expectedWindDirection, actualWindDirection); AssertSubMechanismIllustrationPoint(expectedTopLevelSubMechanismIllustrationPoint.SubMechanismIllustrationPoint, actualTopLevelSubMechanismIllustrationPoint.SubMechanismIllustrationPoint); } private static void AssertSubMechanismIllustrationPoint( SubMechanismIllustrationPoint expectedSubMechanismIllustrationPoint, SubMechanismIllustrationPoint actualSubMechanismIllustrationPoint) { Assert.AreEqual(expectedSubMechanismIllustrationPoint.Name, actualSubMechanismIllustrationPoint.Name); Assert.AreEqual(expectedSubMechanismIllustrationPoint.Beta, actualSubMechanismIllustrationPoint.Beta); AssertCollectionAndItems(expectedSubMechanismIllustrationPoint.Stochasts, actualSubMechanismIllustrationPoint.Stochasts, AssertSubMechanismIllustrationPointStochast); AssertCollectionAndItems(expectedSubMechanismIllustrationPoint.IllustrationPointResults, actualSubMechanismIllustrationPoint.IllustrationPointResults, AssertIllustrationPointResult); } private static void AssertSubMechanismIllustrationPointStochast( SubMechanismIllustrationPointStochast expectedStochast, SubMechanismIllustrationPointStochast actualStochast) { AssertStochast(expectedStochast, actualStochast); Assert.AreEqual(expectedStochast.Realization, actualStochast.Realization); } private static void AssertIllustrationPointResult( IllustrationPointResult expectedResult, IllustrationPointResult actualResult) { Assert.AreEqual(expectedResult.Description, actualResult.Description); Assert.AreEqual(expectedResult.Value, actualResult.Value); } #endregion } }