// 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;
public class PipingWtiInsideTest
{
const string projectIntegrationFilename = @"DAMLive.damx";
const string input1aFilename = @"live.InputTimeSeriesMHW.xml";
const string output1aFilename = @"live.OutputTimeSeriesMHW.xml";
const string calculationParametersIntegrationFilename = @"live.ParametersFile.xml";
const string testWorkingFolder = @".\damLivePipingWtiWork";
private const string testIntegrationDataFolder = @"..\..\..\data\IntegerationTests\PipingWti";
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()
{
GeneralHelper.AssertNoErrors(runner);
}
[SetUp]
public void SetupTest() {}
[Test]
[Category("Integration")]
[Category("Work_In_Progress")]
[TestCase(1)]
[TestCase(20)]
public void CalculatePipingInsideWt1ModelUsingTestFilesHasExpectedResultsInOutputFile(int maxCores)
{
const double cTolerance = 0.0005;
GeneralHelper.SetupIntegrationProject(maxCores, testWorkingFolder, testIntegrationDataFolder, input1aFilename,
output1aFilename, calculationParametersIntegrationFilename,
projectIntegrationFilename, out runner, out locations);
//SetupPipingProject(maxCores);
runner.Initialize();
runner.MaxCalculationCores = maxCores;
Assert.IsNotNull(runner);
Assert.IsNotNull(runner.DamProjectData);
Assert.IsNotNull(runner.CalculationParameters);
Assert.IsNotNull(runner.CalculationParameters.CalculationModules);
runner.Run();
//runner.WriteResultsToFile(outputFile);
GeneralHelper.AssertNoErrors(runner);
// 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.PipingFactor.ToString())
{
if (timeSeries.LocationId == "Purmer_PU0042+00_K")
{
TimeSerieEntry firstEntry = timeSeries.Entries.First();
Assert.AreEqual(0.740, firstEntry.Value, cTolerance, "The computed safety factory is not correct");
TimeSerieEntry lastEntry = timeSeries.Entries.Last();
Assert.AreEqual(0.680, lastEntry.Value, cTolerance, "The computed safety factory is not correct");
}
if (timeSeries.LocationId == "Purmer_PU0042+00_K_V")
{
TimeSerieEntry firstEntry = timeSeries.Entries.First();
Assert.AreEqual(0.740, firstEntry.Value, cTolerance, "The computed safety factory is not correct");
TimeSerieEntry lastEntry = timeSeries.Entries.Last();
Assert.AreEqual(0.680, lastEntry.Value, cTolerance, "The computed safety factory is not correct");
}
if (timeSeries.LocationId == "Purmer_PU0110+20_R")
{
TimeSerieEntry firstEntry = timeSeries.Entries.First();
Assert.AreEqual(90, firstEntry.Value, cTolerance, "The computed safety factory is not correct");
TimeSerieEntry lastEntry = timeSeries.Entries.Last();
Assert.AreEqual(90, lastEntry.Value, cTolerance, "The computed safety factory is not correct");
}
}
seriesCount++;
}
Assert.IsTrue(seriesCount > 0, "No output time series");
}
}