// Copyright (C) Stichting Deltares 2016. 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.Collections.Generic; using System.Linq; using Core.Common.Base.Geometry; using NUnit.Framework; using Ringtoets.Common.Data.Calculation; using Ringtoets.Common.Data.FailureMechanism; using Ringtoets.Piping.Data.TestUtil; using Ringtoets.Piping.Forms; using Ringtoets.Piping.Primitives; namespace Ringtoets.Piping.Data.Test { [TestFixture] public class PipingCalculationGroupExtensionsTest { [Test] public void AddCalculationScenariosToFailureMechanismSectionResult_CalculationGroupNoChildren_NoScenariosAddedToFailureMechanismSectionResult() { // Setup var calculationGroup = new CalculationGroup(); var failureMechanism = GetFailureMechanismWithSections(); // Precondition foreach (var failureMechanismSectionResult in failureMechanism.SectionResults) { CollectionAssert.IsEmpty(failureMechanismSectionResult.CalculationScenarios); } // Call calculationGroup.AddCalculationScenariosToFailureMechanismSectionResult(failureMechanism); // Assert foreach (var failureMechanismSectionResult in failureMechanism.SectionResults) { CollectionAssert.IsEmpty(failureMechanismSectionResult.CalculationScenarios); } } [Test] public void AddCalculationScenariosToFailureMechanismSectionResult_CalculationGroupWithChildren_ScenariosAddedToFailureMechanismSectionResult() { // Setup var failureMechanism = GetFailureMechanismWithSections(); var calculationsStructure = PipingCalculationConfigurationHelper.GenerateCalculationItemsStructure( failureMechanism.SurfaceLines, failureMechanism.StochasticSoilModels, failureMechanism.GeneralInput, failureMechanism.PipingProbabilityAssessmentInput); foreach (var item in calculationsStructure) { failureMechanism.CalculationsGroup.Children.Add(item); } // Precondition foreach (var failureMechanismSectionResult in failureMechanism.SectionResults) { CollectionAssert.IsEmpty(failureMechanismSectionResult.CalculationScenarios); } // Call failureMechanism.CalculationsGroup.AddCalculationScenariosToFailureMechanismSectionResult(failureMechanism); // Assert var failureMechanismSectionResult1 = failureMechanism.SectionResults.First(); var failureMechanismSectionResult2 = failureMechanism.SectionResults.ElementAt(1); Assert.AreEqual(4, failureMechanismSectionResult1.CalculationScenarios.Count); Assert.AreEqual(2, failureMechanismSectionResult2.CalculationScenarios.Count); } [Test] public void AddCalculationScenariosToFailureMechanismSectionResult_CalculationGroupChildrenNoScenarios_NoScenariosAddedToFailureMechanismSectionResult() { // Setup var failureMechanism = GetFailureMechanismWithSections(); var stochasticSoilModel = failureMechanism.StochasticSoilModels.First(); var calculation = new PipingCalculation(new GeneralPipingInput(), new PipingProbabilityAssessmentInput()) { InputParameters = { SurfaceLine = failureMechanism.SurfaceLines.First(), StochasticSoilModel = stochasticSoilModel, StochasticSoilProfile = stochasticSoilModel.StochasticSoilProfiles.First() } }; failureMechanism.CalculationsGroup.Children.Add(calculation); // Precondition foreach (var failureMechanismSectionResult in failureMechanism.SectionResults) { CollectionAssert.IsEmpty(failureMechanismSectionResult.CalculationScenarios); } // Call failureMechanism.CalculationsGroup.AddCalculationScenariosToFailureMechanismSectionResult(failureMechanism); // Assert foreach (var failureMechanismSectionResult in failureMechanism.SectionResults) { CollectionAssert.IsEmpty(failureMechanismSectionResult.CalculationScenarios); } } [Test] public void AddCalculationScenariosToFailureMechanismSectionResult_FailureMechanismWithoutSections_NoScenariosAddedToFailureMechanismSectionResult() { // Setup var failureMechanism = GetFailureMechanismWithoutSections(); var calculationsStructure = PipingCalculationConfigurationHelper.GenerateCalculationItemsStructure( failureMechanism.SurfaceLines, failureMechanism.StochasticSoilModels, failureMechanism.GeneralInput, failureMechanism.PipingProbabilityAssessmentInput); foreach (var item in calculationsStructure) { failureMechanism.CalculationsGroup.Children.Add(item); } // Precondition CollectionAssert.IsEmpty(failureMechanism.SectionResults); // Call failureMechanism.CalculationsGroup.AddCalculationScenariosToFailureMechanismSectionResult(failureMechanism); // Assert CollectionAssert.IsEmpty(failureMechanism.SectionResults); } [Test] public void AddCalculationScenariosToFailureMechanismSectionResult_CalculationAlreadyInFailureMechanismSectionResult_ScenarioNotAddedToFailureMechanismSectionResult() { // Setup var failureMechanism = GetFailureMechanismWithSections(); var calculationsStructure = PipingCalculationConfigurationHelper.GenerateCalculationItemsStructure( failureMechanism.SurfaceLines, failureMechanism.StochasticSoilModels, failureMechanism.GeneralInput, failureMechanism.PipingProbabilityAssessmentInput); foreach (var item in calculationsStructure) { failureMechanism.CalculationsGroup.Children.Add(item); } failureMechanism.CalculationsGroup.AddCalculationScenariosToFailureMechanismSectionResult(failureMechanism); // Precondition var failureMechanismSectionResult1 = failureMechanism.SectionResults.First(); var failureMechanismSectionResult2 = failureMechanism.SectionResults.ElementAt(1); Assert.AreEqual(4, failureMechanismSectionResult1.CalculationScenarios.Count); Assert.AreEqual(2, failureMechanismSectionResult2.CalculationScenarios.Count); // Call failureMechanism.CalculationsGroup.AddCalculationScenariosToFailureMechanismSectionResult(failureMechanism); // Assert var failureMechanismSectionResult3 = failureMechanism.SectionResults.First(); var failureMechanismSectionResult4 = failureMechanism.SectionResults.ElementAt(1); Assert.AreEqual(4, failureMechanismSectionResult3.CalculationScenarios.Count); Assert.AreEqual(2, failureMechanismSectionResult4.CalculationScenarios.Count); } private static PipingFailureMechanism GetFailureMechanismWithoutSections() { return GetFailureMechanism(); } private static PipingFailureMechanism GetFailureMechanismWithSections() { var failureMechanism = GetFailureMechanism(); failureMechanism.AddSection(new FailureMechanismSection("Section 1", new List { new Point2D(0.0, 0.0), new Point2D(5.0, 0.0) })); failureMechanism.AddSection(new FailureMechanismSection("Section 2", new List { new Point2D(5.0, 0.0), new Point2D(10.0, 0.0) })); return failureMechanism; } private static PipingFailureMechanism GetFailureMechanism() { var surfaceLine1 = new RingtoetsPipingSurfaceLine { Name = "Surface line 1", ReferenceLineIntersectionWorldPoint = new Point2D(0.0, 0.0) }; surfaceLine1.SetGeometry(new[] { new Point3D(0.0, 5.0, 0.0), new Point3D(0.0, 0.0, 1.0), new Point3D(0.0, -5.0, 0.0) }); var surfaceLine2 = new RingtoetsPipingSurfaceLine { Name = "Surface line 2", ReferenceLineIntersectionWorldPoint = new Point2D(5.0, 0.0) }; surfaceLine2.SetGeometry(new[] { new Point3D(5.0, 5.0, 0.0), new Point3D(5.0, 0.0, 1.0), new Point3D(5.0, -5.0, 0.0) }); var failureMechanism = new PipingFailureMechanism { SurfaceLines = { surfaceLine1, surfaceLine2 }, StochasticSoilModels = { new TestStochasticSoilModel { Geometry = { new Point2D(0.0, 0.0), new Point2D(5.0, 0.0) }, } } }; return failureMechanism; } } }