public void TranslateFailureMechanismResultsToCommonSectionsWbi3B1ThrowsOnIncorrectListType()
        {
            var resultSectionsList = new FailureMechanismSectionList(new[]
            {
                new FailureMechanismSection(0.0, 5.0),
                new FailureMechanismSection(5.0, 10.0)
            });

            var commonSectionsList = new FailureMechanismSectionList(new[]
            {
                new FailureMechanismSection(0.0, 2.5),
                new FailureMechanismSection(2.5, 5.0),
                new FailureMechanismSection(5.0, 7.5),
                new FailureMechanismSection(7.5, 10.0)
            });

            try
            {
                var commonSectionsWithResults =
                    assembler.TranslateFailureMechanismResultsToCommonSectionsWbi3B1(resultSectionsList,
                                                                                     commonSectionsList);
            }
            catch (AssemblyException exception)
            {
                Assert.IsNotNull(exception.Errors);
                Assert.AreEqual(1, exception.Errors.Count());
                Assert.AreEqual(EAssemblyErrors.SectionsWithoutCategory, exception.Errors.First().ErrorCode);
                Assert.Pass();
            }

            Assert.Fail("Expected exception did not occur");
        }
        public void TranslateFailureMechanismResultsToCommonSectionsWbi3B1ThrowsOnInvalidSectionLengthsEmpty()
        {
            var list = new FailureMechanismSectionList(new[]
            {
                new FailureMechanismSectionWithCategory(0.0, 2.85, EInterpretationCategory.III)
            });

            var longList = new FailureMechanismSectionList(new FailureMechanismSection[]
            {
                new FailureMechanismSectionWithCategory(0.0, 10.0, EInterpretationCategory.III)
            });

            try
            {
                var commonSectionsWithResults =
                    assembler.TranslateFailureMechanismResultsToCommonSectionsWbi3B1(longList, list);
            }
            catch (AssemblyException exception)
            {
                Assert.IsNotNull(exception.Errors);
                Assert.AreEqual(1, exception.Errors.Count());
                Assert.AreEqual(EAssemblyErrors.CommonFailureMechanismSectionsInvalid,
                                exception.Errors.First().ErrorCode);
                Assert.Pass();
            }

            Assert.Fail("Expected exception did not occur");
        }
        public void FindGreatestCommonDenominatorSectionsWbi3A1ThrowsOnInvalidAssessmentLength(double assessmentLength,
                                                                                               EAssemblyErrors expectedError)
        {
            var list1 = new FailureMechanismSectionList(new[]
            {
                new FailureMechanismSection(0.0, 10.0),
                new FailureMechanismSection(10.0, 20.0),
                new FailureMechanismSection(20.0, 30.0)
            });

            try
            {
                var commonSections =
                    assembler.FindGreatestCommonDenominatorSectionsWbi3A1(new[]
                {
                    list1
                },
                                                                          assessmentLength);
            }
            catch (AssemblyException exception)
            {
                Assert.IsNotNull(exception.Errors);
                Assert.AreEqual(1, exception.Errors.Count());
                Assert.AreEqual(expectedError, exception.Errors.First().ErrorCode);
                Assert.Pass();
            }

            Assert.Fail("Expected exception did not occur");
        }
        public void DetermineCombinedResultPerCommonSectionThrowsOnInvalidSections1()
        {
            var sectionsList1 = new FailureMechanismSectionList(new[]
            {
                new FailureMechanismSectionWithCategory(0.0, 1.0, EInterpretationCategory.III),
                new FailureMechanismSectionWithCategory(1.0, 2.0, EInterpretationCategory.III)
            });

            var sectionsList2 = new FailureMechanismSectionList(new[]
            {
                new FailureMechanismSectionWithCategory(0.0, 1.0, EInterpretationCategory.III)
            });

            try
            {
                var commonSectionsWithResults =
                    assembler.DetermineCombinedResultPerCommonSectionWbi3C1(new[]
                {
                    sectionsList1,
                    sectionsList2
                }, false);
            }
            catch (AssemblyException exception)
            {
                Assert.IsNotNull(exception.Errors);
                Assert.AreEqual(1, exception.Errors.Count());
                Assert.AreEqual(EAssemblyErrors.CommonFailureMechanismSectionsInvalid,
                                exception.Errors.First().ErrorCode);
                Assert.Pass();
            }

            Assert.Fail("Expected exception did not occur");
        }
        /// <inheritdoc />
        public AssemblyResult AssembleCommonFailureMechanismSections(
            IEnumerable <FailureMechanismSectionList> failureMechanismSectionLists, double assessmentSectionLength,
            bool partialAssembly)
        {
            FailureMechanismSectionList[] failureMechanismSections = failureMechanismSectionLists.ToArray();

            // step 1: create greatest common denominator list of the failure mechanism sections in the list.
            FailureMechanismSectionList commonSections =
                FindGreatestCommonDenominatorSectionsWbi3A1(failureMechanismSections, assessmentSectionLength);

            // step 2: determine assessment results per section for each failure mechanism.
            var failureMechanismResults = new List <FailureMechanismSectionList>();

            foreach (FailureMechanismSectionList failureMechanismSectionList in failureMechanismSections)
            {
                failureMechanismResults.Add(
                    TranslateFailureMechanismResultsToCommonSectionsWbi3B1(failureMechanismSectionList,
                                                                           commonSections));
            }

            // step 3: determine combined result per common section
            var combinedSectionResult =
                DetermineCombinedResultPerCommonSectionWbi3C1(failureMechanismResults, partialAssembly);

            return(new AssemblyResult(failureMechanismResults, combinedSectionResult));
        }
        /// <inheritdoc />
        public FailureMechanismSectionList TranslateFailureMechanismResultsToCommonSectionsWbi3B1(
            FailureMechanismSectionList failureMechanismSectionList,
            FailureMechanismSectionList commonSections)
        {
            CheckResultsToCommonSectionsInput(commonSections, failureMechanismSectionList);

            var commonSectionsArray = commonSections.Sections as FailureMechanismSection[] ??
                                      commonSections.Sections.ToArray();

            var resultsToCommonSections = new List <FailureMechanismSection>();

            foreach (var commonSection in commonSectionsArray)
            {
                var section = failureMechanismSectionList.GetSectionAtPoint(
                    commonSection.SectionEnd - (commonSection.SectionEnd - commonSection.SectionStart) / 2.0);

                var sectionWithCategory = section as FailureMechanismSectionWithCategory;
                if (sectionWithCategory != null)
                {
                    resultsToCommonSections.Add(new FailureMechanismSectionWithCategory(
                                                    commonSection.SectionStart,
                                                    commonSection.SectionEnd,
                                                    sectionWithCategory.Category));
                }
            }

            return(new FailureMechanismSectionList(resultsToCommonSections));
        }
        public void TranslateFailureMechanismResultsToCommonSectionsWbi3B1WithRoundingTranslatesCorrectly()
        {
            var resultSectionsList = new FailureMechanismSectionList(new[]
            {
                new FailureMechanismSectionWithCategory(0.0, 5.0, EInterpretationCategory.III),
                new FailureMechanismSectionWithCategory(5.0, 10.0, EInterpretationCategory.I)
            });
            var commonSectionsList = new FailureMechanismSectionList(new[]
            {
                new FailureMechanismSection(0.0, 2.5),
                new FailureMechanismSection(2.5, 5.0),
                new FailureMechanismSection(5.0, 7.5),
                new FailureMechanismSection(7.5, 10.000000001)
            });
            var commonSectionsWithResults =
                assembler.TranslateFailureMechanismResultsToCommonSectionsWbi3B1(resultSectionsList,
                                                                                 commonSectionsList);

            Assert.IsNotNull(commonSectionsWithResults.Sections);
            Assert.AreEqual(4, commonSectionsWithResults.Sections.Count());
            Assert.AreEqual(EInterpretationCategory.III,
                            ((FailureMechanismSectionWithCategory)commonSectionsWithResults.Sections.ElementAt(0)).Category);
            Assert.AreEqual(EInterpretationCategory.III,
                            ((FailureMechanismSectionWithCategory)commonSectionsWithResults.Sections.ElementAt(1)).Category);
            Assert.AreEqual(EInterpretationCategory.I,
                            ((FailureMechanismSectionWithCategory)commonSectionsWithResults.Sections.ElementAt(2)).Category);
            Assert.AreEqual(EInterpretationCategory.I,
                            ((FailureMechanismSectionWithCategory)commonSectionsWithResults.Sections.ElementAt(3)).Category);
        }
        public void FindGreatestCommonDenominatorSectionsWbi3A1IgnoresSmallSectionBoundaryDifferences()
        {
            var delta = 1e-6;
            var assessmentSectionLength = 30.0;
            var list1 = new FailureMechanismSectionList(new[]
            {
                new FailureMechanismSection(0.0, 10.0),
                new FailureMechanismSection(10.001, 20.0),
                new FailureMechanismSection(20.0, assessmentSectionLength + delta)
            });
            var list2 = new FailureMechanismSectionList(new[]
            {
                new FailureMechanismSection(0.0, 5.0),
                new FailureMechanismSection(5.0, 25.0),
                new FailureMechanismSection(25.0, assessmentSectionLength)
            });
            var list3 = new FailureMechanismSectionList(new[]
            {
                new FailureMechanismSection(0.0, 5.001),
                new FailureMechanismSection(5.001, 15.0),
                new FailureMechanismSection(15.0, 28.0),
                new FailureMechanismSection(28.0, assessmentSectionLength)
            });

            var commonSections =
                assembler.FindGreatestCommonDenominatorSectionsWbi3A1(new[]
            {
                list1,
                list2,
                list3
            },
                                                                      assessmentSectionLength);

            var expectedSectionLimits = new[]
            {
                0.0,
                5.0,
                5.001,
                10.0,
                15.0,
                20.0,
                25.0,
                28.0,
                assessmentSectionLength
            };

            var calculatedCommonSections = commonSections.Sections.ToArray();

            Assert.AreEqual(expectedSectionLimits.Length - 1, calculatedCommonSections.Length);
            for (int i = 0; i < calculatedCommonSections.Length; i++)
            {
                Assert.AreEqual(expectedSectionLimits[i], calculatedCommonSections[i].SectionStart);
                Assert.AreEqual(expectedSectionLimits[i + 1], calculatedCommonSections[i].SectionEnd);
            }
        }
        /// <summary>
        /// Asserts whether <paramref name="actual"/> is equal to <paramref name="original"/>.
        /// </summary>
        /// <param name="original">The original collection of <see cref="CombinedAssemblyFailureMechanismSection"/>
        /// collections.</param>
        /// <param name="actual">The actual collection of <see cref="FailureMechanismSectionList"/>.</param>
        /// <exception cref="AssertionException">Thrown when <paramref name="actual"/>
        /// is not equal to <paramref name="original"/>.</exception>
        public static void AssertCombinedFailureMechanismInput(IEnumerable <CombinedAssemblyFailureMechanismSection[]> original, IEnumerable <FailureMechanismSectionList> actual)
        {
            Assert.AreEqual(original.Count(), actual.Count());

            for (var i = 0; i < original.Count(); i++)
            {
                CombinedAssemblyFailureMechanismSection[] sections = original.ElementAt(i);
                FailureMechanismSectionList sectionList            = actual.ElementAt(i);
                AssertSections(sections, sectionList.Sections);
            }
        }
        private static FailureMechanismSectionList CreateFailureMechanismSectionListForStep3(
            List <FailureMechanismSection> failureMechanismSectionResults)
        {
            var failureMechanismSectionList = new FailureMechanismSectionList(failureMechanismSectionResults.Select(failureMechanismSection =>
                                                                                                                    new FailureMechanismSectionWithCategory(
                                                                                                                        failureMechanismSection.SectionStart,
                                                                                                                        failureMechanismSection.SectionEnd,
                                                                                                                        failureMechanismSection.Result.InterpretationCategory)));

            return(failureMechanismSectionList);
        }
        public void DetermineCombinedResultPerCommonSectionReturnsCorrectResults()
        {
            var sectionsList1 = new FailureMechanismSectionList(new[]
            {
                new FailureMechanismSectionWithCategory(0.0, 0.5, EInterpretationCategory.NotRelevant),
                new FailureMechanismSectionWithCategory(0.5, 1.0, EInterpretationCategory.III),
                new FailureMechanismSectionWithCategory(1.0, 1.5, EInterpretationCategory.Zero),
                new FailureMechanismSectionWithCategory(1.5, 2.0, EInterpretationCategory.Gr),
                new FailureMechanismSectionWithCategory(2.0, 2.5, EInterpretationCategory.NotDominant),
                new FailureMechanismSectionWithCategory(2.5, 3.0, EInterpretationCategory.III)
            });

            var sectionsList2 = new FailureMechanismSectionList(new[]
            {
                new FailureMechanismSectionWithCategory(0.0, 0.5, EInterpretationCategory.NotRelevant),
                new FailureMechanismSectionWithCategory(0.5, 1.0, EInterpretationCategory.Zero),
                new FailureMechanismSectionWithCategory(1.0, 1.5, EInterpretationCategory.IMin),
                new FailureMechanismSectionWithCategory(1.5, 2.0, EInterpretationCategory.IIIMin),
                new FailureMechanismSectionWithCategory(2.0, 2.5, EInterpretationCategory.NotRelevant),
                new FailureMechanismSectionWithCategory(2.5, 3.0, EInterpretationCategory.II)
            });

            var sectionsList3 = new FailureMechanismSectionList(new[]
            {
                new FailureMechanismSectionWithCategory(0.0, 0.5, EInterpretationCategory.NotRelevant),
                new FailureMechanismSectionWithCategory(0.5, 1.0, EInterpretationCategory.IIIMin),
                new FailureMechanismSectionWithCategory(1.0, 1.5, EInterpretationCategory.Zero),
                new FailureMechanismSectionWithCategory(1.5, 2.0, EInterpretationCategory.IIIMin),
                new FailureMechanismSectionWithCategory(2.0, 2.5, EInterpretationCategory.NotDominant),
                new FailureMechanismSectionWithCategory(2.5, 3.0, EInterpretationCategory.I)
            });

            var commonSectionsWithResults =
                assembler.DetermineCombinedResultPerCommonSectionWbi3C1(new[]
            {
                sectionsList1,
                sectionsList2,
                sectionsList3
            }, false);

            var expectedResults = new List <FailureMechanismSectionWithCategory>
            {
                new FailureMechanismSectionWithCategory(0.0, 0.5, EInterpretationCategory.NotRelevant),
                new FailureMechanismSectionWithCategory(0.5, 1.0, EInterpretationCategory.IIIMin),
                new FailureMechanismSectionWithCategory(1.0, 1.5, EInterpretationCategory.IMin),
                new FailureMechanismSectionWithCategory(1.5, 2.0, EInterpretationCategory.Gr),
                new FailureMechanismSectionWithCategory(2.0, 2.5, EInterpretationCategory.NotDominant),
                new FailureMechanismSectionWithCategory(2.5, 3.0, EInterpretationCategory.I)
            };

            AssertCombinedResultsList(expectedResults, commonSectionsWithResults);
        }
        public void FindGreatestCommonDenominatorSectionsWbi3A1ReturnsCorrectSections()
        {
            const double assessmentSectionLength = 30.0;
            var          list1 = new FailureMechanismSectionList(new[]
            {
                new FailureMechanismSection(0.0, 10.0),
                new FailureMechanismSection(10.0, 20.0),
                new FailureMechanismSection(20.0, assessmentSectionLength)
            });
            var list2 = new FailureMechanismSectionList(new[]
            {
                new FailureMechanismSection(0.0, 5.0),
                new FailureMechanismSection(5.0, 25.0),
                new FailureMechanismSection(25.0, assessmentSectionLength)
            });
            var list3 = new FailureMechanismSectionList(new[]
            {
                new FailureMechanismSection(0.0, 15.0),
                new FailureMechanismSection(15.0, 28.0),
                new FailureMechanismSection(28.0, assessmentSectionLength)
            });

            var commonSections =
                assembler.FindGreatestCommonDenominatorSectionsWbi3A1(new[]
            {
                list1,
                list2,
                list3
            },
                                                                      assessmentSectionLength);

            var expectedSectionLimits = new[]
            {
                0.0
            }
            .Concat(list1.Sections.Select(r => r.SectionEnd).ToArray())
            .Concat(list2.Sections.Select(r => r.SectionEnd).ToArray())
            .Concat(list3.Sections.Select(r => r.SectionEnd).ToArray())
            .Distinct().OrderBy(v => v).ToArray();

            var calculatedCommonSections = commonSections.Sections.ToArray();

            Assert.AreEqual(expectedSectionLimits.Length - 1, calculatedCommonSections.Length);
            for (int i = 0; i < calculatedCommonSections.Length; i++)
            {
                Assert.AreEqual(expectedSectionLimits[i], calculatedCommonSections[i].SectionStart);
                Assert.AreEqual(expectedSectionLimits[i + 1], calculatedCommonSections[i].SectionEnd);
            }
        }
예제 #13
0
        public FailureMechanismSectionList TranslateFailureMechanismResultsToCommonSectionsBoi3B1(
            FailureMechanismSectionList failureMechanismSectionList, FailureMechanismSectionList commonSections)
        {
            ThrowException();

            FailureMechanismSectionList = failureMechanismSectionList;
            CommonSectionsInput         = commonSections;

            CalculatedCommonSectionResults = true;

            return(FailureMechanismResult ?? (FailureMechanismResult = new FailureMechanismSectionList(new[]
            {
                new FailureMechanismSectionWithCategory(0, 1, EInterpretationCategory.II)
            })));
        }
예제 #14
0
        public FailureMechanismSectionList FindGreatestCommonDenominatorSectionsBoi3A1(
            IEnumerable <FailureMechanismSectionList> failureMechanismSectionLists, double assessmentSectionLength)
        {
            ThrowException();

            FailureMechanismSectionLists = failureMechanismSectionLists;
            AssessmentSectionLength      = assessmentSectionLength;

            CalculatedCommonSections = true;

            return(CommonSections ?? (CommonSections = new FailureMechanismSectionList(new[]
            {
                new FailureMechanismSectionWithCategory(0, 1, EInterpretationCategory.I)
            })));
        }
예제 #15
0
        public void GetCategoryOfSectionReturnsCategory()
        {
            var failureMechanismSectionList = new FailureMechanismSectionList(
                new List <FailureMechanismSection>
            {
                new FailureMechanismSectionWithCategory(0, 10, EInterpretationCategory.I),
                new FailureMechanismSectionWithCategory(10, 20, EInterpretationCategory.II)
            });
            var s = failureMechanismSectionList.GetSectionAtPoint(15.0);

            Assert.AreEqual(10, s.SectionStart);
            Assert.AreEqual(20, s.SectionEnd);
            var sectionWithCategory = s as FailureMechanismSectionWithCategory;

            Assert.IsNotNull(sectionWithCategory);
            Assert.AreEqual(EInterpretationCategory.II, sectionWithCategory.Category);
        }
예제 #16
0
        public void GetCategoryOfSectionOutsideOfRange()
        {
            try
            {
                var failureMechanismSectionList = new FailureMechanismSectionList(
                    new List <FailureMechanismSection>
                {
                    new FailureMechanismSectionWithCategory(0, 10, EInterpretationCategory.I),
                    new FailureMechanismSectionWithCategory(10, 20, EInterpretationCategory.I)
                });
                failureMechanismSectionList.GetSectionAtPoint(25.0);
            }
            catch (AssemblyException e)
            {
                CheckException(e, EAssemblyErrors.RequestedPointOutOfRange);
            }

            Assert.Fail("Expected exception was not thrown");
        }
        private static void TestCombinedSectionsFailureMechanismResults(BenchmarkTestInput input,
                                                                        BenchmarkTestResult result, string mechanismName, string mechanismId, bool hasLengthEffect)
        {
            var assembler = new CommonFailureMechanismSectionAssembler();

            var combinedSections            = new FailureMechanismSectionList(input.ExpectedCombinedSectionResult);
            var failureMechanismSectionList = new FailureMechanismSectionList(
                input.ExpectedFailureMechanismsResults.First(fm => fm.MechanismId == mechanismId).Sections
                .OfType <ExpectedFailureMechanismSection>()
                .Select(CreateExpectedFailureMechanismSectionWithResult));

            var calculatedSectionResults = assembler.TranslateFailureMechanismResultsToCommonSectionsWbi3B1(
                failureMechanismSectionList,
                combinedSections);

            var calculatedSections = calculatedSectionResults.Sections.OfType <FailureMechanismSectionWithCategory>().ToArray();
            var expectedSections   = input.ExpectedCombinedSectionResultPerFailureMechanism.First(l => l.FailureMechanismId == mechanismId).Sections
                                     .OfType <FailureMechanismSectionWithCategory>().ToArray();

            var failureMechanismResult = GetBenchmarkTestFailureMechanismResult(result, mechanismName, mechanismId, hasLengthEffect);

            try
            {
                Assert.AreEqual(expectedSections.Length, calculatedSections.Length);
                for (int i = 0; i < expectedSections.Length; i++)
                {
                    Assert.AreEqual(expectedSections[i].SectionStart, calculatedSections[i].SectionStart, 0.01);
                    Assert.AreEqual(expectedSections[i].SectionEnd, calculatedSections[i].SectionEnd, 0.01);
                    Assert.AreEqual(expectedSections[i].Category, calculatedSections[i].Category);
                }

                failureMechanismResult.AreEqualCombinedResultsCombinedSections = true;
                result.MethodResults.Wbi3B1 = BenchmarkTestHelper.GetUpdatedMethodResult(result.MethodResults.Wbi3B1, true);
            }
            catch (AssertionException e)
            {
                Console.WriteLine("Error matching combined sections for {0}: {1}", failureMechanismResult.Name, e.Message);
                failureMechanismResult.AreEqualCombinedResultsCombinedSections = false;
                result.MethodResults.Wbi3B1 = false;
            }
        }
        public void TranslateFailureMechanismResultsToCommonSectionsWbi3B1ThrowsOnNullLists2()
        {
            var list = new FailureMechanismSectionList(new[]
            {
                new FailureMechanismSection(0.0, 2.5)
            });

            try
            {
                var commonSectionsWithResults =
                    assembler.TranslateFailureMechanismResultsToCommonSectionsWbi3B1(list, null);
            }
            catch (AssemblyException exception)
            {
                Assert.IsNotNull(exception.Errors);
                Assert.AreEqual(1, exception.Errors.Count());
                Assert.AreEqual(EAssemblyErrors.ValueMayNotBeNull, exception.Errors.First().ErrorCode);
                Assert.Pass();
            }

            Assert.Fail("Expected exception did not occur");
        }
        public void FindGreatestCommonDenominatorSectionsWbi3A1ThrowsOnInvalidSectionList()
        {
            var assessmentSectionLength = 30.0;
            var list1 = new FailureMechanismSectionList(new[]
            {
                new FailureMechanismSection(0.0, 10.0),
                new FailureMechanismSection(10.001, 20.0),
                new FailureMechanismSection(20.0, assessmentSectionLength)
            });
            var list2 = new FailureMechanismSectionList(new[]
            {
                new FailureMechanismSection(0.0, 5.0),
                new FailureMechanismSection(5.0, 25.0),
                new FailureMechanismSection(25.0, assessmentSectionLength - 1.0)
            });

            try
            {
                var commonSections =
                    assembler.FindGreatestCommonDenominatorSectionsWbi3A1(new[]
                {
                    list1,
                    list2
                },
                                                                          assessmentSectionLength);
            }
            catch (AssemblyException exception)
            {
                Assert.IsNotNull(exception.Errors);
                Assert.AreEqual(1, exception.Errors.Count());
                Assert.AreEqual(EAssemblyErrors.FailureMechanismSectionLengthInvalid, exception.Errors.First().ErrorCode);
                Assert.Pass();
            }

            Assert.Fail("Expected exception did not occur");
        }
예제 #20
0
        public CombinedFailureMechanismSectionAssemblyResultWrapper AssembleCombinedFailureMechanismSections(
            IEnumerable <IEnumerable <CombinedAssemblyFailureMechanismSection> > input, double assessmentSectionLength)
        {
            if (input == null)
            {
                throw new ArgumentNullException(nameof(input));
            }

            try
            {
                ICommonFailureMechanismSectionAssembler kernel = factory.CreateCombinedFailureMechanismSectionAssemblyKernel();

                IEnumerable <FailureMechanismSectionList> failureMechanismSections = FailureMechanismSectionListCreator.Create(input);
                FailureMechanismSectionList commonSections = kernel.FindGreatestCommonDenominatorSectionsBoi3A1(
                    failureMechanismSections, assessmentSectionLength);

                FailureMechanismSectionList[] failureMechanismResults = failureMechanismSections.Select(fmsl => kernel.TranslateFailureMechanismResultsToCommonSectionsBoi3B1(
                                                                                                            fmsl, commonSections))
                                                                        .ToArray();

                IEnumerable <FailureMechanismSectionWithCategory> combinedSectionResults =
                    kernel.DetermineCombinedResultPerCommonSectionBoi3C1(failureMechanismResults, false);

                return(new CombinedFailureMechanismSectionAssemblyResultWrapper(
                           CombinedFailureMechanismSectionAssemblyCreator.Create(failureMechanismResults, combinedSectionResults),
                           AssemblyMethod.BOI3A1, AssemblyMethod.BOI3B1, AssemblyMethod.BOI3C1));
            }
            catch (AssemblyException e)
            {
                throw new AssessmentSectionAssemblyCalculatorException(AssemblyErrorMessageCreator.CreateErrorMessage(e.Errors), e);
            }
            catch (Exception e)
            {
                throw new AssessmentSectionAssemblyCalculatorException(AssemblyErrorMessageCreator.CreateGenericErrorMessage(), e);
            }
        }
        private static void CheckResultsToCommonSectionsInput(FailureMechanismSectionList commonSections,
                                                              FailureMechanismSectionList failureMechanismSectionList)
        {
            if (commonSections == null || failureMechanismSectionList == null)
            {
                throw new AssemblyException("FailureMechanismSectionList",
                                            EAssemblyErrors.ValueMayNotBeNull);
            }

            if (Math.Abs(commonSections.Sections.Last().SectionEnd -
                         failureMechanismSectionList.Sections.Last().SectionEnd) > 1e-8)
            {
                throw new AssemblyException("FailureMechanismSectionList",
                                            EAssemblyErrors.CommonFailureMechanismSectionsInvalid);
            }

            var firstResult = failureMechanismSectionList.Sections.First();

            if (!(firstResult is FailureMechanismSectionWithCategory))
            {
                throw new AssemblyException("FailureMechanismSectionList",
                                            EAssemblyErrors.SectionsWithoutCategory);
            }
        }