Index: Ringtoets/AssemblyTool/src/Ringtoets.AssemblyTool.KernelWrapper/Calculators/Assembly/FailureMechanismSectionAssemblyCalculator.cs =================================================================== diff -u -rc848c6126c729cb3e4ce79cc121ba62758dbc0ff -r7e5af14aa300d545f2dec663cd4dd13ad66ab1e0 --- Ringtoets/AssemblyTool/src/Ringtoets.AssemblyTool.KernelWrapper/Calculators/Assembly/FailureMechanismSectionAssemblyCalculator.cs (.../FailureMechanismSectionAssemblyCalculator.cs) (revision c848c6126c729cb3e4ce79cc121ba62758dbc0ff) +++ Ringtoets/AssemblyTool/src/Ringtoets.AssemblyTool.KernelWrapper/Calculators/Assembly/FailureMechanismSectionAssemblyCalculator.cs (.../FailureMechanismSectionAssemblyCalculator.cs) (revision 7e5af14aa300d545f2dec663cd4dd13ad66ab1e0) @@ -137,6 +137,37 @@ return GetDetailedAssembly(detailedAssessmentResult, probability, failureMechanismSectionN, assemblyCategoriesInput); } + public FailureMechanismSectionAssembly AssembleDetailedAssessment(DetailedAssessmentProbabilityOnlyResultType detailedAssessmentResult, + double probability, + double normativeNorm, + double failureMechanismN, + double failureMechanismContribution) + { + try + { + ICategoryLimitsCalculator categoriesKernel = factory.CreateAssemblyCategoriesKernel(); + CategoriesList categories = categoriesKernel.CalculateFmSectionCategoryLimitsWbi02( + normativeNorm, + new FailureMechanism(failureMechanismN, failureMechanismContribution)); + + IFailureMechanismSectionAssemblyCalculatorKernel kernel = factory.CreateFailureMechanismSectionAssemblyKernel(); + FmSectionAssemblyDirectResultWithProbability output = + kernel.TranslateAssessmentResultWbi0G3(GetAssessmentResultTypeG2(detailedAssessmentResult, probability), + probability, + categories); + + return FailureMechanismSectionAssemblyCreator.Create(output); + } + catch (AssemblyException e) + { + throw new FailureMechanismSectionAssemblyCalculatorException(AssemblyErrorMessageCreator.CreateErrorMessage(e.Errors), e); + } + catch (Exception e) + { + throw new FailureMechanismSectionAssemblyCalculatorException(AssemblyErrorMessageCreator.CreateGenericErrorMessage(), e); + } + } + public FailureMechanismSectionAssemblyCategoryGroup AssembleDetailedAssessment( DetailedAssessmentResultType detailedAssessmentResultForFactorizedSignalingNorm, DetailedAssessmentResultType detailedAssessmentResultForSignalingNorm, Index: Ringtoets/AssemblyTool/test/Ringtoets.AssemblyTool.KernelWrapper.Test/Calculators/Assembly/FailureMechanismSectionAssemblyCalculatorTest.cs =================================================================== diff -u -r851632f724f2c1a16d9172800492b3672335605c -r7e5af14aa300d545f2dec663cd4dd13ad66ab1e0 --- Ringtoets/AssemblyTool/test/Ringtoets.AssemblyTool.KernelWrapper.Test/Calculators/Assembly/FailureMechanismSectionAssemblyCalculatorTest.cs (.../FailureMechanismSectionAssemblyCalculatorTest.cs) (revision 851632f724f2c1a16d9172800492b3672335605c) +++ Ringtoets/AssemblyTool/test/Ringtoets.AssemblyTool.KernelWrapper.Test/Calculators/Assembly/FailureMechanismSectionAssemblyCalculatorTest.cs (.../FailureMechanismSectionAssemblyCalculatorTest.cs) (revision 7e5af14aa300d545f2dec663cd4dd13ad66ab1e0) @@ -741,6 +741,229 @@ } [Test] + public void AssembleDetailedAssessmentWithNormativeNorm_WithInvalidEnumInput_ThrowInvalidEnumArgumentException() + { + // Setup + var random = new Random(39); + using (new AssemblyToolKernelFactoryConfig()) + { + var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance; + var calculator = new FailureMechanismSectionAssemblyCalculator(factory); + + // Call + TestDelegate test = () => calculator.AssembleDetailedAssessment( + (DetailedAssessmentProbabilityOnlyResultType) 99, + random.NextDouble(), + random.NextDouble(), + random.NextDouble(1, 10), + random.NextDouble()); + + // Assert + var exception = Assert.Throws(test); + Assert.IsInstanceOf(exception.InnerException); + Assert.AreEqual(AssemblyErrorMessageCreator.CreateGenericErrorMessage(), exception.Message); + } + } + + [Test] + public void AssembleDetailedAssessmentWithNormativeNorm_WithValidInput_InputCorrectlySetToKernel() + { + // Setup + var random = new Random(39); + double probability = random.NextDouble(); + double normativeNorm = random.NextDouble(); + double n = random.NextDouble(1, 10); + double failureMechanismContribution = random.NextDouble(); + var detailedAssessment = random.NextEnumValue(); + + using (new AssemblyToolKernelFactoryConfig()) + { + var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance; + AssemblyCategoriesKernelStub categoriesKernel = factory.LastCreatedAssemblyCategoriesKernel; + categoriesKernel.FailureMechanismSectionCategoriesOutputWbi02 = CategoriesListTestFactory.CreateFailureMechanismSectionCategories(); + + FailureMechanismSectionAssemblyKernelStub kernel = factory.LastCreatedFailureMechanismSectionAssemblyKernel; + kernel.FailureMechanismAssemblyDirectResultWithProbability = new FmSectionAssemblyDirectResultWithProbability(random.NextEnumValue(), + random.NextDouble()); + + var calculator = new FailureMechanismSectionAssemblyCalculator(factory); + + // Call + calculator.AssembleDetailedAssessment( + detailedAssessment, + probability, + normativeNorm, + n, + failureMechanismContribution); + + // Assert + Assert.AreEqual(normativeNorm, categoriesKernel.AssessmentSectionNorm); + Assert.AreEqual(n, categoriesKernel.N); + Assert.AreEqual(failureMechanismContribution, categoriesKernel.FailureMechanismContribution); + Assert.AreSame(categoriesKernel.FailureMechanismSectionCategoriesOutputWbi02, kernel.FailureMechanismSectionCategories); + + EAssessmentResultTypeG2 expectedResultType = FailureMechanismSectionAssemblyCalculatorInputCreator.CreateAssessmentResultTypeG2(detailedAssessment); + Assert.AreEqual(expectedResultType, kernel.AssessmentResultTypeG2Input); + Assert.AreEqual(probability, kernel.FailureProbabilityInput); + } + } + + [Test] + public void AssembleDetailedAssessmentWithNormativeNorm_WithProbabilityResultAndNaNValue_InputCorrectlySetToKernel() + { + // Setup + var random = new Random(39); + double normativeNorm = random.NextDouble(); + double n = random.NextDouble(1, 10); + double failureMechanismContribution = random.NextDouble(); + + using (new AssemblyToolKernelFactoryConfig()) + { + var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance; + AssemblyCategoriesKernelStub categoriesKernel = factory.LastCreatedAssemblyCategoriesKernel; + categoriesKernel.FailureMechanismSectionCategoriesOutputWbi02 = CategoriesListTestFactory.CreateFailureMechanismSectionCategories(); + + FailureMechanismSectionAssemblyKernelStub kernel = factory.LastCreatedFailureMechanismSectionAssemblyKernel; + kernel.FailureMechanismAssemblyDirectResultWithProbability = new FmSectionAssemblyDirectResultWithProbability(random.NextEnumValue(), + random.NextDouble()); + + var calculator = new FailureMechanismSectionAssemblyCalculator(factory); + + // Call + calculator.AssembleDetailedAssessment( + DetailedAssessmentProbabilityOnlyResultType.Probability, + double.NaN, + normativeNorm, + n, + failureMechanismContribution); + + // Assert + Assert.AreEqual(normativeNorm, categoriesKernel.AssessmentSectionNorm); + Assert.AreEqual(n, categoriesKernel.N); + Assert.AreEqual(failureMechanismContribution, categoriesKernel.FailureMechanismContribution); + Assert.AreSame(categoriesKernel.FailureMechanismSectionCategoriesOutputWbi02, kernel.FailureMechanismSectionCategories); + + Assert.IsNaN(kernel.FailureProbabilityInput); + Assert.AreEqual(EAssessmentResultTypeG2.Gr, kernel.AssessmentResultTypeG2Input); + } + } + + [Test] + public void AssembleDetailedAssessmentWithNormativeNorm_KernelWithCompleteOutput_OutputCorrectlyReturnedByCalculator() + { + // Setup + var random = new Random(39); + using (new AssemblyToolKernelFactoryConfig()) + { + var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance; + FailureMechanismSectionAssemblyKernelStub kernel = factory.LastCreatedFailureMechanismSectionAssemblyKernel; + kernel.FailureMechanismAssemblyDirectResultWithProbability = new FmSectionAssemblyDirectResultWithProbability(random.NextEnumValue(), + random.NextDouble()); + + var calculator = new FailureMechanismSectionAssemblyCalculator(factory); + + // Call + FailureMechanismSectionAssembly assembly = calculator.AssembleDetailedAssessment( + random.NextEnumValue(), + random.NextDouble(), + random.NextDouble(), + random.NextDouble(1, 10), + random.NextDouble()); + + // Assert + AssertCalculatorOutput(kernel.FailureMechanismAssemblyDirectResultWithProbability, assembly); + } + } + + [Test] + public void AssembleDetailedAssessmentWithNormativeNorm_KernelWithInvalidOutput_ThrowFailureMechanismSectionAssemblyCalculatorException() + { + // Setup + var random = new Random(39); + using (new AssemblyToolKernelFactoryConfig()) + { + var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance; + FailureMechanismSectionAssemblyKernelStub kernel = factory.LastCreatedFailureMechanismSectionAssemblyKernel; + kernel.FailureMechanismAssemblyDirectResultWithProbability = new FmSectionAssemblyDirectResultWithProbability((EFmSectionCategory) 99, + random.NextDouble()); + + var calculator = new FailureMechanismSectionAssemblyCalculator(factory); + + // Call + TestDelegate test = () => calculator.AssembleDetailedAssessment( + random.NextEnumValue(), + random.NextDouble(), + random.NextDouble(), + random.NextDouble(1, 10), + random.NextDouble()); + + // Assert + var exception = Assert.Throws(test); + Assert.IsInstanceOf(exception.InnerException); + Assert.AreEqual(AssemblyErrorMessageCreator.CreateGenericErrorMessage(), exception.Message); + } + } + + [Test] + public void AssembleDetailedAssessmentWithNormativeNorm_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(), + random.NextDouble(), + random.NextDouble(), + random.NextDouble(1, 10), + random.NextDouble()); + + // Assert + var exception = Assert.Throws(test); + Assert.IsNotNull(exception.InnerException); + Assert.AreEqual(AssemblyErrorMessageCreator.CreateGenericErrorMessage(), exception.Message); + } + } + + [Test] + public void AssembleDetailedAssessmentWithNormativeNorm_KernelThrowsAssemblyException_ThrowFailureMechanismSectionAssemblyCalculatorException() + { + // Setup + var random = new Random(39); + using (new AssemblyToolKernelFactoryConfig()) + { + var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance; + FailureMechanismSectionAssemblyKernelStub kernel = factory.LastCreatedFailureMechanismSectionAssemblyKernel; + kernel.ThrowAssemblyExceptionOnCalculate = true; + + var calculator = new FailureMechanismSectionAssemblyCalculator(factory); + + // Call + TestDelegate test = () => calculator.AssembleDetailedAssessment( + random.NextEnumValue(), + random.NextDouble(), + random.NextDouble(), + random.NextDouble(1, 10), + random.NextDouble()); + + // Assert + var exception = Assert.Throws(test); + Assert.IsInstanceOf(exception.InnerException); + Assert.AreEqual(AssemblyErrorMessageCreator.CreateErrorMessage(new[] + { + new AssemblyErrorMessage(string.Empty, EAssemblyErrors.CategoryLowerLimitOutOfRange) + }), exception.Message); + } + } + + [Test] public void AssembleDetailedAssessmentWithLengthEffect_WithInvalidEnumInput_ThrowInvalidEnumArgumentException() { // Setup