// Copyright (C) Stichting Deltares 2025. All rights reserved. // // This file is part of the Dam Engine. // // The Dam Engine is free software: you can redistribute it and/or modify // it under the terms of the GNU Affero 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 Affero General Public License for more details. // // You should have received a copy of the GNU Affero 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 Deltares.DamEngine.Data.Geotechnics; using Deltares.DamEngine.TestHelpers.Factories; using NUnit.Framework; namespace Deltares.DamEngine.Data.Tests.Geotechnics; [TestFixture] public class SoilProfileHelperTests { [Test] public void GivenHorizontalSurfaceLineAbove1DProfile_WhenDetermining1DProfileAtMiddle_ThenExpectedLayerAddedAbove() { SoilProfile1D soilProfile1D = CreateSoilProfile1D(); SurfaceLine2 surfaceLine = FactoryForSurfaceLines.CreateHorizontalSurfaceLine(20); SoilProfile1D soilProfile1D2 = SoilProfileHelper.DetermineForSurfaceLineCorrected1DProfileAtX(soilProfile1D, surfaceLine, 0, new Soil("Embankment")); Assert.That(soilProfile1D2.Layers, Has.Count.EqualTo(6)); Assert.Multiple(() => { Assert.That(soilProfile1D2.Layers[0].TopLevel, Is.EqualTo(20)); Assert.That(soilProfile1D2.Layers[0].SoilName, Is.EqualTo("Embankment")); Assert.That(soilProfile1D2.Layers[1].TopLevel, Is.EqualTo(10)); Assert.That(soilProfile1D2.Layers[1].SoilName, Is.EqualTo("Soil 1")); Assert.That(soilProfile1D2.Layers[2].TopLevel, Is.EqualTo(6)); Assert.That(soilProfile1D2.Layers[2].SoilName, Is.EqualTo("Soil 2")); Assert.That(soilProfile1D2.Layers[3].TopLevel, Is.EqualTo(4)); Assert.That(soilProfile1D2.Layers[3].SoilName, Is.EqualTo("Soil 3")); Assert.That(soilProfile1D2.Layers[4].TopLevel, Is.EqualTo(2)); Assert.That(soilProfile1D2.Layers[4].SoilName, Is.EqualTo("Soil 4")); Assert.That(soilProfile1D2.Layers[5].TopLevel, Is.EqualTo(-3)); Assert.That(soilProfile1D2.Layers[5].SoilName, Is.EqualTo("Soil 5")); }); } public class GivenSurfaceLineInside1DProfile { private readonly SoilProfile1D soilProfile1D = CreateSoilProfile1D(); private readonly SurfaceLine2 surfaceLine = FactoryForSurfaceLines.CreateSurfaceLineTutorial1(); [Test] public void WhenDetermining1DProfileAtDikeToeAtRiver_ThenExpectedLayersAboveAreRemoved() { SoilProfile1D soilProfile1D2 = SoilProfileHelper.DetermineForSurfaceLineCorrected1DProfileAtX(soilProfile1D, surfaceLine, 10, null); Assert.That(soilProfile1D2.Layers, Has.Count.EqualTo(2)); Assert.Multiple(() => { Assert.That(soilProfile1D2.Layers[0].TopLevel, Is.EqualTo(0)); Assert.That(soilProfile1D2.Layers[0].SoilName, Is.EqualTo("Soil 4")); Assert.That(soilProfile1D2.Layers[0].Name, Is.EqualTo("Layer 4")); Assert.That(soilProfile1D2.Layers[1].TopLevel, Is.EqualTo(-3)); Assert.That(soilProfile1D2.Layers[1].SoilName, Is.EqualTo("Soil 5")); Assert.That(soilProfile1D2.Layers[1].Name, Is.EqualTo("Layer 5")); }); } [Test] public void WhenDetermining1DProfileAtDikeTopAtPolder_ThenExpectedLayersAboveAreRemoved() { SoilProfile1D soilProfile1D2 = SoilProfileHelper.DetermineForSurfaceLineCorrected1DProfileAtX(soilProfile1D, surfaceLine, 40.5, null); Assert.That(soilProfile1D2.Layers, Has.Count.EqualTo(4)); Assert.Multiple(() => { Assert.That(soilProfile1D2.Layers[0].TopLevel, Is.EqualTo(5)); Assert.That(soilProfile1D2.Layers[0].SoilName, Is.EqualTo("Soil 2")); Assert.That(soilProfile1D2.Layers[0].Name, Is.EqualTo("Layer 2")); Assert.That(soilProfile1D2.Layers[1].TopLevel, Is.EqualTo(4)); Assert.That(soilProfile1D2.Layers[1].SoilName, Is.EqualTo("Soil 3")); Assert.That(soilProfile1D2.Layers[1].Name, Is.EqualTo("Layer 3")); Assert.That(soilProfile1D2.Layers[2].TopLevel, Is.EqualTo(2)); Assert.That(soilProfile1D2.Layers[2].SoilName, Is.EqualTo("Soil 4")); Assert.That(soilProfile1D2.Layers[2].Name, Is.EqualTo("Layer 4")); Assert.That(soilProfile1D2.Layers[3].TopLevel, Is.EqualTo(-3)); Assert.That(soilProfile1D2.Layers[3].SoilName, Is.EqualTo("Soil 5")); Assert.That(soilProfile1D2.Layers[3].Name, Is.EqualTo("Layer 5")); }); } } private static SoilProfile1D CreateSoilProfile1D() { var soilProfile1D = new SoilProfile1D(); soilProfile1D.Layers.Add(new SoilLayer1D(new Soil("Soil 1"), 10)); soilProfile1D.Layers.Add(new SoilLayer1D(new Soil("Soil 2"), 6)); soilProfile1D.Layers.Add(new SoilLayer1D(new Soil("Soil 3"), 4)); soilProfile1D.Layers.Add(new SoilLayer1D(new Soil("Soil 4"), 2)); soilProfile1D.Layers.Add(new SoilLayer1D(new Soil("Soil 5"), -3)); soilProfile1D.Layers[0].Name = "Layer 1"; soilProfile1D.Layers[1].Name = "Layer 2"; soilProfile1D.Layers[2].Name = "Layer 3"; soilProfile1D.Layers[3].Name = "Layer 4"; soilProfile1D.Layers[4].Name = "Layer 5"; return soilProfile1D; } }