Index: Ringtoets/AssemblyTool/src/Ringtoets.AssemblyTool.KernelWrapper/Calculators/Assembly/FailureMechanismSectionAssemblyCalculator.cs =================================================================== diff -u -r3f282c2215f8aa9a287a6eba73868cbd0d30f7e5 -r47ee0b2c0d2ecc8fec2c70f85332b4ee35ab31bf --- Ringtoets/AssemblyTool/src/Ringtoets.AssemblyTool.KernelWrapper/Calculators/Assembly/FailureMechanismSectionAssemblyCalculator.cs (.../FailureMechanismSectionAssemblyCalculator.cs) (revision 3f282c2215f8aa9a287a6eba73868cbd0d30f7e5) +++ Ringtoets/AssemblyTool/src/Ringtoets.AssemblyTool.KernelWrapper/Calculators/Assembly/FailureMechanismSectionAssemblyCalculator.cs (.../FailureMechanismSectionAssemblyCalculator.cs) (revision 47ee0b2c0d2ecc8fec2c70f85332b4ee35ab31bf) @@ -151,5 +151,25 @@ FailureMechanismSectionCategoryGroup.VIIv, new Probability(probability))); } + + public FailureMechanismSectionAssembly AssembleCombined(FailureMechanismSectionAssembly simpleAssembly, + FailureMechanismSectionAssembly detailedAssembly, + FailureMechanismSectionAssembly tailorMadeAssembly) + { + try + { + IFailureMechanismSectionAssemblyCalculatorKernel kernel = factory.CreateFailureMechanismSectionAssemblyKernel(); + CalculationOutput output = kernel.CombinedAssessmentFromFailureMechanismSectionResults( + FailureMechanismSectionAssemblyCalculatorInputCreator.CreateFailureMechanismSectionAssemblyCategoryResult(simpleAssembly), + FailureMechanismSectionAssemblyCalculatorInputCreator.CreateFailureMechanismSectionAssemblyCategoryResult(detailedAssembly), + FailureMechanismSectionAssemblyCalculatorInputCreator.CreateFailureMechanismSectionAssemblyCategoryResult(tailorMadeAssembly)); + + return FailureMechanismSectionAssemblyCreator.Create(output.Result); + } + catch (Exception e) + { + throw new FailureMechanismSectionAssemblyCalculatorException(e.Message, e); + } + } } } \ No newline at end of file Index: Ringtoets/AssemblyTool/test/Ringtoets.AssemblyTool.KernelWrapper.Test/Calculators/Assembly/FailureMechanismSectionAssemblyCalculatorTest.cs =================================================================== diff -u -r9ebd34ca30a20d1b480dd1c19df8a99f23ecbf28 -r47ee0b2c0d2ecc8fec2c70f85332b4ee35ab31bf --- Ringtoets/AssemblyTool/test/Ringtoets.AssemblyTool.KernelWrapper.Test/Calculators/Assembly/FailureMechanismSectionAssemblyCalculatorTest.cs (.../FailureMechanismSectionAssemblyCalculatorTest.cs) (revision 9ebd34ca30a20d1b480dd1c19df8a99f23ecbf28) +++ Ringtoets/AssemblyTool/test/Ringtoets.AssemblyTool.KernelWrapper.Test/Calculators/Assembly/FailureMechanismSectionAssemblyCalculatorTest.cs (.../FailureMechanismSectionAssemblyCalculatorTest.cs) (revision 47ee0b2c0d2ecc8fec2c70f85332b4ee35ab31bf) @@ -759,5 +759,151 @@ } #endregion + + #region Combined Assembly + + [Test] + public void AssembleCombined_WithInvalidEnumInput_ThrowFailureMechanismSectionAssemblyCalculatorException() + { + // Setup + var random = new Random(39); + + using (new AssemblyToolKernelFactoryConfig()) + { + var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance; + FailureMechanismSectionAssemblyKernelStub kernel = factory.LastCreatedFailureMechanismSectionAssemblyKernel; + kernel.FailureMechanismSectionAssemblyCategoryResult = new CalculationOutput( + new FailureMechanismSectionAssemblyCategoryResult(FailureMechanismSectionCategoryGroup.Iv, Probability.NaN)); + + var calculator = new FailureMechanismSectionAssemblyCalculator(factory); + + // Call + TestDelegate test = () => calculator.AssembleCombined(new FailureMechanismSectionAssembly(random.NextDouble(), (FailureMechanismSectionAssemblyCategoryGroup) 99), + new FailureMechanismSectionAssembly(random.NextDouble(), random.NextEnumValue()), + new FailureMechanismSectionAssembly(random.NextDouble(), random.NextEnumValue())); + + // Assert + var exception = Assert.Throws(test); + Exception innerException = exception.InnerException; + Assert.IsInstanceOf(innerException); + Assert.AreEqual(innerException.Message, exception.Message); + } + } + + [Test] + public void AssembleCombined_WithValidInput_InputCorrectlySetToKernel() + { + // Setup + var random = new Random(39); + var simpleAssembly = new FailureMechanismSectionAssembly(random.NextDouble(), random.NextEnumValue()); + var detailedAssembly = new FailureMechanismSectionAssembly(random.NextDouble(), random.NextEnumValue()); + var tailorMadeAssembly = new FailureMechanismSectionAssembly(random.NextDouble(), random.NextEnumValue()); + + using (new AssemblyToolKernelFactoryConfig()) + { + var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance; + FailureMechanismSectionAssemblyKernelStub kernel = factory.LastCreatedFailureMechanismSectionAssemblyKernel; + kernel.FailureMechanismSectionAssemblyCategoryResult = new CalculationOutput( + new FailureMechanismSectionAssemblyCategoryResult(FailureMechanismSectionCategoryGroup.Iv, Probability.NaN)); + + var calculator = new FailureMechanismSectionAssemblyCalculator(factory); + + // Call + calculator.AssembleCombined(simpleAssembly, detailedAssembly, tailorMadeAssembly); + + // Assert + Assert.AreEqual(simpleAssembly.Probability, kernel.CombinedSimpleAssessmentInput.EstimatedProbabilityOfFailure); + Assert.AreEqual(simpleAssembly.Group, GetGroup(kernel.CombinedSimpleAssessmentInput.CategoryGroup)); + Assert.AreEqual(detailedAssembly.Probability, kernel.CombinedDetailedAssessmentInput.EstimatedProbabilityOfFailure); + Assert.AreEqual(detailedAssembly.Group, GetGroup(kernel.CombinedDetailedAssessmentInput.CategoryGroup)); + Assert.AreEqual(tailorMadeAssembly.Probability, kernel.CombinedTailorMadeAssessmentInput.EstimatedProbabilityOfFailure); + Assert.AreEqual(tailorMadeAssembly.Group, GetGroup(kernel.CombinedTailorMadeAssessmentInput.CategoryGroup)); + } + } + + [Test] + public void AssembleCombined_KernelWithCompleteOutput_OutputCorrectlyReturnedByCalculator() + { + // Setup + var random = new Random(39); + + using (new AssemblyToolKernelFactoryConfig()) + { + var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance; + FailureMechanismSectionAssemblyKernelStub kernel = factory.LastCreatedFailureMechanismSectionAssemblyKernel; + kernel.FailureMechanismSectionAssemblyCategoryResult = new CalculationOutput( + new FailureMechanismSectionAssemblyCategoryResult(FailureMechanismSectionCategoryGroup.Iv, Probability.NaN)); + + var calculator = new FailureMechanismSectionAssemblyCalculator(factory); + + // Call + FailureMechanismSectionAssembly assembly = calculator.AssembleCombined( + new FailureMechanismSectionAssembly(random.NextDouble(), random.NextEnumValue()), + new FailureMechanismSectionAssembly(random.NextDouble(), random.NextEnumValue()), + new FailureMechanismSectionAssembly(random.NextDouble(), random.NextEnumValue())); + + // Assert + AssertCalculatorOutput(kernel.FailureMechanismSectionAssemblyCategoryResult, assembly); + } + } + + [Test] + public void AssembleCombined_KernelWithInvalidOutput_ThrowFailureMechanismSectionAssemblyCalculatorException() + { + // Setup + var random = new Random(39); + + using (new AssemblyToolKernelFactoryConfig()) + { + var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance; + FailureMechanismSectionAssemblyKernelStub kernel = factory.LastCreatedFailureMechanismSectionAssemblyKernel; + kernel.FailureMechanismSectionAssemblyCategoryResult = new CalculationOutput( + new FailureMechanismSectionAssemblyCategoryResult((FailureMechanismSectionCategoryGroup) 99, Probability.NaN)); + + var calculator = new FailureMechanismSectionAssemblyCalculator(factory); + + // Call + TestDelegate test = () => calculator.AssembleCombined( + new FailureMechanismSectionAssembly(random.NextDouble(), random.NextEnumValue()), + new FailureMechanismSectionAssembly(random.NextDouble(), random.NextEnumValue()), + new FailureMechanismSectionAssembly(random.NextDouble(), random.NextEnumValue())); + + // Assert + var exception = Assert.Throws(test); + Exception innerException = exception.InnerException; + Assert.IsInstanceOf(innerException); + Assert.AreEqual(innerException.Message, exception.Message); + } + } + + [Test] + public void AssembleCombined_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.AssembleCombined( + new FailureMechanismSectionAssembly(random.NextDouble(), random.NextEnumValue()), + new FailureMechanismSectionAssembly(random.NextDouble(), random.NextEnumValue()), + new FailureMechanismSectionAssembly(random.NextDouble(), random.NextEnumValue())); + + // Assert + var exception = Assert.Throws(test); + Exception innerException = exception.InnerException; + Assert.IsNotNull(innerException); + Assert.AreEqual(innerException.Message, exception.Message); + } + } + + #endregion } } \ No newline at end of file