Index: Ringtoets/HydraRing/src/Ringtoets.HydraRing.Calculation/Data/Output/ExceedanceProbabilityCalculationAlphaOutput.cs =================================================================== diff -u --- Ringtoets/HydraRing/src/Ringtoets.HydraRing.Calculation/Data/Output/ExceedanceProbabilityCalculationAlphaOutput.cs (revision 0) +++ Ringtoets/HydraRing/src/Ringtoets.HydraRing.Calculation/Data/Output/ExceedanceProbabilityCalculationAlphaOutput.cs (revision 9d378b8fa49ea011d8f4d229b5970f11c76f8305) @@ -0,0 +1,102 @@ +// Copyright (C) Stichting Deltares 2016. All rights reserved. +// +// This file is part of Ringtoets. +// +// Ringtoets is free software: you can redistribute it and/or modify +// it under the terms of the GNU 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 General Public License for more details. +// +// You should have received a copy of the GNU 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. + +namespace Ringtoets.HydraRing.Calculation.Data.Output +{ + /// + /// Container of all relevant output generated by a type I calculation via Hydra-Ring: + /// Given a set of random variables, compute the probability of failure. + /// + public class ExceedanceProbabilityCalculationAlphaOutput + { + /// + /// Creates a new instance of . + /// + /// The ring combine method used. + /// The presentation section id used. + /// The main mechanism id. + /// The main mechanism combine method used. + /// The mechanism id used. + /// The section id used. + /// The layer id used. + /// The alternative id used. + /// The alpha value. + public ExceedanceProbabilityCalculationAlphaOutput(int ringCombinMethod, int presentationSectionId, + int mainMechanismId, int mainMechanismCombinMethod, int mechanismId, + int sectionId, int layerId, int alternativeId, double alpha) + { + RingCombinMethod = ringCombinMethod; + PresentationSectionId = presentationSectionId; + MainMechanismId = mainMechanismId; + MainMechanismCombinMethod = mainMechanismCombinMethod; + MechanismId = mechanismId; + SectionId = sectionId; + LayerId = layerId; + AlternativeId = alternativeId; + Alpha = alpha; + } + + /// + /// Gets the Ring Combine Method. + /// + public int RingCombinMethod { get; private set; } + + /// + /// Gets the Presentation Section Id. + /// + public int PresentationSectionId { get; private set; } + + /// + /// Gets the Main Mechanism Id. + /// + public int MainMechanismId { get; private set; } + + /// + /// Gets the Main Mechanism Combine Method. + /// + public int MainMechanismCombinMethod { get; private set; } + + /// + /// Gets the Mechanism Id. + /// + public int MechanismId { get; private set; } + + /// + /// Gets the Section Id. + /// + public int SectionId { get; private set; } + + /// + /// Gets the Layer Id. + /// + public int LayerId { get; private set; } + + /// + /// Gets the Alternative Id. + /// + public int AlternativeId { get; private set; } + + /// + /// Gets the Alpha result. + /// + public double Alpha { get; private set; } + } +} \ No newline at end of file Index: Ringtoets/HydraRing/src/Ringtoets.HydraRing.Calculation/Data/Output/ExceedanceProbabilityCalculationOutput.cs =================================================================== diff -u -r93fc2b3de813b7161532592a531b7f0bb5e39249 -r9d378b8fa49ea011d8f4d229b5970f11c76f8305 --- Ringtoets/HydraRing/src/Ringtoets.HydraRing.Calculation/Data/Output/ExceedanceProbabilityCalculationOutput.cs (.../ExceedanceProbabilityCalculationOutput.cs) (revision 93fc2b3de813b7161532592a531b7f0bb5e39249) +++ Ringtoets/HydraRing/src/Ringtoets.HydraRing.Calculation/Data/Output/ExceedanceProbabilityCalculationOutput.cs (.../ExceedanceProbabilityCalculationOutput.cs) (revision 9d378b8fa49ea011d8f4d229b5970f11c76f8305) @@ -32,15 +32,15 @@ /// /// Creates a new instance of . /// - /// - /// - /// - /// - /// - /// - /// - /// - /// + /// The ring combine method used. + /// The presentation section id used. + /// The main mechanism id. + /// The main mechanism combine method used. + /// The mechanism id used. + /// The section id used. + /// The layer id used. + /// The alternative id used. + /// The beta value. public ExceedanceProbabilityCalculationOutput(int ringCombinMethod, int presentationSectionId, int mainMechanismId, int mainMechanismCombinMethod, int mechanismId, int sectionId, int layerId, int alternativeId, double beta) @@ -54,7 +54,7 @@ LayerId = layerId; AlternativeId = alternativeId; Beta = beta; - AplhaValues = new List(); + Alphas = new List(); } /// @@ -105,6 +105,6 @@ /// /// Gets the Alpha result values. /// - public IList AplhaValues { get; private set; } + public IList Alphas { get; private set; } } } \ No newline at end of file Index: Ringtoets/HydraRing/src/Ringtoets.HydraRing.Calculation/Parsers/ExceedanceProbabilityCalculationParser.cs =================================================================== diff -u --- Ringtoets/HydraRing/src/Ringtoets.HydraRing.Calculation/Parsers/ExceedanceProbabilityCalculationParser.cs (revision 0) +++ Ringtoets/HydraRing/src/Ringtoets.HydraRing.Calculation/Parsers/ExceedanceProbabilityCalculationParser.cs (revision 9d378b8fa49ea011d8f4d229b5970f11c76f8305) @@ -0,0 +1,200 @@ +// Copyright (C) Stichting Deltares 2016. All rights reserved. +// +// This file is part of Ringtoets. +// +// Ringtoets is free software: you can redistribute it and/or modify +// it under the terms of the GNU 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 General Public License for more details. +// +// You should have received a copy of the GNU 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.Data; +using System.Data.SQLite; +using Ringtoets.HydraRing.Calculation.Data.Output; + +namespace Ringtoets.HydraRing.Calculation.Parsers +{ + /// + /// Parser for the output of a Hydra-Ring type I calculation via Hydra-Ring: + /// Given a set of random variables, compute the probability of failure. + /// + internal static class ExceedanceProbabilityCalculationParser + { + private const string betaResultQuery = "SELECT BetaId, RingCombinMethod, PresentationSectionId, MainMechanismId, MainMechanismCombinMethod, MechanismId, LayerId, AlternativeId, Beta " + + "FROM BetaResults " + + "WHERE SectionId = @SectionId " + + "ORDER BY BetaId DESC LIMIT 0,1;"; + + private const string alphaResultsQuery = "SELECT RingCombinMethod, PresentationSectionId, MainMechanismId, MainMechanismCombinMethod, MechanismId, LayerId, AlternativeId, Alpha " + + "FROM AlphaResults " + + "WHERE BetaId = @BetaId " + + "ORDER BY BetaId, VariableId, LoadVariableId;"; + + /// + /// Tries to parse an object from the provided and . + /// + /// The path to the file which contains the output of the Hydra-Ring type I calculation. + /// The section id to get the object for. + /// A corresponding to the section id or null otherwise. + public static ExceedanceProbabilityCalculationOutput Parse(string outputFilePath, int sectionId) + { + try + { + return DoParse(outputFilePath, sectionId); + } + catch + { + return null; + } + } + + private static ExceedanceProbabilityCalculationOutput DoParse(string outputFilePath, int sectionId) + { + using (var sqLiteConnection = OpenConnection(outputFilePath)) + { + sqLiteConnection.Open(); + + int betaId; + var exceedanceProbabilityCalculationOutput = ReadExceedanceProbabilityCalculationOutput(sectionId, sqLiteConnection, out betaId); + + foreach (var alpha in ReadExceedanceProbabilityCalculationAlphaOutput(sectionId, betaId, sqLiteConnection)) + { + exceedanceProbabilityCalculationOutput.Alphas.Add(alpha); + } + + sqLiteConnection.Close(); + return exceedanceProbabilityCalculationOutput; + } + } + + private static SQLiteDataReader CreateDataReader(SQLiteConnection connection, string queryString, params SQLiteParameter[] parameters) + { + using (var query = new SQLiteCommand(connection) + { + CommandText = queryString + }) + { + query.Parameters.AddRange(parameters); + return query.ExecuteReader(); + } + } + + private static SQLiteConnection OpenConnection(string databaseFile) + { + var connectionStringBuilder = new SQLiteConnectionStringBuilder + { + FailIfMissing = true, + DataSource = databaseFile, + ReadOnly = true + }.ConnectionString; + + return new SQLiteConnection(connectionStringBuilder); + } + + #region Read AlphaResults + + private static IList ReadExceedanceProbabilityCalculationAlphaOutput(int sectionId, int betaId, SQLiteConnection sqLiteConnection) + { + var sectionIdParameter = new SQLiteParameter + { + DbType = DbType.String, + ParameterName = "@sectionId", + Value = sectionId + }; + var betaIdParameter = new SQLiteParameter + { + DbType = DbType.String, + ParameterName = "@BetaId", + Value = betaId + }; + using (var sqLiteDataReader = CreateDataReader(sqLiteConnection, alphaResultsQuery, sectionIdParameter, betaIdParameter)) + { + return ReadAlphaResults(sectionId, sqLiteDataReader); + } + } + + private static IList ReadAlphaResults(int sectionId, SQLiteDataReader sqLiteDataReader) + { + var alphaResults = new List(); + while (sqLiteDataReader.Read()) + { + alphaResults.Add(ReadExceedanceProbabilityCalculationAlphaOutput(sectionId, sqLiteDataReader)); + } + return alphaResults; + } + + private static ExceedanceProbabilityCalculationAlphaOutput ReadExceedanceProbabilityCalculationAlphaOutput(int sectionId, SQLiteDataReader sqLiteDataReader) + { + var ringCombinMethod = Convert.ToInt32(sqLiteDataReader["RingCombinMethod"]); + var presentationSectionId = Convert.ToInt32(sqLiteDataReader["PresentationSectionId"]); + var mainMechanismId = Convert.ToInt32(sqLiteDataReader["MainMechanismId"]); + var mainMechanismCombinMethod = Convert.ToInt32(sqLiteDataReader["MainMechanismCombinMethod"]); + var mechanismId = Convert.ToInt32(sqLiteDataReader["MechanismId"]); + var layerId = Convert.ToInt32(sqLiteDataReader["LayerId"]); + var alternativeId = Convert.ToInt32(sqLiteDataReader["AlternativeId"]); + var alpha = Convert.ToDouble(sqLiteDataReader["Alpha"]); + return new ExceedanceProbabilityCalculationAlphaOutput( + ringCombinMethod, presentationSectionId, mainMechanismId, mainMechanismCombinMethod, + mechanismId, sectionId, layerId, alternativeId, alpha); + } + + #endregion + + #region Read BetaResults + + private static ExceedanceProbabilityCalculationOutput ReadExceedanceProbabilityCalculationOutput(int sectionId, SQLiteConnection sqLiteConnection, out int betaId) + { + var sectionIdParameter = new SQLiteParameter + { + DbType = DbType.String, + ParameterName = "@sectionId", + Value = sectionId + }; + using (var sqLiteDataReader = CreateDataReader(sqLiteConnection, betaResultQuery, sectionIdParameter)) + { + if (!sqLiteDataReader.Read()) + { + betaId = 0; + return null; + } + betaId = ReadBetaId(sqLiteDataReader); + return ReadExceedanceProbabilityCalculationOutput(sectionId, sqLiteDataReader); + } + } + + private static int ReadBetaId(SQLiteDataReader sqLiteDataReader) + { + return Convert.ToInt32(sqLiteDataReader["BetaId"]); + } + + private static ExceedanceProbabilityCalculationOutput ReadExceedanceProbabilityCalculationOutput(int sectionId, SQLiteDataReader sqLiteDataReader) + { + var ringCombinMethod = Convert.ToInt32(sqLiteDataReader["RingCombinMethod"]); + var presentationSectionId = Convert.ToInt32(sqLiteDataReader["PresentationSectionId"]); + var mainMechanismId = Convert.ToInt32(sqLiteDataReader["MainMechanismId"]); + var mainMechanismCombinMethod = Convert.ToInt32(sqLiteDataReader["MainMechanismCombinMethod"]); + var mechanismId = Convert.ToInt32(sqLiteDataReader["MechanismId"]); + var layerId = Convert.ToInt32(sqLiteDataReader["LayerId"]); + var alternativeId = Convert.ToInt32(sqLiteDataReader["AlternativeId"]); + var beta = Convert.ToDouble(sqLiteDataReader["Beta"]); + return new ExceedanceProbabilityCalculationOutput( + ringCombinMethod, presentationSectionId, mainMechanismId, mainMechanismCombinMethod, + mechanismId, sectionId, layerId, alternativeId, beta); + } + + #endregion + } +} \ No newline at end of file Index: Ringtoets/HydraRing/src/Ringtoets.HydraRing.Calculation/Parsers/TargetProbabilityCalculationParser.cs =================================================================== diff -u -rf876f859ab663d6970e7051d6f079de99f3ff7fb -r9d378b8fa49ea011d8f4d229b5970f11c76f8305 --- Ringtoets/HydraRing/src/Ringtoets.HydraRing.Calculation/Parsers/TargetProbabilityCalculationParser.cs (.../TargetProbabilityCalculationParser.cs) (revision f876f859ab663d6970e7051d6f079de99f3ff7fb) +++ Ringtoets/HydraRing/src/Ringtoets.HydraRing.Calculation/Parsers/TargetProbabilityCalculationParser.cs (.../TargetProbabilityCalculationParser.cs) (revision 9d378b8fa49ea011d8f4d229b5970f11c76f8305) @@ -33,7 +33,7 @@ internal static class TargetProbabilityCalculationParser { /// - /// Tries to parse a object from the provided output file path for the provided section id. + /// Tries to parse a object from the provided for the provided . /// /// The path to the file which contains the output of the Hydra-Ring type 2 calculation. /// The section id to get the object for. Index: Ringtoets/HydraRing/src/Ringtoets.HydraRing.Calculation/Ringtoets.HydraRing.Calculation.csproj =================================================================== diff -u -r93fc2b3de813b7161532592a531b7f0bb5e39249 -r9d378b8fa49ea011d8f4d229b5970f11c76f8305 --- Ringtoets/HydraRing/src/Ringtoets.HydraRing.Calculation/Ringtoets.HydraRing.Calculation.csproj (.../Ringtoets.HydraRing.Calculation.csproj) (revision 93fc2b3de813b7161532592a531b7f0bb5e39249) +++ Ringtoets/HydraRing/src/Ringtoets.HydraRing.Calculation/Ringtoets.HydraRing.Calculation.csproj (.../Ringtoets.HydraRing.Calculation.csproj) (revision 9d378b8fa49ea011d8f4d229b5970f11c76f8305) @@ -37,6 +37,11 @@ + + + ..\..\..\..\packages\System.Data.SQLite.Core.1.0.99.0\lib\net40\System.Data.SQLite.dll + True + @@ -49,9 +54,11 @@ + + @@ -470,6 +477,13 @@ + + + + This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. + + + + \ No newline at end of file Index: Ringtoets/HydraRing/test/Ringtoets.HydraRing.Calculation.Test/Data/Output/ExceedanceProbabilityCalculationAlphaOutputTest.cs =================================================================== diff -u --- Ringtoets/HydraRing/test/Ringtoets.HydraRing.Calculation.Test/Data/Output/ExceedanceProbabilityCalculationAlphaOutputTest.cs (revision 0) +++ Ringtoets/HydraRing/test/Ringtoets.HydraRing.Calculation.Test/Data/Output/ExceedanceProbabilityCalculationAlphaOutputTest.cs (revision 9d378b8fa49ea011d8f4d229b5970f11c76f8305) @@ -0,0 +1,63 @@ +// Copyright (C) Stichting Deltares 2016. All rights reserved. +// +// This file is part of Ringtoets. +// +// Ringtoets is free software: you can redistribute it and/or modify +// it under the terms of the GNU 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 General Public License for more details. +// +// You should have received a copy of the GNU 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 NUnit.Framework; +using Ringtoets.HydraRing.Calculation.Data.Output; + +namespace Ringtoets.HydraRing.Calculation.Test.Data.Output +{ + [TestFixture] + public class ExceedanceProbabilityCalculationAlphaOutputTest + { + [Test] + public void Constructor_Always_ExpectedValues() + { + // Setup + int ringCombinMethod = 1; + int presentationSectionId = 2; + int mainMechanismId = 3; + int mainMechanismCombinMethod = 4; + int mechanismId = 5; + int sectionId = 6; + int layerId = 7; + int alternativeId = 8; + double alpha = 9.9; + + // Call + ExceedanceProbabilityCalculationAlphaOutput exceedanceProbabilityCalculationOutput = + new ExceedanceProbabilityCalculationAlphaOutput(ringCombinMethod, presentationSectionId, + mainMechanismId, mainMechanismCombinMethod, mechanismId, + sectionId, layerId, alternativeId, alpha); + + // Assert + Assert.IsNotNull(exceedanceProbabilityCalculationOutput); + Assert.AreEqual(ringCombinMethod, exceedanceProbabilityCalculationOutput.RingCombinMethod); + Assert.AreEqual(presentationSectionId, exceedanceProbabilityCalculationOutput.PresentationSectionId); + Assert.AreEqual(mainMechanismId, exceedanceProbabilityCalculationOutput.MainMechanismId); + Assert.AreEqual(mainMechanismCombinMethod, exceedanceProbabilityCalculationOutput.MainMechanismCombinMethod); + Assert.AreEqual(mechanismId, exceedanceProbabilityCalculationOutput.MechanismId); + Assert.AreEqual(sectionId, exceedanceProbabilityCalculationOutput.SectionId); + Assert.AreEqual(layerId, exceedanceProbabilityCalculationOutput.LayerId); + Assert.AreEqual(alternativeId, exceedanceProbabilityCalculationOutput.AlternativeId); + Assert.AreEqual(alpha, exceedanceProbabilityCalculationOutput.Alpha); + } + } +} \ No newline at end of file Index: Ringtoets/HydraRing/test/Ringtoets.HydraRing.Calculation.Test/Data/Output/ExceedanceProbabilityCalculationOutputTest.cs =================================================================== diff -u -r93fc2b3de813b7161532592a531b7f0bb5e39249 -r9d378b8fa49ea011d8f4d229b5970f11c76f8305 --- Ringtoets/HydraRing/test/Ringtoets.HydraRing.Calculation.Test/Data/Output/ExceedanceProbabilityCalculationOutputTest.cs (.../ExceedanceProbabilityCalculationOutputTest.cs) (revision 93fc2b3de813b7161532592a531b7f0bb5e39249) +++ Ringtoets/HydraRing/test/Ringtoets.HydraRing.Calculation.Test/Data/Output/ExceedanceProbabilityCalculationOutputTest.cs (.../ExceedanceProbabilityCalculationOutputTest.cs) (revision 9d378b8fa49ea011d8f4d229b5970f11c76f8305) @@ -19,7 +19,6 @@ // Stichting Deltares and remain full property of Stichting Deltares at all times. // All rights reserved. -using System.Collections.Generic; using NUnit.Framework; using Ringtoets.HydraRing.Calculation.Data.Output; @@ -59,29 +58,24 @@ Assert.AreEqual(layerId, exceedanceProbabilityCalculationOutput.LayerId); Assert.AreEqual(alternativeId, exceedanceProbabilityCalculationOutput.AlternativeId); Assert.AreEqual(beta, exceedanceProbabilityCalculationOutput.Beta); - CollectionAssert.IsEmpty(exceedanceProbabilityCalculationOutput.AplhaValues); + CollectionAssert.IsEmpty(exceedanceProbabilityCalculationOutput.Alphas); } [Test] - public void AlphaValues_VariousValues_ReturnsExpectedValues() + public void Alphas_VariousValues_ReturnsExpectedValues() { // Setup - var alphaValues = new List - { - 1.1, 2.2 - }; + var exceedanceProbabilityCalculationAlphaOutput = new ExceedanceProbabilityCalculationAlphaOutput(11, 22, 33, 44, 55, 66, 77, 88, 99.99); + ExceedanceProbabilityCalculationOutput exceedanceProbabilityCalculationOutput = - new ExceedanceProbabilityCalculationOutput(1, 2, 3, 4, 5, 6, 7, 8, 9); + new ExceedanceProbabilityCalculationOutput(1, 2, 3, 4, 5, 6, 7, 8, 9.9); // Call - foreach (var alphaValue in alphaValues) - { - exceedanceProbabilityCalculationOutput.AplhaValues.Add(alphaValue); - } + exceedanceProbabilityCalculationOutput.Alphas.Add(exceedanceProbabilityCalculationAlphaOutput); // Assert - CollectionAssert.IsNotEmpty(exceedanceProbabilityCalculationOutput.AplhaValues); - CollectionAssert.AreEqual(alphaValues, exceedanceProbabilityCalculationOutput.AplhaValues); + CollectionAssert.IsNotEmpty(exceedanceProbabilityCalculationOutput.Alphas); + Assert.AreEqual(exceedanceProbabilityCalculationAlphaOutput, exceedanceProbabilityCalculationOutput.Alphas[0]); } } } \ No newline at end of file Index: Ringtoets/HydraRing/test/Ringtoets.HydraRing.Calculation.Test/Parsers/ExceedanceProbabilityCalculationParserTest.cs =================================================================== diff -u --- Ringtoets/HydraRing/test/Ringtoets.HydraRing.Calculation.Test/Parsers/ExceedanceProbabilityCalculationParserTest.cs (revision 0) +++ Ringtoets/HydraRing/test/Ringtoets.HydraRing.Calculation.Test/Parsers/ExceedanceProbabilityCalculationParserTest.cs (revision 9d378b8fa49ea011d8f4d229b5970f11c76f8305) @@ -0,0 +1,159 @@ +// Copyright (C) Stichting Deltares 2016. All rights reserved. +// +// This file is part of Ringtoets. +// +// Ringtoets is free software: you can redistribute it and/or modify +// it under the terms of the GNU 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 General Public License for more details. +// +// You should have received a copy of the GNU 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 Core.Common.TestUtil; +using NUnit.Framework; +using Ringtoets.HydraRing.Calculation.Data.Output; +using Ringtoets.HydraRing.Calculation.Parsers; + +namespace Ringtoets.HydraRing.Calculation.Test.Parsers +{ + [TestFixture] + public class ExceedanceProbabilityCalculationParserTest + { + private readonly string testDataPath = Path.Combine(TestHelper.GetTestDataPath(TestDataPath.Ringtoets.HydraRing.Calculation, "Parsers"), "ExceedanceProbabilityCalculationParser"); + + [Test] + public void Parse_NotExistingOutputFile_ReturnsNull() + { + // Setup + ExceedanceProbabilityCalculationOutput exceedanceProbabilityCalculationOutput = null; + var filePath = Path.Combine(testDataPath, "notExisting.sqlite"); + + // Call + TestDelegate test = () => exceedanceProbabilityCalculationOutput = ExceedanceProbabilityCalculationParser.Parse(filePath, 1); + + // Assert + Assert.DoesNotThrow(test); + Assert.IsNull(exceedanceProbabilityCalculationOutput); + Assert.IsTrue(TestHelper.CanOpenFileForWrite(filePath)); + } + + [Test] + public void Parse_EmptyOutputFile_ReturnsNull() + { + // Setup + ExceedanceProbabilityCalculationOutput exceedanceProbabilityCalculationOutput = null; + var filePath = Path.Combine(testDataPath, "empty.sqlite"); + + // Call + TestDelegate test = () => exceedanceProbabilityCalculationOutput = ExceedanceProbabilityCalculationParser.Parse(filePath, 1); + + // Assert + Assert.DoesNotThrow(test); + Assert.IsNull(exceedanceProbabilityCalculationOutput); + Assert.IsTrue(TestHelper.CanOpenFileForWrite(filePath)); + } + + [Test] + public void Parse_ExampleCompleteOutputFile_ReturnsExpecteExceedanceProbabilityCalculationOutput() + { + // Setup + var filePath = Path.Combine(testDataPath, "complete.sqlite"); + var ringCombinMethod = 0; + var presentationSectionId = 1; + var mainMechanismId = 101; + var mainMechanismCombinMethod = 0; + var mechanismId = 101; + var sectionId = 35; + var layerId = 1; + var alternativeId = 1; + var beta = 2.74030893482198; + var alphaValues = new List + { + new ExceedanceProbabilityCalculationAlphaOutput(0, 1, 101, 0, 101, 35, 1, 1, -0.414848705277957), + new ExceedanceProbabilityCalculationAlphaOutput(0, 1, 101, 0, 101, 35, 1, 1, -0.499651535355214), + new ExceedanceProbabilityCalculationAlphaOutput(0, 1, 101, 0, 101, 35, 1, 1, -0.580660162401853), + new ExceedanceProbabilityCalculationAlphaOutput(0, 1, 101, 0, 101, 35, 1, 1, 0.463049288940854), + new ExceedanceProbabilityCalculationAlphaOutput(0, 1, 101, 0, 101, 35, 1, 1, 0.0434055709671213), + new ExceedanceProbabilityCalculationAlphaOutput(0, 1, 101, 0, 101, 35, 1, 1, 0.150241106274945), + new ExceedanceProbabilityCalculationAlphaOutput(0, 1, 101, 0, 101, 35, 1, 1, 0.0470275786268176) + }; + + // Call + ExceedanceProbabilityCalculationOutput exceedanceProbabilityCalculationOutput = ExceedanceProbabilityCalculationParser.Parse(filePath, sectionId); + + // Assert + Assert.IsNotNull(exceedanceProbabilityCalculationOutput); + Assert.AreEqual(ringCombinMethod, exceedanceProbabilityCalculationOutput.RingCombinMethod); + Assert.AreEqual(presentationSectionId, exceedanceProbabilityCalculationOutput.PresentationSectionId); + Assert.AreEqual(mainMechanismId, exceedanceProbabilityCalculationOutput.MainMechanismId); + Assert.AreEqual(mainMechanismCombinMethod, exceedanceProbabilityCalculationOutput.MainMechanismCombinMethod); + Assert.AreEqual(mechanismId, exceedanceProbabilityCalculationOutput.MechanismId); + Assert.AreEqual(layerId, exceedanceProbabilityCalculationOutput.LayerId); + Assert.AreEqual(alternativeId, exceedanceProbabilityCalculationOutput.AlternativeId); + Assert.AreEqual(beta, exceedanceProbabilityCalculationOutput.Beta); + + Assert.AreEqual(alphaValues.Count, exceedanceProbabilityCalculationOutput.Alphas.Count); + for (var i = 0; i < alphaValues.Count; i++) + { + var expectedAlpha = alphaValues[i]; + var actualAlpha = exceedanceProbabilityCalculationOutput.Alphas[i]; + + Assert.AreEqual(expectedAlpha.RingCombinMethod, actualAlpha.RingCombinMethod); + Assert.AreEqual(expectedAlpha.PresentationSectionId, actualAlpha.PresentationSectionId); + Assert.AreEqual(expectedAlpha.MainMechanismId, actualAlpha.MainMechanismId); + Assert.AreEqual(expectedAlpha.MainMechanismCombinMethod, actualAlpha.MainMechanismCombinMethod); + Assert.AreEqual(expectedAlpha.MechanismId, actualAlpha.MechanismId); + Assert.AreEqual(expectedAlpha.LayerId, actualAlpha.LayerId); + Assert.AreEqual(expectedAlpha.AlternativeId, actualAlpha.AlternativeId); + Assert.AreEqual(expectedAlpha.Alpha, actualAlpha.Alpha); + } + + Assert.IsTrue(TestHelper.CanOpenFileForWrite(filePath)); + } + + [Test] + public void Parse_FileWithoutTableAlphaResults_ReturnsNull() + { + // Setup + ExceedanceProbabilityCalculationOutput exceedanceProbabilityCalculationOutput = null; + var filePath = Path.Combine(testDataPath, "withoutAlphaResults.sqlite"); + + // Call + TestDelegate test = () => exceedanceProbabilityCalculationOutput = ExceedanceProbabilityCalculationParser.Parse(filePath, 1); + + // Assert + Assert.DoesNotThrow(test); + Assert.IsNull(exceedanceProbabilityCalculationOutput); + Assert.IsTrue(TestHelper.CanOpenFileForWrite(filePath)); + } + + [Test] + public void Parse_ExampleHydraRingOutputFileNotContainingSectionId_ReturnsNull() + { + // Setup + var sectionId = 1; + var filePath = Path.Combine(testDataPath, "complete.sqlite"); + ExceedanceProbabilityCalculationOutput exceedanceProbabilityCalculationOutput = null; + + // Call + TestDelegate test = () => exceedanceProbabilityCalculationOutput = ExceedanceProbabilityCalculationParser.Parse(filePath, sectionId); + + // Assert + Assert.DoesNotThrow(test); + Assert.IsNull(exceedanceProbabilityCalculationOutput); + Assert.IsTrue(TestHelper.CanOpenFileForWrite(filePath)); + } + } +} \ No newline at end of file Index: Ringtoets/HydraRing/test/Ringtoets.HydraRing.Calculation.Test/Parsers/TargetProbabilityCalculationParserTest.cs =================================================================== diff -u -rf876f859ab663d6970e7051d6f079de99f3ff7fb -r9d378b8fa49ea011d8f4d229b5970f11c76f8305 --- Ringtoets/HydraRing/test/Ringtoets.HydraRing.Calculation.Test/Parsers/TargetProbabilityCalculationParserTest.cs (.../TargetProbabilityCalculationParserTest.cs) (revision f876f859ab663d6970e7051d6f079de99f3ff7fb) +++ Ringtoets/HydraRing/test/Ringtoets.HydraRing.Calculation.Test/Parsers/TargetProbabilityCalculationParserTest.cs (.../TargetProbabilityCalculationParserTest.cs) (revision 9d378b8fa49ea011d8f4d229b5970f11c76f8305) @@ -29,45 +29,52 @@ [TestFixture] public class TargetProbabilityCalculationParserTest { - private readonly string testDataPath = TestHelper.GetTestDataPath(TestDataPath.Ringtoets.HydraRing.Calculation, "Parsers"); + private readonly string testDataPath = Path.Combine(TestHelper.GetTestDataPath(TestDataPath.Ringtoets.HydraRing.Calculation, "Parsers"), "TargetProbabilityCalculationParser"); [Test] public void Parse_NotExistingOutputFile_ReturnsNull() { + // Call var targetProbabilityCalculationOutput = TargetProbabilityCalculationParser.Parse(Path.Combine(testDataPath, "notExisting.txt"), 1); + // Assert Assert.IsNull(targetProbabilityCalculationOutput); } [Test] public void Parse_EmptyOutputFile_ReturnsNull() { + // Call var targetProbabilityCalculationOutput = TargetProbabilityCalculationParser.Parse(Path.Combine(testDataPath, "empty.txt"), 1); + // Assert Assert.IsNull(targetProbabilityCalculationOutput); } [Test] - public void Parse_ExampleHydraRingOutputFileContainingSectionIds_ReturnsExpectedTargetProbabilityCalculationResult() + [TestCase(1, 1.1, 11.11)] + [TestCase(3, 3.3, 33.33)] + public void Parse_ExampleHydraRingOutputFileContainingSectionIds_ReturnsExpectedTargetProbabilityCalculationResult(int sectionId, double result, double actual) { + // Setup var outputFilePath = Path.Combine(testDataPath, "exampleOutputTable.txt"); - var targetProbabilityCalculationOutput = TargetProbabilityCalculationParser.Parse(outputFilePath, 1); - Assert.IsNotNull(targetProbabilityCalculationOutput); - Assert.AreEqual(1.1, targetProbabilityCalculationOutput.Result); - Assert.AreEqual(11.11, targetProbabilityCalculationOutput.ActualTargetProbability); + // Call + var targetProbabilityCalculationOutput = TargetProbabilityCalculationParser.Parse(outputFilePath, sectionId); - targetProbabilityCalculationOutput = TargetProbabilityCalculationParser.Parse(outputFilePath, 3); + // Assert Assert.IsNotNull(targetProbabilityCalculationOutput); - Assert.AreEqual(3.3, targetProbabilityCalculationOutput.Result); - Assert.AreEqual(33.33, targetProbabilityCalculationOutput.ActualTargetProbability); + Assert.AreEqual(result, targetProbabilityCalculationOutput.Result); + Assert.AreEqual(actual, targetProbabilityCalculationOutput.ActualTargetProbability); } [Test] public void Parse_ExampleHydraRingOutputFileNotContainingSectionId_ReturnsNull() { + // Call var targetProbabilityCalculationOutput = TargetProbabilityCalculationParser.Parse(Path.Combine(testDataPath, "exampleOutputTable.txt"), 2); + // Assert Assert.IsNull(targetProbabilityCalculationOutput); } } Index: Ringtoets/HydraRing/test/Ringtoets.HydraRing.Calculation.Test/Ringtoets.HydraRing.Calculation.Test.csproj =================================================================== diff -u -r93fc2b3de813b7161532592a531b7f0bb5e39249 -r9d378b8fa49ea011d8f4d229b5970f11c76f8305 --- Ringtoets/HydraRing/test/Ringtoets.HydraRing.Calculation.Test/Ringtoets.HydraRing.Calculation.Test.csproj (.../Ringtoets.HydraRing.Calculation.Test.csproj) (revision 93fc2b3de813b7161532592a531b7f0bb5e39249) +++ Ringtoets/HydraRing/test/Ringtoets.HydraRing.Calculation.Test/Ringtoets.HydraRing.Calculation.Test.csproj (.../Ringtoets.HydraRing.Calculation.Test.csproj) (revision 9d378b8fa49ea011d8f4d229b5970f11c76f8305) @@ -62,8 +62,10 @@ + + Index: Ringtoets/HydraRing/test/Ringtoets.HydraRing.Calculation.Test/test-data/Parsers/ExceedanceProbabilityCalculationParser/complete.sqlite =================================================================== diff -u Binary files differ Index: Ringtoets/HydraRing/test/Ringtoets.HydraRing.Calculation.Test/test-data/Parsers/ExceedanceProbabilityCalculationParser/empty.sqlite =================================================================== diff -u --- Ringtoets/HydraRing/test/Ringtoets.HydraRing.Calculation.Test/test-data/Parsers/ExceedanceProbabilityCalculationParser/empty.sqlite (revision 0) +++ Ringtoets/HydraRing/test/Ringtoets.HydraRing.Calculation.Test/test-data/Parsers/ExceedanceProbabilityCalculationParser/empty.sqlite (revision 9d378b8fa49ea011d8f4d229b5970f11c76f8305) @@ -0,0 +1 @@ \ No newline at end of file Index: Ringtoets/HydraRing/test/Ringtoets.HydraRing.Calculation.Test/test-data/Parsers/ExceedanceProbabilityCalculationParser/notExisting.sqlite =================================================================== diff -u --- Ringtoets/HydraRing/test/Ringtoets.HydraRing.Calculation.Test/test-data/Parsers/ExceedanceProbabilityCalculationParser/notExisting.sqlite (revision 0) +++ Ringtoets/HydraRing/test/Ringtoets.HydraRing.Calculation.Test/test-data/Parsers/ExceedanceProbabilityCalculationParser/notExisting.sqlite (revision 9d378b8fa49ea011d8f4d229b5970f11c76f8305) @@ -0,0 +1 @@ \ No newline at end of file Index: Ringtoets/HydraRing/test/Ringtoets.HydraRing.Calculation.Test/test-data/Parsers/ExceedanceProbabilityCalculationParser/withoutAlphaResults.sqlite =================================================================== diff -u Binary files differ Index: Ringtoets/HydraRing/test/Ringtoets.HydraRing.Calculation.Test/test-data/Parsers/TargetProbabilityCalculationParser/empty.txt =================================================================== diff -u --- Ringtoets/HydraRing/test/Ringtoets.HydraRing.Calculation.Test/test-data/Parsers/TargetProbabilityCalculationParser/empty.txt (revision 0) +++ Ringtoets/HydraRing/test/Ringtoets.HydraRing.Calculation.Test/test-data/Parsers/TargetProbabilityCalculationParser/empty.txt (revision 9d378b8fa49ea011d8f4d229b5970f11c76f8305) @@ -0,0 +1 @@ \ No newline at end of file Index: Ringtoets/HydraRing/test/Ringtoets.HydraRing.Calculation.Test/test-data/Parsers/TargetProbabilityCalculationParser/exampleOutputTable.txt =================================================================== diff -u --- Ringtoets/HydraRing/test/Ringtoets.HydraRing.Calculation.Test/test-data/Parsers/TargetProbabilityCalculationParser/exampleOutputTable.txt (revision 0) +++ Ringtoets/HydraRing/test/Ringtoets.HydraRing.Calculation.Test/test-data/Parsers/TargetProbabilityCalculationParser/exampleOutputTable.txt (revision 9d378b8fa49ea011d8f4d229b5970f11c76f8305) @@ -0,0 +1,5 @@ +Testing region: +------------------------------------------------------------------------------------------------------------------------ + SectionID Mechanism Layer Alternative XCoordinate YCoordinate Result Reliability + 1 1 1 1 0 0 1.1 11.11 + 3 1 1 1 0 0 3.3 33.33 \ No newline at end of file Fisheye: Tag 9d378b8fa49ea011d8f4d229b5970f11c76f8305 refers to a dead (removed) revision in file `Ringtoets/HydraRing/test/Ringtoets.HydraRing.Calculation.Test/test-data/Parsers/empty.txt'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag 9d378b8fa49ea011d8f4d229b5970f11c76f8305 refers to a dead (removed) revision in file `Ringtoets/HydraRing/test/Ringtoets.HydraRing.Calculation.Test/test-data/Parsers/exampleOutputTable.txt'. Fisheye: No comparison available. Pass `N' to diff?