Index: DamEngine/trunk/src/Deltares.DamEngine.IntegrationTests/IntegrationTests/OperationalPulauTekongTests.cs =================================================================== diff -u -r2015 -r2023 --- DamEngine/trunk/src/Deltares.DamEngine.IntegrationTests/IntegrationTests/OperationalPulauTekongTests.cs (.../OperationalPulauTekongTests.cs) (revision 2015) +++ DamEngine/trunk/src/Deltares.DamEngine.IntegrationTests/IntegrationTests/OperationalPulauTekongTests.cs (.../OperationalPulauTekongTests.cs) (revision 2023) @@ -23,6 +23,7 @@ using System.Text; using Deltares.DamEngine.Interface; using Deltares.DamEngine.Io; +using Deltares.DamEngine.Io.XmlOutput; using Deltares.DamEngine.TestHelpers; using NUnit.Framework; @@ -41,8 +42,6 @@ [Test] [TestCase(@"PulauTekong.InputFile.xml", 2.486106, 2.114159)] [TestCase(@"PulauTekong.InputFile-NoValues.xml", novalue, novalue)] - // This test is exactly the same as RunMultiCore_UsingTestFiles_HasExpectedResultsInOutputFile - // except that the other test runs multicore public void Run_UsingTestFiles_HasExpectedResultsInOutputFile(string inputTestcaseFilename, double valueEntry1, double valueEntry2) { const string calcDir = "TestOperationalPulauTekong"; @@ -78,45 +77,47 @@ } [Test, Category("MultiCore")] - [TestCase(@"PulauTekong.InputFile.xml", 2.486106, 2.114159)] - [TestCase(@"PulauTekong.InputFile-NoValues.xml", novalue, novalue)] - // This test is exactly the same as Run_UsingTestFiles_HasExpectedResultsInOutputFile - // except that this test runs multicore - public void RunMultiCore_UsingTestFiles_HasExpectedResultsInOutputFile(string inputTestcaseFilename, double valueEntry1, double valueEntry2) + // This test runs the same project as Run_UsingTestFiles_HasExpectedResultsInOutputFile + // except that it runs it with both single core and multi core. + // The output of both runs must be the same + public void CompareResultFromMultiCoreRunWithSingleCoreRun() { - const string calcDir = "TestOperationalPulauTekongMultiCore"; - const string workingDir = @"TestFiles\"; - const string baseTestDirectory = @".\Operational\PulauTekong\"; + var calcDir = "TestOperationalPulauTekongSingleCore"; + var outputFileName = @"PulauTekongSingleCore.OutputFile.xml"; + var output = RunTestProjectCores(calcDir, outputFileName, 1); + var outputSingleCore = DamXmlSerialization.SaveOutputAsXmlString(output); + + calcDir = "TestOperationalPulauTekongMultiCore"; + outputFileName = @"PulauTekongMultiCore.OutputFile.xml"; + output = RunTestProjectCores(calcDir, outputFileName, 4); + var outputMultiCore = DamXmlSerialization.SaveOutputAsXmlString(output); + + Assert.AreEqual(outputSingleCore, outputMultiCore); + } + + private Output RunTestProjectCores(string calcDir, string outputFileName, int coreCount) + { if (Directory.Exists(calcDir)) { Directory.Delete(calcDir, true); // delete previous results } - Directory.CreateDirectory(calcDir); - // Switch to TestFiles directory to check if DamLive can also run from another directory - Directory.SetCurrentDirectory(workingDir); - // Based on "Deltares.DamLive.Tests.PulauTekongTest" - const int multiCoreCount = 4; - string inputFileName = baseTestDirectory + inputTestcaseFilename; - const string outputFileName = baseTestDirectory + @"PulauTekongMultiCore.OutputFile.xml"; + + const string baseTestDirectory = @".\TestFiles\Operational\PulauTekong\"; + string inputFileName = baseTestDirectory + @"PulauTekong.InputFile.xml"; string inputString = File.ReadAllText(inputFileName); inputString = XmlAdapter.ChangeValueInXml(inputString, "ProjectPath", ""); // Current directory will be used inputString = XmlAdapter.ChangeValueInXml(inputString, "CalculationMap", calcDir); // Current directory will be used inputString = XmlAdapter.ChangeValueInXml(inputString, "MapForSoilgeometries2D", baseTestDirectory + @"PulauTekong.geometries2D.0\"); inputString = XmlAdapter.ChangeValueInXml(inputString, "SoilDatabaseName", baseTestDirectory + @"PulauTekong0.soilmaterials.mdb"); - inputString = XmlAdapter.ChangeValueInXml(inputString, "MaxCalculationCores", multiCoreCount.ToString()); + inputString = XmlAdapter.ChangeValueInXml(inputString, "MaxCalculationCores", coreCount.ToString()); EngineInterface engineInterface = new EngineInterface(inputString); Assert.IsNotNull(engineInterface.DamProjectData); string outputString = engineInterface.Run(); File.WriteAllText(outputFileName, outputString, Encoding.Unicode); Assert.IsNotNull(outputString); - var output = DamXmlSerialization.LoadOutputFromXmlString(outputString); - Assert.AreEqual(stabilityOutsideFactor, output.Results.OperationalOutputTimeSeries[0].ParameterId); - Assert.AreEqual(valueEntry1, output.Results.OperationalOutputTimeSeries[0].Entries.TimeSerieEntry[0].Value, tolerance); - Assert.AreEqual(stabilityOutsideFactor, output.Results.OperationalOutputTimeSeries[1].ParameterId); - Assert.AreEqual(valueEntry2, output.Results.OperationalOutputTimeSeries[1].Entries.TimeSerieEntry[0].Value, tolerance); + return DamXmlSerialization.LoadOutputFromXmlString(outputString); } - } } Index: DamEngine/trunk/src/Deltares.DamEngine.IntegrationTests/IntegrationTests/OperationalIntegrationTests.cs =================================================================== diff -u -r2015 -r2023 --- DamEngine/trunk/src/Deltares.DamEngine.IntegrationTests/IntegrationTests/OperationalIntegrationTests.cs (.../OperationalIntegrationTests.cs) (revision 2015) +++ DamEngine/trunk/src/Deltares.DamEngine.IntegrationTests/IntegrationTests/OperationalIntegrationTests.cs (.../OperationalIntegrationTests.cs) (revision 2023) @@ -23,6 +23,7 @@ using System.Text; using Deltares.DamEngine.Interface; using Deltares.DamEngine.Io; +using Deltares.DamEngine.Io.XmlOutput; using Deltares.DamEngine.TestHelpers; using NUnit.Framework; @@ -37,8 +38,6 @@ private const double tolerance = 0.0005; [Test] - // This test is exactly the same as RunMultiCore_UsingTestFiles_HasExpectedResultsInOutputFile - // except that the other test runs multicore public void Run_UsingTestFiles_HasExpectedResultsInOutputFile() { const string calcDir = "TestOperationalIntegration"; @@ -70,37 +69,46 @@ } [Test] - // This test is exactly the same as Run_UsingTestFiles_HasExpectedResultsInOutputFile - // except that this test runs multicore - public void RunMultiCore_UsingTestFiles_HasExpectedResultsInOutputFile() + // This test runs the same project as Run_UsingTestFiles_HasExpectedResultsInOutputFile + // except that it runs it with both single core and multi core. + // The output of both runs must be the same + public void CompareResultFromMultiCoreRunWithSingleCoreRun() { - const string calcDir = "TestOperationalIntegrationMultiCore"; + var calcDir = "TestOperationalIntegrationSingleCore"; + var outputFileName = @"TestFiles\OperationalSet2SingleCore.output.xml"; + var output = RunTestProjectCores(calcDir, outputFileName, 1); + var outputSingleCore = DamXmlSerialization.SaveOutputAsXmlString(output); + + calcDir = "TestOperationalIntegrationMultiCore"; + outputFileName = @"TestFiles\OperationalSet2MultiCore.output.xml"; + output = RunTestProjectCores(calcDir, outputFileName, 4); + var outputMultiCore = DamXmlSerialization.SaveOutputAsXmlString(output); + + Assert.AreEqual(outputSingleCore, outputMultiCore); + } + + private Output RunTestProjectCores(string calcDir, string outputFileName, int coreCount) + { if (Directory.Exists(calcDir)) { Directory.Delete(calcDir, true); // delete previous results } Directory.CreateDirectory(calcDir); - // Based on "DamLive\trunk\src\Deltares.DamLive.Tests\TestData\DamLive\Set2\\output.damx" - const int multiCoreCount = 4; const string inputFileName = @"TestFiles\OperationalSet2.xml"; - const string outputFileName = @"TestFiles\OperationalSet2MultiCore.output.xml"; string inputString = File.ReadAllText(inputFileName); inputString = XmlAdapter.ChangeValueInXml(inputString, "ProjectPath", ""); // Current directory will be used inputString = XmlAdapter.ChangeValueInXml(inputString, "CalculationMap", calcDir); // Current directory will be used inputString = XmlAdapter.ChangeValueInXml(inputString, "MapForSoilgeometries2D", @"TestFiles\output.Geometries\"); inputString = XmlAdapter.ChangeValueInXml(inputString, "SoilDatabaseName", @"TestFiles\output0.soilmaterials.mdb"); - inputString = XmlAdapter.ChangeValueInXml(inputString, "MaxCalculationCores", multiCoreCount.ToString()); + inputString = XmlAdapter.ChangeValueInXml(inputString, "MaxCalculationCores", coreCount.ToString()); EngineInterface engineInterface = new EngineInterface(inputString); Assert.IsNotNull(engineInterface.DamProjectData); string outputString = engineInterface.Run(); File.WriteAllText(outputFileName, outputString, Encoding.Unicode); Assert.IsNotNull(outputString); - var output = DamXmlSerialization.LoadOutputFromXmlString(outputString); - Assert.AreEqual(1.226, output.Results.OperationalOutputTimeSeries[0].Entries.TimeSerieEntry[0].Value, tolerance); - Assert.AreEqual(1.244, output.Results.OperationalOutputTimeSeries[1].Entries.TimeSerieEntry[0].Value, tolerance); - Assert.AreEqual(1.311, output.Results.OperationalOutputTimeSeries[2].Entries.TimeSerieEntry[0].Value, tolerance); + return DamXmlSerialization.LoadOutputFromXmlString(outputString); } }