Index: DamClients/DamLive/trunk/src/Deltares.DamLive.Tests/StabilityInsideBishopGridTest.cs =================================================================== diff -u --- DamClients/DamLive/trunk/src/Deltares.DamLive.Tests/StabilityInsideBishopGridTest.cs (revision 0) +++ DamClients/DamLive/trunk/src/Deltares.DamLive.Tests/StabilityInsideBishopGridTest.cs (revision 4100) @@ -0,0 +1,173 @@ +// Copyright (C) Stichting Deltares 2023. All rights reserved. +// +// This file is part of the application DAM - Live. +// +// DAM - Live 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 System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using Deltares.Dam.Application.Live; +using Deltares.Dam.Data; +using Deltares.DamLive.TestHelper; +using Deltares.Standard.IO; +using NUnit.Framework; + +namespace Deltares.DamLive.Tests; + + +[TestFixture] +[Category("Integration")] + +public class StabilityInsideBishopGridTest +{ + const string projectStabilityFilename = @"DAMLive.damx"; + const string input1aFilename = @"live.InputTimeSeriesMHW.xml"; + const string output1aFilename = @"live.OutputTimeSeriesMHW.xml"; + const string calculationParametersStabilityFilename = @"live.ParametersFile.xml"; + + const string testWorkingFolder = @".\damLiveBishopGridWork"; + private const string testStablityDataFolder = @"..\..\..\data\IntegerationTests\StabilityInsideBishopGrid"; + private List locations; + + private string inputFile; + private string outputFile; + private string projectFile; + private string parameterFile; + + private DamEngineRunner runner; + + [SetUp] + public void SetupFixture() + { + IoHelper.RemoveTestWorkingDirectory(testWorkingFolder); // to be sure no test directory exist from previous tests + Directory.CreateDirectory(testWorkingFolder); + } + + [TearDown] + public void TearDownFixture() + { + IoHelper.RemoveTestWorkingDirectory(testWorkingFolder); + } + + [TearDown] + public void TearDownTest() + { + AssertNoErrors(); + } + + [SetUp] + public void SetupTest() {} + + [Test] //, Ignore("")] + [Category("Integration")] + [Category("Work_In_Progress")] + [TestCase(1)] + [TestCase(20)] + public void CalculateStabilityInsideBishopGridUsingTestFilesHasExpectedResultsInOutputFile(int maxCores) + { + const double cTolerance = 0.0005; + SetupStabilityProject(); + runner.Initialize(); + runner.MaxCalculationCores = maxCores; + Assert.IsNotNull(runner); + Assert.IsNotNull(runner.DamProjectData); + Assert.IsNotNull(runner.CalculationParameters); + Assert.IsNotNull(runner.CalculationParameters.CalculationModules); + Assert.IsNotNull(runner.CalculationParameters.MStabParameters); + + runner.Run(); + //runner.WriteResultsToFile(outputFile); + + AssertNoErrors(); + + // Assertions + + List series = runner.OutputTimeSeriesCollection.Series; + + var seriesCount = 0; + + string[] validParameterIDs = Enum.GetNames(typeof(TimeSerieParameters)); + foreach (TimeSerie timeSeries in series) + { + Assert.IsTrue(validParameterIDs.Any(n => n == timeSeries.ParameterId)); + Assert.IsTrue(locations.Any(l => l.Name == timeSeries.LocationId)); + // StabilityInside check + if (timeSeries.ParameterId == TimeSerieParameters.StabilityInsideFactor.ToString()) + { + if (timeSeries.LocationId == "grebbedijk1a") + { + TimeSerieEntry firstEntry = timeSeries.Entries.First(); + Assert.AreEqual(1.603, firstEntry.Value, cTolerance, "The computed safety factory is not correct"); + } + + if (timeSeries.LocationId == "grebbedijk3a") + { + TimeSerieEntry firstEntry = timeSeries.Entries.First(); + // Following value was 0.590 in the previous DamLive version, but that has to do with how the + // reference level Su is handled in D-GeoStability 18.1 and D-GeoStability 15.1 + Assert.AreEqual(1.007, firstEntry.Value, cTolerance, "The computed safety factory is not correct"); + } + } + + seriesCount++; + } + + Assert.IsTrue(seriesCount > 0, "No output time series"); + + } + private void SetupStabilityProject() + { + string actualTestPath = Path.GetFullPath(testWorkingFolder); + + Directory.CreateDirectory(actualTestPath); + + DirectoryHelper.CopyRecursive(actualTestPath, testStablityDataFolder); + + inputFile = Path.Combine(actualTestPath, input1aFilename); + outputFile = Path.Combine(actualTestPath, output1aFilename); + parameterFile = Path.Combine(actualTestPath, calculationParametersStabilityFilename); + projectFile = Path.Combine(actualTestPath, projectStabilityFilename); + DamProject.SetTestProgramVersion("23.1"); + DamProjectData damData = DamProject.LoadData(projectFile); + locations = damData.Locations; + + // Load the sensor time serie data (see input file for details) + TimeSerieCollection inputTimeSeries = TimeSerieCollection.LoadFromFile(inputFile); + //ShortenTimeSeries(inputTimeSeries); + inputTimeSeries.Save(Path.ChangeExtension(inputFile, "short.xml")); + + runner = new DamEngineRunner + { + DamXFile = new FileInfo(projectFile), + ParametersFile = new FileInfo(parameterFile), + FewsInputFile = new FileInfo(inputFile), + FewsOutputFile = new FileInfo(outputFile), + Filter = "", + InputTimeSeriesCollection = inputTimeSeries + }; + } + private void AssertNoErrors() + { + if (runner.HasErrors) + { + Assert.Fail("The test failed. See the error log in the test output console for more info"); + } + } +} \ No newline at end of file