Index: Ringtoets/Common/src/Ringtoets.Common.Data/AssemblyTool/AssemblyToolCategoriesFactory.cs =================================================================== diff -u -r442f20a0b0fad631a079f542068483de27670a31 -r838bb1c311bac154e5a2c61ebe25e36d44f3fe17 --- Ringtoets/Common/src/Ringtoets.Common.Data/AssemblyTool/AssemblyToolCategoriesFactory.cs (.../AssemblyToolCategoriesFactory.cs) (revision 442f20a0b0fad631a079f542068483de27670a31) +++ Ringtoets/Common/src/Ringtoets.Common.Data/AssemblyTool/AssemblyToolCategoriesFactory.cs (.../AssemblyToolCategoriesFactory.cs) (revision 838bb1c311bac154e5a2c61ebe25e36d44f3fe17) @@ -87,6 +87,36 @@ } /// + /// 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 probability margin factor to + /// calculate with. + /// An with categories of + /// . + /// Thrown when an error occurred while creating the categories. + public static IEnumerable CreateFailureMechanismAssemblyCategories( + double signalingNorm, + double lowerLimitNorm, + double failureProbabilityMarginFactor) + { + IAssemblyCategoriesCalculator calculator = AssemblyToolCalculatorFactory.Instance.CreateAssemblyCategoriesCalculator( + AssemblyToolKernelFactory.Instance); + + try + { + return calculator.CalculateFailureMechanismCategories(new AssemblyCategoriesInput( + 1, failureProbabilityMarginFactor, + 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 -r2a71f68f6907092e21a39aa7a16c25be80ea9523 -r838bb1c311bac154e5a2c61ebe25e36d44f3fe17 --- Ringtoets/Common/test/Ringtoets.Common.Data.Test/AssemblyTool/AssemblyToolCategoriesFactoryTest.cs (.../AssemblyToolCategoriesFactoryTest.cs) (revision 2a71f68f6907092e21a39aa7a16c25be80ea9523) +++ Ringtoets/Common/test/Ringtoets.Common.Data.Test/AssemblyTool/AssemblyToolCategoriesFactoryTest.cs (.../AssemblyToolCategoriesFactoryTest.cs) (revision 838bb1c311bac154e5a2c61ebe25e36d44f3fe17) @@ -104,7 +104,7 @@ } [Test] - public void CreateFailureMechanismAssemblyCategories_WithInput_SetsInputOnCalculator() + public void CreateFailureMechanismAssemblyCategoriesWithN_WithInput_SetsInputOnCalculator() { // Setup var random = new Random(11); @@ -134,7 +134,7 @@ } [Test] - public void CreateFailureMechanismAssemblyCategories_CalculatorRan_ReturnsOutput() + public void CreateFailureMechanismAssemblyCategoriesWithN_CalculatorRan_ReturnsOutput() { // Setup var random = new Random(11); @@ -166,7 +166,7 @@ } [Test] - public void CreateFailureMechanismAssemblyCategories_CalculatorThrowsException_ThrowsAssemblyException() + public void CreateFailureMechanismAssemblyCategoriesWithN_CalculatorThrowsException_ThrowsAssemblyException() { // Setup using (new AssemblyToolCalculatorFactoryConfig()) @@ -186,6 +186,84 @@ } [Test] + public void CreateFailureMechanismAssemblyCategories_WithInput_SetsInputOnCalculator() + { + // Setup + var random = new Random(11); + double signalingNorm = random.NextDouble(); + double lowerLimitNorm = random.NextDouble(); + double failureProbabilityMarginFactor = random.NextDouble(); + + using (new AssemblyToolCalculatorFactoryConfig()) + { + var calculatorFactory = (TestAssemblyToolCalculatorFactory) AssemblyToolCalculatorFactory.Instance; + AssemblyCategoriesCalculatorStub calculator = calculatorFactory.LastCreatedAssemblyCategoriesCalculator; + + // Call + AssemblyToolCategoriesFactory.CreateFailureMechanismAssemblyCategories(signalingNorm, + lowerLimitNorm, + failureProbabilityMarginFactor); + + // Assert + AssemblyCategoriesInput assemblyCategoriesInput = calculator.AssemblyCategoriesInput; + Assert.AreEqual(signalingNorm, assemblyCategoriesInput.SignalingNorm); + Assert.AreEqual(lowerLimitNorm, assemblyCategoriesInput.LowerLimitNorm); + Assert.AreEqual(failureProbabilityMarginFactor , assemblyCategoriesInput.FailureMechanismContribution); + Assert.AreEqual(1, assemblyCategoriesInput.N); + } + } + + [Test] + public void CreateFailureMechanismAssemblyCategories_CalculatorRan_ReturnsOutput() + { + // Setup + var random = new Random(11); + double signalingNorm = random.NextDouble(); + double lowerLimitNorm = random.NextDouble(); + double failureProbabilityMarginFactor = random.NextDouble(); + + using (new AssemblyToolCalculatorFactoryConfig()) + { + var calculatorFactory = (TestAssemblyToolCalculatorFactory) AssemblyToolCalculatorFactory.Instance; + AssemblyCategoriesCalculatorStub calculator = calculatorFactory.LastCreatedAssemblyCategoriesCalculator; + + // Call + FailureMechanismAssemblyCategory[] output = AssemblyToolCategoriesFactory.CreateFailureMechanismAssemblyCategories( + signalingNorm, + lowerLimitNorm, + failureProbabilityMarginFactor).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); + + // Assert + var exception = Assert.Throws(test); + Assert.IsInstanceOf(exception.InnerException); + Assert.AreEqual(exception.InnerException.Message, exception.Message); + } + } + + [Test] public void CreateFailureMechanismSectionAssemblyCategories_WithInput_SetsInputOnCalculator() { // Setup