// Copyright (C) Stichting Deltares 2019. 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 System.Collections.Generic; using System.IO; using NUnit.Framework; using Deltares.MacroStability.Kernel; using Deltares.DamEngine.Data.General; using Deltares.DamEngine.TestHelpers; using Deltares.DamEngine.Calculators.KernelWrappers.MacroStabilityCommon.MacroStabilityIo; using Deltares.DamEngine.Data.Geotechnics; using Deltares.DamEngine.TestHelpers.Factories; using Deltares.MacroStability.Data; using Deltares.MacroStability.Standard; using KellermanSoftware.CompareNetObjects; namespace Deltares.DamEngine.Calculators.Tests.KernelWrappers.MacroStabilityCommon { [TestFixture] public class MacroStabilityIoTests { private const string WtiFilesMap = @"KernelWrappers\MacroStabilityCommon\TestFiles"; [TestCase("Benchmark 1-01b.wti")] [TestCase("Benchmark 2-04a.wti")] public void GivenWtiFileWhenDeserializingAndSerializingThenTheStringsAreEqual(string fileNameIn) { // Given WTI file string fullFileNameIn = Path.Combine(WtiFilesMap, fileNameIn); // When Deserializing and Serializing string xmlInput = File.ReadAllText(fullFileNameIn); string fileNameOut = fileNameIn + ".out"; string fullFileNameOut = Path.Combine(WtiFilesMap, fileNameOut); KernelModel kernelModel = WtiDeserializer.Deserialize(xmlInput); string xmlOutput = WtiSerializer.Serialize(kernelModel); File.WriteAllText(fullFileNameOut, xmlOutput); // Then the strings are equal Assert.AreEqual(xmlInput, xmlOutput); } [Test] [Category(Categories.WorkInProgress)] public void GivenDamEngineDataModelWhenSerializingAndDeserializingTheDataModelsAreEqual() { // Given DamEngine data (DamProjectData) DamProjectData expectedDamProjectData = CreateExampleDamProjectData(); Location expectedLocation = expectedDamProjectData.Dike.Locations[0]; SoilProfile2D expectedSoilProfile2D = expectedLocation.Segment.SoilProfileProbabilities[0].SoilProfile2D; SurfaceLine2 expectedSurfaceLine2D = expectedLocation.SurfaceLine; FailureMechanismParametersMStab expectedParametersMStab = expectedDamProjectData.DamProjectCalculationSpecification.CurrentSpecification.FailureMechanismParametersMStab; FillWtiKernelData fillWtiKernelData = new FillWtiKernelData() { FailureMechanismParametersMStab = expectedParametersMStab, Location = expectedLocation, SoilProfile2D = expectedSoilProfile2D, SurfaceLine2 = expectedSurfaceLine2D }; KernelModel expectedKernelModel = fillWtiKernelData.CreateKernelModel(); // When Serializing and Deserializing string xmlWti = WtiSerializer.Serialize(expectedKernelModel); const string fileName = "TestInput.wti"; string fullFileName = Path.Combine(WtiFilesMap, fileName); File.WriteAllText(fullFileName, xmlWti); KernelModel actualKernelModel = WtiDeserializer.Deserialize(xmlWti); var fillDamEngineFromWti = new FillDamEngineFromWti(); fillDamEngineFromWti.FillDamProjectDataFromKernelModel(actualKernelModel); // Then the data models are equal var compare = new CompareLogic { Config = { MaxDifferences = 100 } }; var result = compare.Compare(expectedLocation, fillDamEngineFromWti.Location); Assert.AreEqual(0, result.Differences.Count, "Differences found read/write kernel Location"); result = compare.Compare(expectedSoilProfile2D, fillDamEngineFromWti.SoilProfile2D); Assert.AreEqual(0, result.Differences.Count, "Differences found read/write kernel SoilProfile2D"); result = compare.Compare(expectedSurfaceLine2D, fillDamEngineFromWti.SurfaceLine2); Assert.AreEqual(0, result.Differences.Count, "Differences found read/write kernel SurfaceLine2"); result = compare.Compare(expectedParametersMStab, fillDamEngineFromWti.FailureMechanismParametersMStab); Assert.AreEqual(0, result.Differences.Count, "Differences found read/write kernel FailureMechanismParametersMStab"); } [TestCase("Benchmark 1-01b.wti")] [TestCase("Benchmark 2-04a.wti")] //[Category(Categories.WorkInProgress)] public void GivenWtiFileWhenFillingToDamEngineDataAndWritingBackToKernelDataThenTheKernelModelsAreEqual(string fileNameIn) { // Given Wti file string fullFileNameIn = Path.Combine(WtiFilesMap, fileNameIn); // When filling to DamEngine data string xmlInput = File.ReadAllText(fullFileNameIn); KernelModel expectedKernelModel = WtiDeserializer.Deserialize(xmlInput); FillDamEngineFromWti fillDamEngineFromWti = new FillDamEngineFromWti(); fillDamEngineFromWti.FillDamProjectDataFromKernelModel(expectedKernelModel); // And writing back to kernel data FillWtiKernelData fillWtiKernelData = new FillWtiKernelData() { FailureMechanismParametersMStab = fillDamEngineFromWti.FailureMechanismParametersMStab, Location = fillDamEngineFromWti.Location, SoilProfile2D = fillDamEngineFromWti.SoilProfile2D, SurfaceLine2 = fillDamEngineFromWti.SurfaceLine2 }; KernelModel actualKernelModel = fillWtiKernelData.CreateKernelModel(); string xmlOutput = WtiSerializer.Serialize(actualKernelModel); string fileNameOut = fileNameIn + ".out"; string fullFileNameOut = Path.Combine(WtiFilesMap, fileNameOut); File.WriteAllText(fullFileNameOut, xmlOutput); // Then the kernel models are equal CompareStabilityModel(expectedKernelModel.StabilityModel, actualKernelModel.StabilityModel); return; //Enable asserts when code is implemented var compare = new CompareLogic { Config = { MaxDifferences = 100 } }; compare.Config.MembersToIgnore = new List { }; var result = compare.Compare(expectedKernelModel.StabilityModel.SoilModel, actualKernelModel.StabilityModel.SoilModel); Assert.AreEqual(0, result.Differences.Count, "Differences found read/write kernel SoilModel"); result = compare.Compare(expectedKernelModel.StabilityModel.SoilProfile, actualKernelModel.StabilityModel.SoilProfile); Assert.AreEqual(0, result.Differences.Count, "Differences found read/write kernel SoilProfile"); } private void CompareStabilityModel(StabilityModel expectedStabilityModel, StabilityModel actualStabilityModel) { Assert.AreEqual(expectedStabilityModel.SearchAlgorithm, actualStabilityModel.SearchAlgorithm); Assert.AreEqual(expectedStabilityModel.ModelOption, actualStabilityModel.ModelOption); Assert.AreEqual(expectedStabilityModel.GridOrientation, actualStabilityModel.GridOrientation); } [TestCase("ValidateOk.xml")] [TestCase("ValidateError.xml")] public void GivenValidationResultFileWhenDeserializingAndSerializingThenTheStringsAreEqual(string fileNameIn) { // Given validation result file from kernel string fullFileNameIn = Path.Combine(WtiFilesMap, fileNameIn); // When Deserializing and Serializing string xmlInput = File.ReadAllText(fullFileNameIn); string fileNameOut = fileNameIn + ".out"; string fullFileNameOut = Path.Combine(WtiFilesMap, fileNameOut); IValidationResult[] validationResults = WtiDeserializer.DeserializeValidation(xmlInput); string xmlOutput = WtiSerializer.SerializeValidation(validationResults); File.WriteAllText(fullFileNameOut, xmlOutput); // Then the strings are equal Assert.AreEqual(xmlInput, xmlOutput); } [TestCase("Result1.xml")] public void GivenCalculationResultFileWhenDeserializingAndSerializingThenTheStringsAreEqual(string fileNameIn) { // Given calculation result file from kernel string fullFileNameIn = Path.Combine(WtiFilesMap, fileNameIn); // When Deserializing and Serializing string xmlInput = File.ReadAllText(fullFileNameIn); string fileNameOut = fileNameIn + ".out"; string fullFileNameOut = Path.Combine(WtiFilesMap, fileNameOut); var calculationResults = WtiDeserializer.DeserializeResult(xmlInput); string xmlOutput = WtiSerializer.SerializeResult(calculationResults); File.WriteAllText(fullFileNameOut, xmlOutput); // Then the strings are equal Assert.AreEqual(xmlInput, xmlOutput); } private DamProjectData CreateExampleDamProjectData() { return FactoryForDamProjectData.CreateExampleDamProjectData(); } } }