Index: Ringtoets/MacroStabilityInwards/src/Ringtoets.MacroStabilityInwards.KernelWrapper/Calculators/Waternet/IWaternetCalculator.cs =================================================================== diff -u -rdfa159a984ea89b9e80109b2e55235a7ee09dfe4 -r99f866932bc3dc21c0a6129e8c3e425e795512c8 --- Ringtoets/MacroStabilityInwards/src/Ringtoets.MacroStabilityInwards.KernelWrapper/Calculators/Waternet/IWaternetCalculator.cs (.../IWaternetCalculator.cs) (revision dfa159a984ea89b9e80109b2e55235a7ee09dfe4) +++ Ringtoets/MacroStabilityInwards/src/Ringtoets.MacroStabilityInwards.KernelWrapper/Calculators/Waternet/IWaternetCalculator.cs (.../IWaternetCalculator.cs) (revision 99f866932bc3dc21c0a6129e8c3e425e795512c8) @@ -33,6 +33,6 @@ /// public interface IWaternetCalculator { - + void Calculate(); } } \ No newline at end of file Index: Ringtoets/MacroStabilityInwards/src/Ringtoets.MacroStabilityInwards.KernelWrapper/Calculators/Waternet/WaternetCalculator.cs =================================================================== diff -u -ra1b68821bc11b10c5ec147df7109ffd69e0acbd2 -r99f866932bc3dc21c0a6129e8c3e425e795512c8 --- Ringtoets/MacroStabilityInwards/src/Ringtoets.MacroStabilityInwards.KernelWrapper/Calculators/Waternet/WaternetCalculator.cs (.../WaternetCalculator.cs) (revision a1b68821bc11b10c5ec147df7109ffd69e0acbd2) +++ Ringtoets/MacroStabilityInwards/src/Ringtoets.MacroStabilityInwards.KernelWrapper/Calculators/Waternet/WaternetCalculator.cs (.../WaternetCalculator.cs) (revision 99f866932bc3dc21c0a6129e8c3e425e795512c8) @@ -20,8 +20,14 @@ // All rights reserved. using System; +using System.Collections.Generic; +using System.Linq; +using Deltares.WTIStability.Data.Geo; using Ringtoets.MacroStabilityInwards.KernelWrapper.Calculators.Waternet.Input; +using Ringtoets.MacroStabilityInwards.KernelWrapper.Creators.Input; using Ringtoets.MacroStabilityInwards.KernelWrapper.Kernels; +using Ringtoets.MacroStabilityInwards.KernelWrapper.Kernels.Waternet; +using SoilLayer = Ringtoets.MacroStabilityInwards.KernelWrapper.Calculators.Input.SoilLayer; namespace Ringtoets.MacroStabilityInwards.KernelWrapper.Calculators.Waternet { @@ -54,5 +60,41 @@ this.input = input; this.factory = factory; } + + public void Calculate() + { + IWaternetKernel waternetKernel = CalculateWaternet(); + } + + private IWaternetKernel CalculateWaternet() + { + IWaternetKernel waternetKernel = CreateWaternetKernel(); + + waternetKernel.Calculate(); + + return waternetKernel; + } + + private IWaternetKernel CreateWaternetKernel() + { + IWaternetKernel waternetKernel = factory.CreateWaternetKernel(); + + Soil[] soils = SoilCreator.Create(input.SoilProfile); + Dictionary layersWithSoils = + input.SoilProfile.Layers + .Zip(soils, (layer, soil) => new + { + layer, + soil + }) + .ToDictionary(x => x.layer, x => x.soil); + + waternetKernel.SoilModel = SoilModelCreator.Create(soils); + waternetKernel.SoilProfile = SoilProfileCreator.Create(input.SoilProfile, layersWithSoils); + waternetKernel.Location = WaternetStabilityLocationCreator.CreateExtreme(input); + waternetKernel.SurfaceLine = SurfaceLineCreator.Create(input.SurfaceLine, input.LandwardDirection); + + return waternetKernel; + } } } \ No newline at end of file Index: Ringtoets/MacroStabilityInwards/test/Ringtoets.MacroStabilityInwards.KernelWrapper.Test/Calculators/Waternet/WaternetCalculatorTest.cs =================================================================== diff -u -ra1b68821bc11b10c5ec147df7109ffd69e0acbd2 -r99f866932bc3dc21c0a6129e8c3e425e795512c8 --- Ringtoets/MacroStabilityInwards/test/Ringtoets.MacroStabilityInwards.KernelWrapper.Test/Calculators/Waternet/WaternetCalculatorTest.cs (.../WaternetCalculatorTest.cs) (revision a1b68821bc11b10c5ec147df7109ffd69e0acbd2) +++ Ringtoets/MacroStabilityInwards/test/Ringtoets.MacroStabilityInwards.KernelWrapper.Test/Calculators/Waternet/WaternetCalculatorTest.cs (.../WaternetCalculatorTest.cs) (revision 99f866932bc3dc21c0a6129e8c3e425e795512c8) @@ -20,15 +20,25 @@ // All rights reserved. using System; +using System.Collections.Generic; using System.Linq; using Core.Common.Base.Geometry; +using Core.Common.TestUtil; +using Deltares.WTIStability.Data.Geo; using NUnit.Framework; using Rhino.Mocks; using Ringtoets.MacroStabilityInwards.KernelWrapper.Calculators.Input; using Ringtoets.MacroStabilityInwards.KernelWrapper.Calculators.Waternet; using Ringtoets.MacroStabilityInwards.KernelWrapper.Calculators.Waternet.Input; +using Ringtoets.MacroStabilityInwards.KernelWrapper.Creators.Input; using Ringtoets.MacroStabilityInwards.KernelWrapper.Kernels; +using Ringtoets.MacroStabilityInwards.KernelWrapper.TestUtil.Kernels; +using Ringtoets.MacroStabilityInwards.KernelWrapper.TestUtil.Kernels.UpliftVan.Input; +using Ringtoets.MacroStabilityInwards.KernelWrapper.TestUtil.Kernels.Waternet; using Ringtoets.MacroStabilityInwards.Primitives; +using Point2D = Core.Common.Base.Geometry.Point2D; +using SoilLayer = Ringtoets.MacroStabilityInwards.KernelWrapper.Calculators.Input.SoilLayer; +using SoilProfile = Ringtoets.MacroStabilityInwards.KernelWrapper.Calculators.Input.SoilProfile; namespace Ringtoets.MacroStabilityInwards.KernelWrapper.Test.Calculators.Waternet { @@ -84,18 +94,94 @@ mocks.VerifyAll(); } - private WaternetCalculatorInput CreateValidCalculatorInput() + [Test] + public void Calculate_CalculatorWithValidInput_KernelCalculateMethodCalled() { + // Setup + WaternetCalculatorInput input = CreateValidCalculatorInput(); + var testMacroStabilityInwardsKernelFactory = new TestMacroStabilityInwardsKernelFactory(); + + WaternetKernelStub waternetKernel = testMacroStabilityInwardsKernelFactory.LastCreatedWaternetKernel; + + // Call + new WaternetCalculator(input, testMacroStabilityInwardsKernelFactory).Calculate(); + + // Assert + Assert.IsTrue(waternetKernel.Calculated); + } + + [Test] + public void Calculate_CalculatorWithCompleteInput_InputCorrectlySetToKernel() + { + // Setup + WaternetCalculatorInput input = CreateCompleteCalculatorInput(); + var testMacroStabilityInwardsKernelFactory = new TestMacroStabilityInwardsKernelFactory(); + + WaternetKernelStub waternetKernel = testMacroStabilityInwardsKernelFactory.LastCreatedWaternetKernel; + + // Call + new WaternetCalculator(input, testMacroStabilityInwardsKernelFactory).Calculate(); + + // Assert + Soil[] soils = SoilCreator.Create(input.SoilProfile); + Dictionary layersWithSoils = + input.SoilProfile.Layers + .Zip(soils, (layer, soil) => new + { + layer, + soil + }) + .ToDictionary(x => x.layer, x => x.soil); + + KernelInputAssert.AssertSoilModels(SoilModelCreator.Create(soils), waternetKernel.SoilModel); + KernelInputAssert.AssertSoilProfiles(SoilProfileCreator.Create(input.SoilProfile, layersWithSoils), waternetKernel.SoilProfile); + KernelInputAssert.AssertStabilityLocations(WaternetStabilityLocationCreator.CreateExtreme(input), waternetKernel.Location); + KernelInputAssert.AssertSurfaceLines(SurfaceLineCreator.Create(input.SurfaceLine, input.LandwardDirection), waternetKernel.SurfaceLine); + } + + private static WaternetCalculatorInput CreateCompleteCalculatorInput() + { var random = new Random(21); MacroStabilityInwardsSurfaceLine surfaceLine = CreateValidSurfaceLine(); + return new WaternetCalculatorInput(new WaternetCalculatorInput.ConstructionProperties { AssessmentLevel = random.NextDouble(), SurfaceLine = surfaceLine, SoilProfile = CreateValidSoilProfile(surfaceLine), DrainageConstruction = new DrainageConstruction(), PhreaticLineOffsetsExtreme = new PhreaticLineOffsets(), + PhreaticLineOffsetsDaily = new PhreaticLineOffsets(), + WaterLevelRiverAverage = random.Next(), + WaterLevelPolderExtreme = random.Next(), + WaterLevelPolderDaily = random.Next(), + MinimumLevelPhreaticLineAtDikeTopRiver = random.Next(), + MinimumLevelPhreaticLineAtDikeTopPolder = random.Next(), + LeakageLengthOutwardsPhreaticLine3 = random.Next(), + LeakageLengthInwardsPhreaticLine3 = random.Next(), + LeakageLengthOutwardsPhreaticLine4 = random.Next(), + LeakageLengthInwardsPhreaticLine4 = random.Next(), + PiezometricHeadPhreaticLine2Outwards = random.Next(), + PiezometricHeadPhreaticLine2Inwards = random.Next(), + PenetrationLength = random.Next(), + AdjustPhreaticLine3And4ForUplift = random.NextBoolean(), + DikeSoilScenario = random.NextEnumValue() + }); + } + + private static WaternetCalculatorInput CreateValidCalculatorInput() + { + var random = new Random(21); + + MacroStabilityInwardsSurfaceLine surfaceLine = CreateValidSurfaceLine(); + return new WaternetCalculatorInput(new WaternetCalculatorInput.ConstructionProperties + { + AssessmentLevel = random.NextDouble(), + SurfaceLine = surfaceLine, + SoilProfile = CreateValidSoilProfile(surfaceLine), + DrainageConstruction = new DrainageConstruction(), + PhreaticLineOffsetsExtreme = new PhreaticLineOffsets(), PhreaticLineOffsetsDaily = new PhreaticLineOffsets() }); } Index: Ringtoets/MacroStabilityInwards/test/Ringtoets.MacroStabilityInwards.KernelWrapper.TestUtil/Calculators/Waternet/WaternetCalculatorStub.cs =================================================================== diff -u -ra1b68821bc11b10c5ec147df7109ffd69e0acbd2 -r99f866932bc3dc21c0a6129e8c3e425e795512c8 --- Ringtoets/MacroStabilityInwards/test/Ringtoets.MacroStabilityInwards.KernelWrapper.TestUtil/Calculators/Waternet/WaternetCalculatorStub.cs (.../WaternetCalculatorStub.cs) (revision a1b68821bc11b10c5ec147df7109ffd69e0acbd2) +++ Ringtoets/MacroStabilityInwards/test/Ringtoets.MacroStabilityInwards.KernelWrapper.TestUtil/Calculators/Waternet/WaternetCalculatorStub.cs (.../WaternetCalculatorStub.cs) (revision 99f866932bc3dc21c0a6129e8c3e425e795512c8) @@ -33,5 +33,7 @@ /// Gest or sets the Waternet calculator input. /// public WaternetCalculatorInput Input { get; set; } + + public void Calculate() {} } } \ No newline at end of file