Index: Ringtoets/AssemblyTool/src/Ringtoets.AssemblyTool.KernelWrapper/Calculators/Assembly/FailureMechanismSectionAssemblyCalculator.cs =================================================================== diff -u -rae5d5bb9f321fe3a39e8de3a04cc077be9f279d3 -r98aebb67dbbe6cedc767cec035142d6038718985 --- Ringtoets/AssemblyTool/src/Ringtoets.AssemblyTool.KernelWrapper/Calculators/Assembly/FailureMechanismSectionAssemblyCalculator.cs (.../FailureMechanismSectionAssemblyCalculator.cs) (revision ae5d5bb9f321fe3a39e8de3a04cc077be9f279d3) +++ Ringtoets/AssemblyTool/src/Ringtoets.AssemblyTool.KernelWrapper/Calculators/Assembly/FailureMechanismSectionAssemblyCalculator.cs (.../FailureMechanismSectionAssemblyCalculator.cs) (revision 98aebb67dbbe6cedc767cec035142d6038718985) @@ -55,6 +55,8 @@ this.factory = factory; } + #region Simple Assessment + public FailureMechanismSectionAssembly AssembleSimpleAssessment(SimpleAssessmentResultType input) { try @@ -87,6 +89,26 @@ } } + #endregion + + #region Detailed Assessment + + public FailureMechanismSectionAssemblyCategoryGroup AssembleDetailedAssessment(DetailedAssessmentResultType detailedAssessmentResult) + { + try + { + IFailureMechanismSectionAssemblyCalculatorKernel kernel = factory.CreateFailureMechanismSectionAssemblyKernel(); + CalculationOutput output = kernel.DetailedAssessmentDirectFailureMechanisms( + FailureMechanismSectionAssemblyCalculatorInputCreator.CreateDetailedCalculationResult(detailedAssessmentResult)); + + return FailureMechanismSectionAssemblyCreator.ConvertFailureMechanismSectionCategoryGroup(output.Result); + } + catch (Exception e) + { + throw new FailureMechanismSectionAssemblyCalculatorException(e.Message, e); + } + } + public FailureMechanismSectionAssembly AssembleDetailedAssessment(DetailedAssessmentProbabilityOnlyResultType detailedAssessmentResult, double probability, IEnumerable categories) @@ -187,6 +209,10 @@ } } + #endregion + + #region Tailor Made Assessment + public FailureMechanismSectionAssembly AssembleTailorMadeAssessment(TailorMadeAssessmentProbabilityAndDetailedCalculationResultType tailorMadeAssessmentResult, double probability, IEnumerable categories) @@ -255,6 +281,10 @@ } } + #endregion + + #region Combined Assembly + public FailureMechanismSectionAssembly AssembleCombined(FailureMechanismSectionAssembly simpleAssembly, FailureMechanismSectionAssembly detailedAssembly, FailureMechanismSectionAssembly tailorMadeAssembly) @@ -294,5 +324,7 @@ throw new FailureMechanismSectionAssemblyCalculatorException(e.Message, e); } } + + #endregion } } \ No newline at end of file Index: Ringtoets/AssemblyTool/src/Ringtoets.AssemblyTool.KernelWrapper/Calculators/Assembly/IFailureMechanismSectionAssemblyCalculator.cs =================================================================== diff -u -rae5d5bb9f321fe3a39e8de3a04cc077be9f279d3 -r98aebb67dbbe6cedc767cec035142d6038718985 --- Ringtoets/AssemblyTool/src/Ringtoets.AssemblyTool.KernelWrapper/Calculators/Assembly/IFailureMechanismSectionAssemblyCalculator.cs (.../IFailureMechanismSectionAssemblyCalculator.cs) (revision ae5d5bb9f321fe3a39e8de3a04cc077be9f279d3) +++ Ringtoets/AssemblyTool/src/Ringtoets.AssemblyTool.KernelWrapper/Calculators/Assembly/IFailureMechanismSectionAssemblyCalculator.cs (.../IFailureMechanismSectionAssemblyCalculator.cs) (revision 98aebb67dbbe6cedc767cec035142d6038718985) @@ -51,6 +51,15 @@ FailureMechanismSectionAssembly AssembleSimpleAssessment(SimpleAssessmentValidityOnlyResultType input); /// + /// Assembles the detailed assessment based on the input parameter. + /// + /// The to assemble for. + /// A . + /// Thrown when + /// an error occurs when performing the assembly. + FailureMechanismSectionAssemblyCategoryGroup AssembleDetailedAssessment(DetailedAssessmentResultType detailedAssessmentResult); + + /// /// Assembles the detailed assessment based on the input parameters. /// /// The to assemble for. Index: Ringtoets/AssemblyTool/test/Ringtoets.AssemblyTool.KernelWrapper.Test/Calculators/Assembly/FailureMechanismSectionAssemblyCalculatorTest.cs =================================================================== diff -u -rae5d5bb9f321fe3a39e8de3a04cc077be9f279d3 -r98aebb67dbbe6cedc767cec035142d6038718985 --- Ringtoets/AssemblyTool/test/Ringtoets.AssemblyTool.KernelWrapper.Test/Calculators/Assembly/FailureMechanismSectionAssemblyCalculatorTest.cs (.../FailureMechanismSectionAssemblyCalculatorTest.cs) (revision ae5d5bb9f321fe3a39e8de3a04cc077be9f279d3) +++ Ringtoets/AssemblyTool/test/Ringtoets.AssemblyTool.KernelWrapper.Test/Calculators/Assembly/FailureMechanismSectionAssemblyCalculatorTest.cs (.../FailureMechanismSectionAssemblyCalculatorTest.cs) (revision 98aebb67dbbe6cedc767cec035142d6038718985) @@ -327,6 +327,127 @@ #region Detailed Assessment [Test] + public void AssembleDetailedAssessmentWithResult_WithInvalidEnumInput_ThrowFailureMechanismSectionAssemblyCalculatorException() + { + // Setup + using (new AssemblyToolKernelFactoryConfig()) + { + var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance; + var calculator = new FailureMechanismSectionAssemblyCalculator(factory); + + // Call + TestDelegate test = () => calculator.AssembleDetailedAssessment((DetailedAssessmentResultType) 99); + + // Assert + var exception = Assert.Throws(test); + Exception innerException = exception.InnerException; + Assert.IsInstanceOf(innerException); + Assert.AreEqual(innerException.Message, exception.Message); + } + } + + [Test] + public void AssembleDetailedAssessmentWithResult_WithValidInput_InputCorrectlySetToKernel() + { + // Setup + var random = new Random(39); + var detailedAssessmentResult = random.NextEnumValue(); + + using (new AssemblyToolKernelFactoryConfig()) + { + var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance; + FailureMechanismSectionAssemblyKernelStub kernel = factory.LastCreatedFailureMechanismSectionAssemblyKernel; + kernel.FailureMechanismSectionAssemblyCategoryGroup = new CalculationOutput( + random.NextEnumValue()); + + var calculator = new FailureMechanismSectionAssemblyCalculator(factory); + + // Call + calculator.AssembleDetailedAssessment(detailedAssessmentResult); + + // Assert + Assert.AreEqual(kernel.DetailedCalculationResultInput, GetDetailedCalculationResult(detailedAssessmentResult)); + } + } + + [Test] + public void AssembleDetailedAssessmentWithResult_KernelWithInvalidOutput_ThrowFailureMechanismSectionAssemblyCalculatorException() + { + // Setup + var random = new Random(39); + var detailedAssessmentResult = random.NextEnumValue(); + + using (new AssemblyToolKernelFactoryConfig()) + { + var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance; + FailureMechanismSectionAssemblyKernelStub kernel = factory.LastCreatedFailureMechanismSectionAssemblyKernel; + kernel.FailureMechanismSectionAssemblyCategoryGroup = new CalculationOutput( + (FailureMechanismSectionCategoryGroup) 99); + + var calculator = new FailureMechanismSectionAssemblyCalculator(factory); + + // Call + TestDelegate test = () => calculator.AssembleDetailedAssessment(detailedAssessmentResult); + + // Assert + var exception = Assert.Throws(test); + Exception innerException = exception.InnerException; + Assert.IsInstanceOf(innerException); + Assert.AreEqual(innerException.Message, exception.Message); + } + } + + [Test] + public void AssembleDetailedAssessmentWithResult_KernelWithCompleteOutput_OutputCorrectlyReturnedByCalculator() + { + // Setup + var random = new Random(39); + + using (new AssemblyToolKernelFactoryConfig()) + { + var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance; + FailureMechanismSectionAssemblyKernelStub kernel = factory.LastCreatedFailureMechanismSectionAssemblyKernel; + kernel.FailureMechanismSectionAssemblyCategoryGroup = new CalculationOutput( + random.NextEnumValue()); + + var calculator = new FailureMechanismSectionAssemblyCalculator(factory); + + // Call + FailureMechanismSectionAssemblyCategoryGroup assembly = calculator.AssembleDetailedAssessment( + random.NextEnumValue()); + + // Assert + Assert.AreEqual(GetGroup(kernel.FailureMechanismSectionAssemblyCategoryGroup.Result), assembly); + } + } + + [Test] + public void AssembleDetailedAssessmentWithResult_KernelThrowsException_ThrowFailureMechanismSectionAssemblyCalculatorException() + { + // Setup + var random = new Random(39); + + using (new AssemblyToolKernelFactoryConfig()) + { + var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance; + FailureMechanismSectionAssemblyKernelStub kernel = factory.LastCreatedFailureMechanismSectionAssemblyKernel; + kernel.ThrowExceptionOnCalculate = true; + + var calculator = new FailureMechanismSectionAssemblyCalculator(factory); + + // Call + TestDelegate test = () => calculator.AssembleDetailedAssessment( + random.NextEnumValue()); + + // Assert + var exception = Assert.Throws(test); + Exception innerException = exception.InnerException; + Assert.IsNotNull(innerException); + Assert.AreEqual(innerException.Message, exception.Message); + } + } + + [Test] public void AssembleDetailedAssessment_WithInvalidResultEnumInput_ThrowInvalidEnumArgumentException() { // Setup Index: Ringtoets/AssemblyTool/test/Ringtoets.AssemblyTool.KernelWrapper.TestUtil.Test/Calculators/Assembly/FailureMechanismSectionAssemblyCalculatorStubTest.cs =================================================================== diff -u -rae5d5bb9f321fe3a39e8de3a04cc077be9f279d3 -r98aebb67dbbe6cedc767cec035142d6038718985 --- Ringtoets/AssemblyTool/test/Ringtoets.AssemblyTool.KernelWrapper.TestUtil.Test/Calculators/Assembly/FailureMechanismSectionAssemblyCalculatorStubTest.cs (.../FailureMechanismSectionAssemblyCalculatorStubTest.cs) (revision ae5d5bb9f321fe3a39e8de3a04cc077be9f279d3) +++ Ringtoets/AssemblyTool/test/Ringtoets.AssemblyTool.KernelWrapper.TestUtil.Test/Calculators/Assembly/FailureMechanismSectionAssemblyCalculatorStubTest.cs (.../FailureMechanismSectionAssemblyCalculatorStubTest.cs) (revision 98aebb67dbbe6cedc767cec035142d6038718985) @@ -211,6 +211,72 @@ #region Detailed Assessment [Test] + public void AssembleDetailedAssessmentWithDetailedAssessmentResult_ThrowExceptionOnCalculateFalseAndOutputNotSet_ReturnOutput() + { + // Setup + var random = new Random(39); + var calculator = new FailureMechanismSectionAssemblyCalculatorStub(); + + // Call + FailureMechanismSectionAssemblyCategoryGroup assembly = calculator.AssembleDetailedAssessment(random.NextEnumValue()); + + // Assert + Assert.AreEqual(FailureMechanismSectionAssemblyCategoryGroup.IIv, assembly); + } + + [Test] + public void AssembleDetailedAssessmentWithDetailedAssessmentResult_ThrowExceptionOnCalculateFalseAndOutputSet_ReturnOutput() + { + // Setup + var random = new Random(39); + var calculator = new FailureMechanismSectionAssemblyCalculatorStub + { + DetailedAssessmentAssemblyGroupOutput = random.NextEnumValue() + }; + + // Call + FailureMechanismSectionAssemblyCategoryGroup assembly = calculator.AssembleDetailedAssessment(random.NextEnumValue()); + + // Assert + Assert.AreEqual(calculator.DetailedAssessmentAssemblyGroupOutput, assembly); + } + + [Test] + public void AssembleDetailedAssessmentWithDetailedAssessmentResult_ThrowExceptionOnCalculateFalse_SetsInput() + { + // Setup + var random = new Random(39); + var detailedAssessmentResult = random.NextEnumValue(); + + var calculator = new FailureMechanismSectionAssemblyCalculatorStub(); + + // Call + calculator.AssembleDetailedAssessment(detailedAssessmentResult); + + // Assert + Assert.AreEqual(detailedAssessmentResult, calculator.DetailedAssessmentResultInput); + } + + [Test] + public void AssembleDetailedAssessmentWithDetailedAssessmentResult_ThrowExceptionOnCalculateTrue_ThrowsFailureMechanismSectionAssemblyCalculatorException() + { + // Setup + var random = new Random(39); + var calculator = new FailureMechanismSectionAssemblyCalculatorStub + { + ThrowExceptionOnCalculate = true + }; + + // Call + TestDelegate test = () => calculator.AssembleDetailedAssessment(random.NextEnumValue()); + + // Assert + var exception = Assert.Throws(test); + Assert.AreEqual("Message", exception.Message); + Assert.IsNotNull(exception.InnerException); + } + + [Test] public void AssembleDetailedAssessment_ThrowExceptionOnCalculateFalseAndOutputNotSet_ReturnOutput() { // Setup @@ -417,7 +483,6 @@ random.NextEnumValue(), random.NextEnumValue()); - // Assert Assert.AreEqual(calculator.DetailedAssessmentAssemblyGroupOutput, assembly); } @@ -768,7 +833,7 @@ // Setup var random = new Random(39); var tailorMadeAssessmentResult = random.NextEnumValue(); - + var calculator = new FailureMechanismSectionAssemblyCalculatorStub(); // Call Index: Ringtoets/AssemblyTool/test/Ringtoets.AssemblyTool.KernelWrapper.TestUtil/Calculators/Assembly/FailureMechanismSectionAssemblyCalculatorStub.cs =================================================================== diff -u -rae5d5bb9f321fe3a39e8de3a04cc077be9f279d3 -r98aebb67dbbe6cedc767cec035142d6038718985 --- Ringtoets/AssemblyTool/test/Ringtoets.AssemblyTool.KernelWrapper.TestUtil/Calculators/Assembly/FailureMechanismSectionAssemblyCalculatorStub.cs (.../FailureMechanismSectionAssemblyCalculatorStub.cs) (revision ae5d5bb9f321fe3a39e8de3a04cc077be9f279d3) +++ Ringtoets/AssemblyTool/test/Ringtoets.AssemblyTool.KernelWrapper.TestUtil/Calculators/Assembly/FailureMechanismSectionAssemblyCalculatorStub.cs (.../FailureMechanismSectionAssemblyCalculatorStub.cs) (revision 98aebb67dbbe6cedc767cec035142d6038718985) @@ -60,6 +60,11 @@ /// /// Gets the result type of the detailed assessment calculation. /// + public DetailedAssessmentResultType DetailedAssessmentResultInput { get; private set; } + + /// + /// Gets the result type of the detailed assessment calculation. + /// public DetailedAssessmentProbabilityOnlyResultType DetailedAssessmentProbabilityOnlyResultInput { get; private set; } /// @@ -76,7 +81,7 @@ /// Gets the 'N' parameter input of the detailed assessment calculation. /// public double DetailedAssessmentNInput { get; private set; } - + /// /// Gets the detailed assessment result input for cat Iv - IIv. /// @@ -92,7 +97,6 @@ /// public DetailedAssessmentResultType DetailedAssessmentResultForMechanismSpecificLowerLimitNormInput { get; private set; } public DetailedAssessmentResultType DetailedAssessmentResultForMechanismSpecificLowerLimitNormInput { get; private set; } - /// /// Gets the detailed assessment result input for cat IVv - Vv. /// public DetailedAssessmentResultType DetailedAssessmentResultForMechanismSpecificLowerLimitNormInput { get; private set; } @@ -102,7 +106,7 @@ /// Gets the detailed assessment result input for cat Vv - VIv. /// public DetailedAssessmentResultType DetailedAssessmentResultForFactorizedLowerLimitNormInput { get; private set; } - + /// /// Gets or sets the output of the tailor made assessment calculation. /// @@ -219,6 +223,23 @@ (SimpleAssessmentAssemblyOutput = new FailureMechanismSectionAssembly(1, FailureMechanismSectionAssemblyCategoryGroup.VIIv)); } + public FailureMechanismSectionAssemblyCategoryGroup AssembleDetailedAssessment(DetailedAssessmentResultType detailedAssessmentResult) + { + if (ThrowExceptionOnCalculate) + { + throw new FailureMechanismSectionAssemblyCalculatorException("Message", new Exception()); + } + + DetailedAssessmentResultInput = detailedAssessmentResult; + + if (DetailedAssessmentAssemblyGroupOutput == null) + { + DetailedAssessmentAssemblyGroupOutput = FailureMechanismSectionAssemblyCategoryGroup.IIv; + } + + return DetailedAssessmentAssemblyGroupOutput.Value; + } + public FailureMechanismSectionAssembly AssembleDetailedAssessment(DetailedAssessmentProbabilityOnlyResultType detailedAssessmentResult, double probability, IEnumerable categories) @@ -316,8 +337,8 @@ } public FailureMechanismSectionAssembly AssembleTailorMadeAssessment(TailorMadeAssessmentProbabilityCalculationResultType tailorMadeAssessmentResult, - double probability, - IEnumerable categories, + double probability, + IEnumerable categories, double n) { if (ThrowExceptionOnCalculate)