Index: Ringtoets/Common/src/Ringtoets.Common.Data/AssemblyTool/AssemblyToolCategoriesFactory.cs =================================================================== diff -u -rbaf9e7a385fd374010f076868ddccc77b4da17ce -r8b119f52dad2aeba53f63b9bde9e6176452e834e --- Ringtoets/Common/src/Ringtoets.Common.Data/AssemblyTool/AssemblyToolCategoriesFactory.cs (.../AssemblyToolCategoriesFactory.cs) (revision baf9e7a385fd374010f076868ddccc77b4da17ce) +++ Ringtoets/Common/src/Ringtoets.Common.Data/AssemblyTool/AssemblyToolCategoriesFactory.cs (.../AssemblyToolCategoriesFactory.cs) (revision 8b119f52dad2aeba53f63b9bde9e6176452e834e) @@ -56,6 +56,38 @@ } /// + /// Creates the failure mechanism assembly categories. + /// + /// The signaling norm to use in the calculation. + /// The lower limit norm to use in the calculation. + /// The failure mechanism contribution to calculate with. + /// The 'N' parameter used to factor in the 'length effect'. + /// An with categories of + /// . + /// Thrown when an error occurred while creating the categories. + public static IEnumerable CreateFailureMechanismAssemblyCategories( + double signalingNorm, + double lowerLimitNorm, + double failureMechanismContribution, + double n) + { + IAssemblyCategoriesCalculator calculator = AssemblyToolCalculatorFactory.Instance.CreateAssemblyCategoriesCalculator( + AssemblyToolKernelFactory.Instance); + + try + { + return calculator.CalculateFailureMechanismCategories(new AssemblyCategoriesInput(n, + failureMechanismContribution, + signalingNorm, + lowerLimitNorm)); + } + catch (AssemblyCategoriesCalculatorException e) + { + throw new AssemblyException(e.Message, e); + } + } + + /// /// Creates the failure mechanism section assembly categories. /// /// The signaling norm to use in the calculation. Index: Ringtoets/Common/test/Ringtoets.Common.Data.Test/AssemblyTool/AssemblyToolCategoriesFactoryTest.cs =================================================================== diff -u -rbaf9e7a385fd374010f076868ddccc77b4da17ce -r8b119f52dad2aeba53f63b9bde9e6176452e834e --- Ringtoets/Common/test/Ringtoets.Common.Data.Test/AssemblyTool/AssemblyToolCategoriesFactoryTest.cs (.../AssemblyToolCategoriesFactoryTest.cs) (revision baf9e7a385fd374010f076868ddccc77b4da17ce) +++ Ringtoets/Common/test/Ringtoets.Common.Data.Test/AssemblyTool/AssemblyToolCategoriesFactoryTest.cs (.../AssemblyToolCategoriesFactoryTest.cs) (revision 8b119f52dad2aeba53f63b9bde9e6176452e834e) @@ -104,6 +104,88 @@ } [Test] + public void CreateFailureMechanismAssemblyCategories_WithInput_SetsInputOnCalculator() + { + // Setup + var random = new Random(11); + double signalingNorm = random.NextDouble(); + double lowerLimitNorm = random.NextDouble(); + double failureMechanismContribution = random.NextDouble(); + double n = random.NextDouble(); + + using (new AssemblyToolCalculatorFactoryConfig()) + { + var calculatorFactory = (TestAssemblyToolCalculatorFactory) AssemblyToolCalculatorFactory.Instance; + AssemblyCategoriesCalculatorStub calculator = calculatorFactory.LastCreatedAssemblyCategoriesCalculator; + + // Call + AssemblyToolCategoriesFactory.CreateFailureMechanismAssemblyCategories(signalingNorm, + lowerLimitNorm, + failureMechanismContribution, + n); + + // Assert + AssemblyCategoriesInput assemblyCategoriesInput = calculator.AssemblyCategoriesInput; + Assert.AreEqual(signalingNorm, assemblyCategoriesInput.SignalingNorm); + Assert.AreEqual(lowerLimitNorm, assemblyCategoriesInput.LowerLimitNorm); + Assert.AreEqual(failureMechanismContribution / 100, assemblyCategoriesInput.FailureMechanismContribution); + Assert.AreEqual(n, assemblyCategoriesInput.N); + } + } + + [Test] + public void CreateFailureMechanismAssemblyCategories_CalculatorRan_ReturnsOutput() + { + // Setup + var random = new Random(11); + double signalingNorm = random.NextDouble(); + double lowerLimitNorm = random.NextDouble(); + double failureMechanismContribution = random.NextDouble(); + double n = random.NextDouble(); + + using (new AssemblyToolCalculatorFactoryConfig()) + { + var calculatorFactory = (TestAssemblyToolCalculatorFactory) AssemblyToolCalculatorFactory.Instance; + AssemblyCategoriesCalculatorStub calculator = calculatorFactory.LastCreatedAssemblyCategoriesCalculator; + + // Call + FailureMechanismAssemblyCategory[] output = AssemblyToolCategoriesFactory.CreateFailureMechanismAssemblyCategories( + signalingNorm, + lowerLimitNorm, + failureMechanismContribution, + n).ToArray(); + + // Assert + FailureMechanismAssemblyCategory[] calculatorOutput = calculator.FailureMechanismCategoriesOutput.ToArray(); + + Assert.AreEqual(calculatorOutput.Length, output.Length); + CollectionAssert.AreEqual(calculatorOutput.Select(co => co.LowerBoundary), output.Select(o => o.LowerBoundary)); + CollectionAssert.AreEqual(calculatorOutput.Select(co => co.UpperBoundary), output.Select(o => o.UpperBoundary)); + CollectionAssert.AreEqual(calculatorOutput.Select(co => co.Group), output.Select(o => o.Group)); + } + } + + [Test] + public void CreateFailureMechanismAssemblyCategories_CalculatorThrowsException_ThrowsAssemblyException() + { + // Setup + using (new AssemblyToolCalculatorFactoryConfig()) + { + var calculatorFactory = (TestAssemblyToolCalculatorFactory) AssemblyToolCalculatorFactory.Instance; + AssemblyCategoriesCalculatorStub calculator = calculatorFactory.LastCreatedAssemblyCategoriesCalculator; + calculator.ThrowExceptionOnCalculate = true; + + // Call + TestDelegate test = () => AssemblyToolCategoriesFactory.CreateFailureMechanismAssemblyCategories(0, 0, 0, 0); + + // Assert + var exception = Assert.Throws(test); + Assert.IsInstanceOf(exception.InnerException); + Assert.AreEqual(exception.InnerException.Message, exception.Message); + } + } + + [Test] public void CreateFailureMechanismSectionAssemblyCategories_WithInput_SetsInputOnCalculator() { // Setup