//----------------------------------------------------------------------- // // Copyright (c) 2011 Deltares. All rights reserved. // // B.S.T.I.M. The // tom.the@deltares.nl // 31-08-2011 // Write and read files to itnteract with DikeFlow.exe //----------------------------------------------------------------------- using Deltares.Dam.TestHelper; using Deltares.Geotechnics; using Deltares.Geotechnics.SurfaceLines; namespace Deltares.Dam.Tests { using System; using System.IO; using Deltares.Dam.Data; using NUnit.Framework; [TestFixture] public class DupuitCalculatorFileIOTest { private string filenameBase = "testfile"; private DupuitCalculatorFileIO dupuitCalculatorFileIo; private SurfaceLine2 exampleSurfaceLine; private double cTolerance = 0.0001; [TestFixtureSetUp] public void CreateFiles() { // Cleanup previous files if present string[] fileEntries = Directory.GetFiles(Directory.GetCurrentDirectory(), filenameBase + ".*"); foreach (string filename in fileEntries) { File.Delete(filename); } exampleSurfaceLine = FactoryForDupuitCalculatorTest.CreateExampleSurfaceLine(); dupuitCalculatorFileIo = new DupuitCalculatorFileIO(); dupuitCalculatorFileIo.Geometry2DData = FactoryForDupuitCalculatorTest.CreateExampleGeometry2D(); dupuitCalculatorFileIo.WaterLevelTimeserie = FactoryForDupuitCalculatorTest.CreateWaterLevelTimeSerie(); dupuitCalculatorFileIo.SafetyFactorTimeserie = FactoryForDupuitCalculatorTest.CreateSafetyFactorTimeSerie(); dupuitCalculatorFileIo.PolderLevelTimeserie = FactoryForDupuitCalculatorTest.CreatePolderLevelTimeSerie(); dupuitCalculatorFileIo.SoilList = FactoryForDupuitCalculatorTest.CreateSoilList(); dupuitCalculatorFileIo.SurfaceLine = exampleSurfaceLine; dupuitCalculatorFileIo.DupuitCalculationOptions = new DupuitCalculationOptions(); dupuitCalculatorFileIo.DupuitPlLinesTimeSerie = FactoryForDupuitCalculatorTest.CreateDupuitPLLinesTimeSerie(); dupuitCalculatorFileIo.WriteInputFiles(filenameBase); dupuitCalculatorFileIo.WriteOutputFiles(filenameBase); } [TestFixtureTearDown] public void TearDown() { exampleSurfaceLine.Dispose(); } [Test] public void CanWriteGeometryFile() { Assert.IsTrue(File.Exists(Path.ChangeExtension(filenameBase, DupuitCalculatorFileIO.soilLayersFilenameExt)), "Expected output file(s) not present"); } [Test] public void CanWriteWaterLevels() { CreateFiles(); Assert.IsTrue(File.Exists(Path.ChangeExtension(filenameBase, DupuitCalculatorFileIO.waterLevelFilenameExt)), "Expected output file(s) not present"); } [Test] public void CanWritePrecipitation() { CreateFiles(); Assert.IsTrue(File.Exists(Path.ChangeExtension(filenameBase, DupuitCalculatorFileIO.precipitationFilenameExt)), "Expected output file(s) not present"); } [Test] public void CanWriteMaterials() { Assert.IsTrue(File.Exists(Path.ChangeExtension(filenameBase, DupuitCalculatorFileIO.materialFilenameExt)), "Expected output file(s) not present"); } [Test] public void CanWriteCalculationOptions() { Assert.IsTrue(File.Exists(Path.ChangeExtension(filenameBase, DupuitCalculatorFileIO.calculateFilenameExt)), "Expected output file(s) not present"); } [Test] public void CanWriteSections() { Assert.IsTrue(File.Exists(Path.ChangeExtension(filenameBase, DupuitCalculatorFileIO.sectionsFilenameExt)), "Expected output file(s) not present"); } [Test] public void CanWriteMonitor() { Assert.IsTrue(File.Exists(Path.ChangeExtension(filenameBase, DupuitCalculatorFileIO.monitorFilenameExt)), "Expected output file(s) not present"); } [Test] public void CanWritePolderWaterlevel() { Assert.IsTrue(File.Exists(Path.ChangeExtension(filenameBase, DupuitCalculatorFileIO.polderLevelFilenameExt)), "Expected output file(s) not present"); } [Test] public void CanWriteSafetyFactors() { Assert.IsTrue(File.Exists(Path.ChangeExtension(filenameBase, DupuitCalculatorFileIO.safetyFactorFilenameExt)), "Expected output file(s) not present"); } [Test] public void CanWritePLLines() { for (int timeIndex = 0; timeIndex < dupuitCalculatorFileIo.DupuitPlLinesTimeSerie.Entries.Count; timeIndex++) { string extension = String.Format("{0}{1}", DupuitCalculatorFileIO.piezoLinesFilesnameExt, timeIndex.ToString("D3")); Assert.IsTrue(File.Exists(Path.ChangeExtension(filenameBase, extension)), "Expected output file(s) not present"); } } [Test] public void CanReadPLLines() { var dupuitCalculatorFileReader = new DupuitCalculatorFileIO(); dupuitCalculatorFileReader.ReadOutputFiles(filenameBase); Assert.IsNotNull(dupuitCalculatorFileReader.DupuitPlLinesTimeSerie); Assert.AreEqual(dupuitCalculatorFileIo.DupuitPlLinesTimeSerie.Entries.Count, dupuitCalculatorFileReader.DupuitPlLinesTimeSerie.Entries.Count); for (int timeIndex = 0; timeIndex < dupuitCalculatorFileIo.DupuitPlLinesTimeSerie.Entries.Count; timeIndex++) { var sourceEntry = dupuitCalculatorFileIo.DupuitPlLinesTimeSerie.Entries[timeIndex]; var actualEntry = dupuitCalculatorFileReader.DupuitPlLinesTimeSerie.Entries[timeIndex]; Assert.AreEqual(sourceEntry.DupuitPlLines.PLLines.Count, actualEntry.DupuitPlLines.PLLines.Count); for (int lineIndex = 0; lineIndex < sourceEntry.DupuitPlLines.PLLines.Count; lineIndex++) { for (int pointIndex = 0; pointIndex < sourceEntry.DupuitPlLines.PLLines[lineIndex].Points.Count; pointIndex++) { Assert.IsTrue(sourceEntry.DupuitPlLines.PLLines[lineIndex].Points[pointIndex].LocationEquals( actualEntry.DupuitPlLines.PLLines[lineIndex].Points[pointIndex])); } } } } [Test] public void CanReadSafetyFactors() { var dupuitCalculatorFileReader = new DupuitCalculatorFileIO(); dupuitCalculatorFileReader.ReadOutputFiles(filenameBase); Assert.IsNotNull(dupuitCalculatorFileReader.SafetyFactorTimeserie); Assert.AreEqual(dupuitCalculatorFileIo.SafetyFactorTimeserie.Entries.Count, dupuitCalculatorFileReader.SafetyFactorTimeserie.Entries.Count); for (int safetyFactorIndex = 0; safetyFactorIndex < dupuitCalculatorFileIo.SafetyFactorTimeserie.Entries.Count; safetyFactorIndex++) { // DatTime of the entries are not equal because with DikeFlow we start with 0 Assert.AreEqual(dupuitCalculatorFileIo.SafetyFactorTimeserie.Entries[safetyFactorIndex].Value, dupuitCalculatorFileReader.SafetyFactorTimeserie.Entries[safetyFactorIndex].Value, cTolerance); } } } }