Index: Ringtoets/AssemblyTool/src/Ringtoets.AssemblyTool.KernelWrapper/Calculators/Assembly/FailureMechanismSectionAssemblyCalculator.cs =================================================================== diff -u -rbb42f0b668416836925575ef5730682461d6f867 -r674c3bd6247c9d8d5d88125dd91c02260daedd3a --- Ringtoets/AssemblyTool/src/Ringtoets.AssemblyTool.KernelWrapper/Calculators/Assembly/FailureMechanismSectionAssemblyCalculator.cs (.../FailureMechanismSectionAssemblyCalculator.cs) (revision bb42f0b668416836925575ef5730682461d6f867) +++ Ringtoets/AssemblyTool/src/Ringtoets.AssemblyTool.KernelWrapper/Calculators/Assembly/FailureMechanismSectionAssemblyCalculator.cs (.../FailureMechanismSectionAssemblyCalculator.cs) (revision 674c3bd6247c9d8d5d88125dd91c02260daedd3a) @@ -25,6 +25,7 @@ using AssemblyTool.Kernel; using AssemblyTool.Kernel.Data; using AssemblyTool.Kernel.Data.AssemblyCategories; +using AssemblyTool.Kernel.Data.CalculationResults; using Ringtoets.AssemblyTool.Data; using Ringtoets.AssemblyTool.KernelWrapper.Creators; using Ringtoets.AssemblyTool.KernelWrapper.Kernels; @@ -161,6 +162,32 @@ } } + public FailureMechanismSectionAssemblyCategoryGroup AssembleDetailedAssessment( + DetailedAssessmentResultType detailedAssesmentResultForFactorizedSignalingNorm, + DetailedAssessmentResultType detailedAssesmentResultForSignalingNorm, + DetailedAssessmentResultType detailedAssesmentResultForMechanismSpecificLowerLimitNorm, + DetailedAssessmentResultType detailedAssesmentResultForLowerLimitNorm, + DetailedAssessmentResultType detailedAssesmentResultForFactorizedLowerLimitNorm) + { + try + { + IFailureMechanismSectionAssemblyCalculatorKernel kernel = factory.CreateFailureMechanismSectionAssemblyKernel(); + CalculationOutput output = kernel.DetailedAssessmentDirectFailureMechanisms( + FailureMechanismSectionAssemblyCalculatorInputCreator.CreateDetailedCalculationInputFromCategoryResults( + detailedAssesmentResultForFactorizedSignalingNorm, + detailedAssesmentResultForSignalingNorm, + detailedAssesmentResultForMechanismSpecificLowerLimitNorm, + detailedAssesmentResultForLowerLimitNorm, + detailedAssesmentResultForFactorizedLowerLimitNorm)); + + return FailureMechanismSectionAssemblyCreator.ConvertFailureMechanismSectionCategoryGroup(output.Result); + } + catch (Exception e) + { + throw new FailureMechanismSectionAssemblyCalculatorException(e.Message, e); + } + } + public FailureMechanismSectionAssembly AssembleTailorMadeAssessment(TailorMadeAssessmentProbabilityAndDetailedCalculationResultType tailorMadeAssessmentResult, double probability, IEnumerable categories) Index: Ringtoets/AssemblyTool/test/Ringtoets.AssemblyTool.KernelWrapper.Test/Calculators/Assembly/FailureMechanismSectionAssemblyCalculatorTest.cs =================================================================== diff -u -rbb42f0b668416836925575ef5730682461d6f867 -r674c3bd6247c9d8d5d88125dd91c02260daedd3a --- Ringtoets/AssemblyTool/test/Ringtoets.AssemblyTool.KernelWrapper.Test/Calculators/Assembly/FailureMechanismSectionAssemblyCalculatorTest.cs (.../FailureMechanismSectionAssemblyCalculatorTest.cs) (revision bb42f0b668416836925575ef5730682461d6f867) +++ Ringtoets/AssemblyTool/test/Ringtoets.AssemblyTool.KernelWrapper.Test/Calculators/Assembly/FailureMechanismSectionAssemblyCalculatorTest.cs (.../FailureMechanismSectionAssemblyCalculatorTest.cs) (revision 674c3bd6247c9d8d5d88125dd91c02260daedd3a) @@ -1199,6 +1199,195 @@ } } + [Test] + public void AssembleDetailedAssessmentWithCategoryResults_WithInvalidEnumInput_ThrowFailureMechanismSectionAssemblyCalculatorException() + { + // Setup + var random = new Random(39); + + using (new AssemblyToolKernelFactoryConfig()) + { + var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance; + var calculator = new FailureMechanismSectionAssemblyCalculator(factory); + + // Call + TestDelegate test = () => calculator.AssembleDetailedAssessment( + (DetailedAssessmentResultType) 99, + random.NextEnumValue(), + random.NextEnumValue(), + random.NextEnumValue(), + random.NextEnumValue()); + + // Assert + var exception = Assert.Throws(test); + Exception innerException = exception.InnerException; + Assert.IsInstanceOf(innerException); + Assert.AreEqual(innerException.Message, exception.Message); + } + } + + [Test] + public void AssembleDetailedAssessmentWithCategoryResults_WithValidInput_InputCorrectlySetToKernel() + { + // Setup + var random = new Random(39); + var detailedAssesmentResultForFactorizedSignalingNorm = random.NextEnumValue(); + var detailedAssesmentResultForSignalingNorm = random.NextEnumValue(); + var detailedAssesmentResultForMechanismSpecificLowerLimitNorm = random.NextEnumValue(); + var detailedAssesmentResultForLowerLimitNorm = random.NextEnumValue(); + var detailedAssesmentResultForFactorizedLowerLimitNorm = 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(detailedAssesmentResultForFactorizedSignalingNorm, + detailedAssesmentResultForSignalingNorm, + detailedAssesmentResultForMechanismSpecificLowerLimitNorm, + detailedAssesmentResultForLowerLimitNorm, + detailedAssesmentResultForFactorizedLowerLimitNorm); + + // Assert + Assert.AreEqual(kernel.DetailedAssessmentFailureMechanismFromCategoriesInput.ResultItoII, + GetDetailedCalculationResult(detailedAssesmentResultForFactorizedSignalingNorm)); + Assert.AreEqual(kernel.DetailedAssessmentFailureMechanismFromCategoriesInput.ResultIItoIII, + GetDetailedCalculationResult(detailedAssesmentResultForSignalingNorm)); + Assert.AreEqual(kernel.DetailedAssessmentFailureMechanismFromCategoriesInput.ResultIIItoIV, + GetDetailedCalculationResult(detailedAssesmentResultForMechanismSpecificLowerLimitNorm)); + Assert.AreEqual(kernel.DetailedAssessmentFailureMechanismFromCategoriesInput.ResultIVtoV, + GetDetailedCalculationResult(detailedAssesmentResultForLowerLimitNorm)); + Assert.AreEqual(kernel.DetailedAssessmentFailureMechanismFromCategoriesInput.ResultVtoVI, + GetDetailedCalculationResult(detailedAssesmentResultForFactorizedLowerLimitNorm)); + } + } + + [Test] + public void AssembleDetailedAssessmentWithCategoryResults_KernelWithInvalidOutput_ThrowFailureMechanismSectionAssemblyCalculatorException() + { + // Setup + var random = new Random(39); + var detailedAssesmentResultForFactorizedSignalingNorm = random.NextEnumValue(); + var detailedAssesmentResultForSignalingNorm = random.NextEnumValue(); + var detailedAssesmentResultForMechanismSpecificLowerLimitNorm = random.NextEnumValue(); + var detailedAssesmentResultForLowerLimitNorm = random.NextEnumValue(); + var detailedAssesmentResultForFactorizedLowerLimitNorm = 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( + detailedAssesmentResultForFactorizedSignalingNorm, + detailedAssesmentResultForSignalingNorm, + detailedAssesmentResultForMechanismSpecificLowerLimitNorm, + detailedAssesmentResultForLowerLimitNorm, + detailedAssesmentResultForFactorizedLowerLimitNorm); + + // Assert + var exception = Assert.Throws(test); + Exception innerException = exception.InnerException; + Assert.IsInstanceOf(innerException); + Assert.AreEqual(innerException.Message, exception.Message); + } + } + + [Test] + public void AssembleDetailedAssessmentWithCategoryResults_KernelWithCompleteOutput_OutputCorrectlyReturnedByCalculator() + { + // Setup + var random = new Random(39); + var detailedAssesmentResultForFactorizedSignalingNorm = random.NextEnumValue(); + var detailedAssesmentResultForSignalingNorm = random.NextEnumValue(); + var detailedAssesmentResultForMechanismSpecificLowerLimitNorm = random.NextEnumValue(); + var detailedAssesmentResultForLowerLimitNorm = random.NextEnumValue(); + var detailedAssesmentResultForFactorizedLowerLimitNorm = 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 + FailureMechanismSectionAssemblyCategoryGroup assembly = calculator.AssembleDetailedAssessment( + detailedAssesmentResultForFactorizedSignalingNorm, + detailedAssesmentResultForSignalingNorm, + detailedAssesmentResultForMechanismSpecificLowerLimitNorm, + detailedAssesmentResultForLowerLimitNorm, + detailedAssesmentResultForFactorizedLowerLimitNorm); + + // Assert + Assert.AreEqual(GetGroup(kernel.FailureMechanismSectionAssemblyCategoryGroup.Result), assembly); + } + } + + [Test] + public void AssembleDetailedAssessmentWithCategoryResults_KernelThrowsException_ThrowFailureMechanismSectionAssemblyCalculatorException() + { + // Setup + var random = new Random(39); + var detailedAssesmentResultForFactorizedSignalingNorm = random.NextEnumValue(); + var detailedAssesmentResultForSignalingNorm = random.NextEnumValue(); + var detailedAssesmentResultForMechanismSpecificLowerLimitNorm = random.NextEnumValue(); + var detailedAssesmentResultForLowerLimitNorm = random.NextEnumValue(); + var detailedAssesmentResultForFactorizedLowerLimitNorm = random.NextEnumValue(); + + 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( + detailedAssesmentResultForFactorizedSignalingNorm, + detailedAssesmentResultForSignalingNorm, + detailedAssesmentResultForMechanismSpecificLowerLimitNorm, + detailedAssesmentResultForLowerLimitNorm, + detailedAssesmentResultForFactorizedLowerLimitNorm); + + // Assert + var exception = Assert.Throws(test); + Exception innerException = exception.InnerException; + Assert.IsNotNull(innerException); + Assert.AreEqual(innerException.Message, exception.Message); + } + } + + private static DetailedCalculationResult GetDetailedCalculationResult(DetailedAssessmentResultType detailedAssessmentResult) + { + switch (detailedAssessmentResult) + { + case DetailedAssessmentResultType.None: + return DetailedCalculationResult.None; + case DetailedAssessmentResultType.Sufficient: + return DetailedCalculationResult.V; + case DetailedAssessmentResultType.Insufficient: + return DetailedCalculationResult.VN; + case DetailedAssessmentResultType.NotAssessed: + return DetailedCalculationResult.NGO; + default: + throw new NotSupportedException(); + } + } + #endregion #region Combined Assembly