Index: Ringtoets/AssemblyTool/src/Ringtoets.AssemblyTool.KernelWrapper/Calculators/Assembly/FailureMechanismSectionAssemblyCalculator.cs =================================================================== diff -u -r61e0b1bf1351eabb70eccd3fafeb61ade378f44c -r252f58ad802dcc3c86e6e872b6fcb9d43b5b8bf0 --- Ringtoets/AssemblyTool/src/Ringtoets.AssemblyTool.KernelWrapper/Calculators/Assembly/FailureMechanismSectionAssemblyCalculator.cs (.../FailureMechanismSectionAssemblyCalculator.cs) (revision 61e0b1bf1351eabb70eccd3fafeb61ade378f44c) +++ Ringtoets/AssemblyTool/src/Ringtoets.AssemblyTool.KernelWrapper/Calculators/Assembly/FailureMechanismSectionAssemblyCalculator.cs (.../FailureMechanismSectionAssemblyCalculator.cs) (revision 252f58ad802dcc3c86e6e872b6fcb9d43b5b8bf0) @@ -360,30 +360,66 @@ #region Combined Assembly + public FailureMechanismSectionAssembly AssembleCombined(FailureMechanismSectionAssembly simpleAssembly) + { + try + { + IFailureMechanismSectionAssemblyCalculatorKernel kernel = factory.CreateFailureMechanismSectionAssemblyKernel(); + var output = (FmSectionAssemblyDirectResult) kernel.TranslateAssessmentResultWbi0A1( + FailureMechanismSectionAssemblyCalculatorInputCreator.CreateFailureMechanismSectionAssemblyDirectResult(simpleAssembly), + null, + null); + + 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 FailureMechanismSectionAssembly AssembleCombined(FailureMechanismSectionAssembly simpleAssembly, FailureMechanismSectionAssembly detailedAssembly, FailureMechanismSectionAssembly tailorMadeAssembly) { try { + IFailureMechanismSectionAssemblyCalculatorKernel kernel = factory.CreateFailureMechanismSectionAssemblyKernel(); + var output = (FmSectionAssemblyDirectResult) kernel.TranslateAssessmentResultWbi0A1( + FailureMechanismSectionAssemblyCalculatorInputCreator.CreateFailureMechanismSectionAssemblyDirectResult(simpleAssembly), + FailureMechanismSectionAssemblyCalculatorInputCreator.CreateFailureMechanismSectionAssemblyDirectResult(detailedAssembly), + FailureMechanismSectionAssemblyCalculatorInputCreator.CreateFailureMechanismSectionAssemblyDirectResult(tailorMadeAssembly)); + + 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 AssembleCombined(FailureMechanismSectionAssemblyCategoryGroup simpleAssembly) + { + try + { FmSectionAssemblyDirectResult simpleAssemblyResult = FailureMechanismSectionAssemblyCalculatorInputCreator.CreateFailureMechanismSectionAssemblyDirectResult(simpleAssembly); - FmSectionAssemblyDirectResult detailedAssemblyResult = null; - FmSectionAssemblyDirectResult tailorMadeAssemblyResult = null; - if (simpleAssemblyResult.Result != EFmSectionCategory.NotApplicable && simpleAssemblyResult.Result != EFmSectionCategory.Iv) - { - detailedAssemblyResult = FailureMechanismSectionAssemblyCalculatorInputCreator.CreateFailureMechanismSectionAssemblyDirectResult(detailedAssembly); - tailorMadeAssemblyResult = FailureMechanismSectionAssemblyCalculatorInputCreator.CreateFailureMechanismSectionAssemblyDirectResult(tailorMadeAssembly); - } - IFailureMechanismSectionAssemblyCalculatorKernel kernel = factory.CreateFailureMechanismSectionAssemblyKernel(); var output = (FmSectionAssemblyDirectResult) kernel.TranslateAssessmentResultWbi0A1( simpleAssemblyResult, - detailedAssemblyResult, - tailorMadeAssemblyResult); + null, + null); - return FailureMechanismSectionAssemblyCreator.Create(output); + return FailureMechanismSectionAssemblyCreator.CreateFailureMechanismSectionAssemblyCategoryGroup(output.Result); } catch (AssemblyException e) { Index: Ringtoets/AssemblyTool/src/Ringtoets.AssemblyTool.KernelWrapper/Calculators/Assembly/IFailureMechanismSectionAssemblyCalculator.cs =================================================================== diff -u -r5054dd8dca09c2c282b4c7aaccd4214c18413cd1 -r252f58ad802dcc3c86e6e872b6fcb9d43b5b8bf0 --- Ringtoets/AssemblyTool/src/Ringtoets.AssemblyTool.KernelWrapper/Calculators/Assembly/IFailureMechanismSectionAssemblyCalculator.cs (.../IFailureMechanismSectionAssemblyCalculator.cs) (revision 5054dd8dca09c2c282b4c7aaccd4214c18413cd1) +++ Ringtoets/AssemblyTool/src/Ringtoets.AssemblyTool.KernelWrapper/Calculators/Assembly/IFailureMechanismSectionAssemblyCalculator.cs (.../IFailureMechanismSectionAssemblyCalculator.cs) (revision 252f58ad802dcc3c86e6e872b6fcb9d43b5b8bf0) @@ -178,6 +178,15 @@ FailureMechanismSectionAssemblyCategoryGroup AssembleTailorMadeAssessment(TailorMadeAssessmentCategoryGroupResultType tailorMadeAssessmentResult); /// + /// Assembles the combined assembly based on the given . + /// + /// The simple assembly. + /// A . + /// Thrown when + /// an error occurs while assembling. + FailureMechanismSectionAssembly AssembleCombined(FailureMechanismSectionAssembly simpleAssembly); + + /// /// Assembles the combined assembly based on the input parameters. /// /// The simple assembly. @@ -191,6 +200,15 @@ FailureMechanismSectionAssembly tailorMadeAssembly); /// + /// Assembles the combined assembly based on the given . + /// + /// The simple assembly. + /// A . + /// Thrown when + /// an error occurs while assembling. + FailureMechanismSectionAssemblyCategoryGroup AssembleCombined(FailureMechanismSectionAssemblyCategoryGroup simpleAssembly); + + /// /// Assembles the combined assembly based on the input parameters. /// /// The simple assembly. Index: Ringtoets/AssemblyTool/test/Ringtoets.AssemblyTool.KernelWrapper.Test/Calculators/Assembly/FailureMechanismSectionAssemblyCalculatorTest.cs =================================================================== diff -u -rea237aa9ec7893e681cfc3e2aa0cb94c2e866ee1 -r252f58ad802dcc3c86e6e872b6fcb9d43b5b8bf0 --- Ringtoets/AssemblyTool/test/Ringtoets.AssemblyTool.KernelWrapper.Test/Calculators/Assembly/FailureMechanismSectionAssemblyCalculatorTest.cs (.../FailureMechanismSectionAssemblyCalculatorTest.cs) (revision ea237aa9ec7893e681cfc3e2aa0cb94c2e866ee1) +++ Ringtoets/AssemblyTool/test/Ringtoets.AssemblyTool.KernelWrapper.Test/Calculators/Assembly/FailureMechanismSectionAssemblyCalculatorTest.cs (.../FailureMechanismSectionAssemblyCalculatorTest.cs) (revision 252f58ad802dcc3c86e6e872b6fcb9d43b5b8bf0) @@ -1991,7 +1991,7 @@ #region Combined Assembly [Test] - public void AssembleCombinedWithProbabilities_WithInvalidEnumInput_ThrowFailureMechanismSectionAssemblyCalculatorException() + public void AssembleCombinedWithProbabilitiesAndSimpleAssemblyOnly_WithInvalidEnumInput_ThrowFailureMechanismSectionAssemblyCalculatorException() { // Setup var random = new Random(39); @@ -2003,9 +2003,7 @@ // Call TestDelegate test = () => calculator.AssembleCombined( - new FailureMechanismSectionAssembly(random.NextDouble(), (FailureMechanismSectionAssemblyCategoryGroup) 99), - new FailureMechanismSectionAssembly(random.NextDouble(), random.NextEnumValue()), - new FailureMechanismSectionAssembly(random.NextDouble(), random.NextEnumValue())); + new FailureMechanismSectionAssembly(random.NextDouble(), (FailureMechanismSectionAssemblyCategoryGroup) 99)); // Assert var exception = Assert.Throws(test); @@ -2015,13 +2013,11 @@ } [Test] - public void AssembleCombinedWithProbabilities_WithValidInput_InputCorrectlySetToKernel() + public void AssembleCombinedWithProbabilitiesAndSimpleAssemblyOnly_WithValidInput_InputCorrectlySetToKernel() { // Setup var random = new Random(39); var simpleAssembly = new FailureMechanismSectionAssembly(random.NextDouble(), FailureMechanismSectionAssemblyCategoryGroup.None); - var detailedAssembly = new FailureMechanismSectionAssembly(random.NextDouble(), random.NextEnumValue()); - var tailorMadeAssembly = new FailureMechanismSectionAssembly(random.NextDouble(), random.NextEnumValue()); using (new AssemblyToolKernelFactoryConfig()) { @@ -2033,24 +2029,148 @@ var calculator = new FailureMechanismSectionAssemblyCalculator(factory); // Call - calculator.AssembleCombined(simpleAssembly, detailedAssembly, tailorMadeAssembly); + calculator.AssembleCombined(simpleAssembly); // Assert AssertAssembly(simpleAssembly, kernel.SimpleAssessmentResultInput); - AssertAssembly(detailedAssembly, kernel.DetailedAssessmentResultInput); - AssertAssembly(tailorMadeAssembly, kernel.TailorMadeAssessmentResultInput); + Assert.IsNull(kernel.DetailedAssessmentResultInput); + Assert.IsNull(kernel.TailorMadeAssessmentResultInput); } } [Test] - [TestCase(FailureMechanismSectionAssemblyCategoryGroup.NotApplicable)] - [TestCase(FailureMechanismSectionAssemblyCategoryGroup.Iv)] - public void AssembleCombinedWithProbabilities_WithSimpleAssemblyNotApplicableOrCategoryIv_InputCorrectlySetToKernel( - FailureMechanismSectionAssemblyCategoryGroup category) + public void AssembleCombinedWithProbabilitiesAndSimpleAssemblyOnly_KernelWithCompleteOutput_OutputCorrectlyReturnedByCalculator() { // Setup var random = new Random(39); - var simpleAssembly = new FailureMechanismSectionAssembly(double.NaN, category); + + using (new AssemblyToolKernelFactoryConfig()) + { + var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance; + FailureMechanismSectionAssemblyKernelStub kernel = factory.LastCreatedFailureMechanismSectionAssemblyKernel; + kernel.FailureMechanismSectionDirectResult = new FmSectionAssemblyDirectResult(random.NextEnumValue(), + random.NextDouble()); + + var calculator = new FailureMechanismSectionAssemblyCalculator(factory); + + // Call + FailureMechanismSectionAssembly assembly = calculator.AssembleCombined( + new FailureMechanismSectionAssembly(random.NextDouble(), random.NextEnumValue())); + + // Assert + AssertCalculatorOutput(kernel.FailureMechanismSectionDirectResult, assembly); + } + } + + [Test] + public void AssembleCombinedWithProbabilitiesAndSimpleAssemblyOnly_KernelWithInvalidOutput_ThrowFailureMechanismSectionAssemblyCalculatorException() + { + // Setup + var random = new Random(39); + + using (new AssemblyToolKernelFactoryConfig()) + { + var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance; + FailureMechanismSectionAssemblyKernelStub kernel = factory.LastCreatedFailureMechanismSectionAssemblyKernel; + kernel.FailureMechanismSectionDirectResult = new FmSectionAssemblyDirectResult((EFmSectionCategory) 99, + random.NextDouble()); + + var calculator = new FailureMechanismSectionAssemblyCalculator(factory); + + // Call + TestDelegate test = () => calculator.AssembleCombined( + new FailureMechanismSectionAssembly(random.NextDouble(), random.NextEnumValue())); + + // Assert + var exception = Assert.Throws(test); + Assert.IsInstanceOf(exception.InnerException); + Assert.AreEqual(AssemblyErrorMessageCreator.CreateGenericErrorMessage(), exception.Message); + } + } + + [Test] + public void AssembleCombinedWithProbabilitiesAndSimpleAssemblyOnly_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())); + + // Assert + var exception = Assert.Throws(test); + Assert.IsNotNull(exception.InnerException); + Assert.AreEqual(AssemblyErrorMessageCreator.CreateGenericErrorMessage(), exception.Message); + } + } + + [Test] + public void AssembleCombinedWithProbabilitiesAndSimpleAssemblyOnly_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.AssembleCombined( + new FailureMechanismSectionAssembly(random.NextDouble(), random.NextEnumValue())); + + // 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 AssembleCombinedWithProbabilities_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.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); + Assert.IsInstanceOf(exception.InnerException); + Assert.AreEqual(AssemblyErrorMessageCreator.CreateGenericErrorMessage(), exception.Message); + } + } + + [Test] + public void AssembleCombinedWithProbabilities_WithValidInput_InputCorrectlySetToKernel() + { + // Setup + var random = new Random(39); + var simpleAssembly = new FailureMechanismSectionAssembly(random.NextDouble(), FailureMechanismSectionAssemblyCategoryGroup.None); var detailedAssembly = new FailureMechanismSectionAssembly(random.NextDouble(), random.NextEnumValue()); var tailorMadeAssembly = new FailureMechanismSectionAssembly(random.NextDouble(), random.NextEnumValue()); @@ -2068,8 +2188,8 @@ // Assert AssertAssembly(simpleAssembly, kernel.SimpleAssessmentResultInput); - Assert.IsNull(kernel.DetailedAssessmentResultInput); - Assert.IsNull(kernel.TailorMadeAssessmentResultInput); + AssertAssembly(detailedAssembly, kernel.DetailedAssessmentResultInput); + AssertAssembly(tailorMadeAssembly, kernel.TailorMadeAssessmentResultInput); } } @@ -2185,6 +2305,155 @@ } [Test] + public void AssembleCombinedWithSimpleAssembly_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.AssembleCombined((FailureMechanismSectionAssemblyCategoryGroup) 99); + + // Assert + var exception = Assert.Throws(test); + Assert.IsInstanceOf(exception.InnerException); + Assert.AreEqual(AssemblyErrorMessageCreator.CreateGenericErrorMessage(), exception.Message); + } + } + + [Test] + public void AssembleCombinedWithSimpleAssembly_WithValidInput_InputCorrectlySetToKernel() + { + // Setup + var random = new Random(39); + var simpleAssembly = FailureMechanismSectionAssemblyCategoryGroup.None; + + using (new AssemblyToolKernelFactoryConfig()) + { + var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance; + FailureMechanismSectionAssemblyKernelStub kernel = factory.LastCreatedFailureMechanismSectionAssemblyKernel; + kernel.FailureMechanismSectionDirectResult = new FmSectionAssemblyDirectResult(random.NextEnumValue()); + + var calculator = new FailureMechanismSectionAssemblyCalculator(factory); + + // Call + calculator.AssembleCombined(simpleAssembly); + + // Assert + Assert.AreEqual(simpleAssembly, AssemblyCategoryAssert.GetFailureMechanismSectionCategoryGroup(kernel.SimpleAssessmentResultInput.Result)); + Assert.IsNull(kernel.DetailedAssessmentResultInput); + Assert.IsNull(kernel.TailorMadeAssessmentResultInput); + } + } + + [Test] + public void AssembleCombinedWithSimpleAssembly_KernelWithCompleteOutput_OutputCorrectlyReturnedByCalculator() + { + // Setup + var random = new Random(39); + + using (new AssemblyToolKernelFactoryConfig()) + { + var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance; + FailureMechanismSectionAssemblyKernelStub kernel = factory.LastCreatedFailureMechanismSectionAssemblyKernel; + kernel.FailureMechanismSectionDirectResult = new FmSectionAssemblyDirectResult(random.NextEnumValue()); + + var calculator = new FailureMechanismSectionAssemblyCalculator(factory); + + // Call + FailureMechanismSectionAssemblyCategoryGroup group = calculator.AssembleCombined( + random.NextEnumValue()); + + // Assert + FailureMechanismSectionAssemblyCategoryGroup expectedResult = AssemblyCategoryAssert.GetFailureMechanismSectionCategoryGroup( + kernel.FailureMechanismSectionDirectResult.Result); + Assert.AreEqual(expectedResult, group); + } + } + + [Test] + public void AssembleCombinedWithSimpleAssembly_KernelWithInvalidOutput_ThrowFailureMechanismSectionAssemblyCalculatorException() + { + // Setup + var random = new Random(39); + + using (new AssemblyToolKernelFactoryConfig()) + { + var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance; + FailureMechanismSectionAssemblyKernelStub kernel = factory.LastCreatedFailureMechanismSectionAssemblyKernel; + kernel.FailureMechanismSectionDirectResult = new FmSectionAssemblyDirectResult((EFmSectionCategory) 99); + + var calculator = new FailureMechanismSectionAssemblyCalculator(factory); + + // Call + TestDelegate test = () => calculator.AssembleCombined( + random.NextEnumValue()); + + // Assert + var exception = Assert.Throws(test); + Assert.IsInstanceOf(exception.InnerException); + Assert.AreEqual(AssemblyErrorMessageCreator.CreateGenericErrorMessage(), exception.Message); + } + } + + [Test] + public void AssembleCombinedWithSimpleAssembly_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( + random.NextEnumValue()); + + // Assert + var exception = Assert.Throws(test); + Assert.IsNotNull(exception.InnerException); + Assert.AreEqual(AssemblyErrorMessageCreator.CreateGenericErrorMessage(), exception.Message); + } + } + + [Test] + public void AssembleCombinedWithSimpleAssembly_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.AssembleCombined( + random.NextEnumValue()); + + // 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 AssembleCombined_WithInvalidEnumInput_ThrowFailureMechanismSectionAssemblyCalculatorException() { // Setup