Index: Ringtoets/Integration/src/Ringtoets.Integration.Data/Assembly/CombinedAssemblyFailureMechanismInputFactory.cs =================================================================== diff -u -r260eeac10d6b7fc5fe49c11a8659283a00d5e603 -r1046921a24c7d047235317c67656befadef30cf9 --- Ringtoets/Integration/src/Ringtoets.Integration.Data/Assembly/CombinedAssemblyFailureMechanismInputFactory.cs (.../CombinedAssemblyFailureMechanismInputFactory.cs) (revision 260eeac10d6b7fc5fe49c11a8659283a00d5e603) +++ Ringtoets/Integration/src/Ringtoets.Integration.Data/Assembly/CombinedAssemblyFailureMechanismInputFactory.cs (.../CombinedAssemblyFailureMechanismInputFactory.cs) (revision 1046921a24c7d047235317c67656befadef30cf9) @@ -21,8 +21,13 @@ using System; using System.Collections.Generic; +using System.Linq; +using Core.Common.Base.Geometry; using Ringtoets.AssemblyTool.Data; +using Ringtoets.Common.Data.AssessmentSection; using Ringtoets.Common.Data.FailureMechanism; +using Ringtoets.Common.Data.Probability; +using Ringtoets.Piping.Data; namespace Ringtoets.Integration.Data.Assembly { @@ -51,7 +56,61 @@ throw new ArgumentNullException(nameof(failureMechanisms)); } - return new List(); + var inputs = new List(); + PipingFailureMechanism pipingFailureMechanism = assessmentSection.Piping; + + if (failureMechanisms.Contains(pipingFailureMechanism)) + { + inputs.Add(CreateCombinedAssemblyFailureMechanismInputItem(fm => fm.PipingProbabilityAssessmentInput.GetN( + fm.PipingProbabilityAssessmentInput.SectionLength), + pipingFailureMechanism, + CreateCombinedSections(pipingFailureMechanism.SectionResults, + assessmentSection, PipingAssemblyFunc) + .ToArray())); + } + + return inputs; } + + private static Func PipingAssemblyFunc + { + get + { + return (sectionResult, assessmentSection) => PipingFailureMechanismAssemblyFactory.GetSectionAssemblyCategoryGroup( + sectionResult, assessmentSection.Piping, assessmentSection); + } + } + + private static CombinedAssemblyFailureMechanismInput CreateCombinedAssemblyFailureMechanismInputItem( + Func getLengthEffectFunc, TFailureMechanism failureMechanism, + IEnumerable combinedAssemblyFailureMechanismSections) + where TFailureMechanism : IFailureMechanism + { + return new CombinedAssemblyFailureMechanismInput(getLengthEffectFunc(failureMechanism), + failureMechanism.Contribution, + combinedAssemblyFailureMechanismSections); + } + + private static IEnumerable CreateCombinedSections( + IEnumerable sectionResults, + AssessmentSection assessmentSection, + Func getAssemblyFunc) + where TFailureMechanismSectionResult : FailureMechanismSectionResult + { + double totalSectionsLength = 0; + + var combinedSections = new List(); + foreach (TFailureMechanismSectionResult sectionResult in sectionResults) + { + double endPoint = sectionResult.Section.Length + totalSectionsLength; + combinedSections.Add(new CombinedAssemblyFailureMechanismSection(totalSectionsLength, + endPoint, + getAssemblyFunc(sectionResult, assessmentSection))); + + totalSectionsLength = endPoint; + } + + return combinedSections.ToArray(); + } } } \ No newline at end of file Index: Ringtoets/Integration/test/Ringtoets.Integration.Data.Test/Assembly/CombinedAssemblyFailureMechanismInputFactoryTest.cs =================================================================== diff -u -r260eeac10d6b7fc5fe49c11a8659283a00d5e603 -r1046921a24c7d047235317c67656befadef30cf9 --- Ringtoets/Integration/test/Ringtoets.Integration.Data.Test/Assembly/CombinedAssemblyFailureMechanismInputFactoryTest.cs (.../CombinedAssemblyFailureMechanismInputFactoryTest.cs) (revision 260eeac10d6b7fc5fe49c11a8659283a00d5e603) +++ Ringtoets/Integration/test/Ringtoets.Integration.Data.Test/Assembly/CombinedAssemblyFailureMechanismInputFactoryTest.cs (.../CombinedAssemblyFailureMechanismInputFactoryTest.cs) (revision 1046921a24c7d047235317c67656befadef30cf9) @@ -20,14 +20,17 @@ // All rights reserved. using System; -using System.Collections.Generic; using System.Linq; using Core.Common.TestUtil; using NUnit.Framework; using Ringtoets.AssemblyTool.Data; +using Ringtoets.AssemblyTool.KernelWrapper.TestUtil.Calculators; using Ringtoets.Common.Data.AssessmentSection; using Ringtoets.Common.Data.FailureMechanism; +using Ringtoets.Common.Data.Probability; using Ringtoets.Integration.Data.Assembly; +using Ringtoets.Integration.TestUtil; +using Ringtoets.Piping.Data; namespace Ringtoets.Integration.Data.Test.Assembly { @@ -60,16 +63,52 @@ } [Test] - public void CreateInput_Always_ReturnsEmptyCollection() + public void CreateInput_WithAllFailureMechanismsRelevant_ReturnsInputCollection() { // Setup - var assessmentSection = new AssessmentSection(new Random(21).NextEnumValue()); + AssessmentSection assessmentSection = TestDataGenerator.GetAssessmensectionWithAllFailureMechanismSectionsAndResults( + new Random(21).NextEnumValue()); - // Call - IEnumerable inputs = CombinedAssemblyFailureMechanismInputFactory.CreateInput(assessmentSection, Enumerable.Empty()); + IFailureMechanism[] failureMechanisms = assessmentSection.GetFailureMechanisms().ToArray(); - // Assert - CollectionAssert.IsEmpty(inputs); + using (new AssemblyToolCalculatorFactoryConfig()) + { + // Call + CombinedAssemblyFailureMechanismInput[] inputs = CombinedAssemblyFailureMechanismInputFactory.CreateInput( + assessmentSection, failureMechanisms).ToArray(); + + // Assert + Assert.AreEqual(1, inputs.Length); + AssertPipingInput(assessmentSection.Piping, inputs[0]); + } } + + private static void AssertPipingInput(PipingFailureMechanism pipingFailureMechanism, CombinedAssemblyFailureMechanismInput input) + { + double expectedN = pipingFailureMechanism.PipingProbabilityAssessmentInput.GetN(pipingFailureMechanism.PipingProbabilityAssessmentInput.SectionLength); + Assert.AreEqual(expectedN, input.N); + Assert.AreEqual(pipingFailureMechanism.Contribution, input.FailureMechanismContribution); + + AssertSections(pipingFailureMechanism.SectionResults.ToArray(), input.Sections.ToArray()); + } + + private static void AssertSections(T[] originalSectionResults, CombinedAssemblyFailureMechanismSection[] inputSections) + where T : FailureMechanismSectionResult + { + Assert.AreEqual(originalSectionResults.Length, inputSections.Length); + + double expectedSectionStart = 0; + + for (var i = 0; i < originalSectionResults.Length; i++) + { + var expectedSectionEnd = expectedSectionStart + originalSectionResults[i].Section.Length; + + Assert.AreEqual(expectedSectionStart, inputSections[i].SectionStart); + Assert.AreEqual(expectedSectionEnd, inputSections[i].SectionEnd); + Assert.AreEqual(FailureMechanismSectionAssemblyCategoryGroup.VIv, inputSections[i].CategoryGroup); + + expectedSectionStart = expectedSectionEnd; + } + } } } \ No newline at end of file Index: Ringtoets/Integration/test/Ringtoets.Integration.Data.Test/Ringtoets.Integration.Data.Test.csproj =================================================================== diff -u -r260eeac10d6b7fc5fe49c11a8659283a00d5e603 -r1046921a24c7d047235317c67656befadef30cf9 --- Ringtoets/Integration/test/Ringtoets.Integration.Data.Test/Ringtoets.Integration.Data.Test.csproj (.../Ringtoets.Integration.Data.Test.csproj) (revision 260eeac10d6b7fc5fe49c11a8659283a00d5e603) +++ Ringtoets/Integration/test/Ringtoets.Integration.Data.Test/Ringtoets.Integration.Data.Test.csproj (.../Ringtoets.Integration.Data.Test.csproj) (revision 1046921a24c7d047235317c67656befadef30cf9) @@ -132,6 +132,10 @@ {11f1f874-45af-43e4-8ae5-15a5c9593e28} Ringtoets.Integration.Data + + {174BA68D-6176-4AC5-8DFD-98CDD2C4D971} + Ringtoets.Integration.TestUtil +