public void ConstructorPassesAllPropertiesCorrectly() { var probabilityDistributionFactor = 0.4; var signalingStandard = (Probability)0.123; var lowerBoundaryStandard = (Probability)0.456; var input = new CalculateFailureMechanismCategoriesInput(signalingStandard, lowerBoundaryStandard, probabilityDistributionFactor); Assert.AreEqual(signalingStandard, input.SignalingStandard); Assert.AreEqual(lowerBoundaryStandard, input.LowerBoundaryStandard); Assert.AreEqual(probabilityDistributionFactor, input.ProbabilityDistributionFactor); }
public void CalculateFailureMechanismCategoriesTest(double signalingStandard, double lowerBoundaryStandard) { var probabilityDistributionFactor = 0.5; var input = new CalculateFailureMechanismCategoriesInput(new Probability(signalingStandard), new Probability(lowerBoundaryStandard), probabilityDistributionFactor); var calculationResult = new CategoriesCalculator().CalculateFailureMechanismCategories(input); Assert.IsNotNull(calculationResult.Result); Assert.IsNotNull(calculationResult.WarningMessages); Assert.IsEmpty(calculationResult.WarningMessages); var result = calculationResult.Result; Assert.AreEqual(6, result.Length); var firstCategory = result[0]; Assert.AreEqual(FailureMechanismCategoryGroup.It, firstCategory.CategoryGroup); Assert.AreEqual(0, firstCategory.LowerBoundary, 1e-8); Assert.AreEqual(1 / 30.0 * probabilityDistributionFactor * signalingStandard, firstCategory.UpperBoundary, 1e-8); var category2 = result[1]; Assert.AreEqual(FailureMechanismCategoryGroup.IIt, category2.CategoryGroup); Assert.AreEqual(1 / 30.0 * probabilityDistributionFactor * signalingStandard, category2.LowerBoundary, 1e-8); Assert.AreEqual(probabilityDistributionFactor * signalingStandard, category2.UpperBoundary, 1e-8); var category3 = result[2]; Assert.AreEqual(FailureMechanismCategoryGroup.IIIt, category3.CategoryGroup); Assert.AreEqual(probabilityDistributionFactor * signalingStandard, category3.LowerBoundary, 1e-8); Assert.AreEqual(probabilityDistributionFactor * lowerBoundaryStandard, category3.UpperBoundary, 1e-8); var category4 = result[3]; Assert.AreEqual(FailureMechanismCategoryGroup.IVt, category4.CategoryGroup); Assert.AreEqual(probabilityDistributionFactor * lowerBoundaryStandard, category4.LowerBoundary, 1e-8); Assert.AreEqual(lowerBoundaryStandard, category4.UpperBoundary, 1e-8); var category5 = result[4]; Assert.AreEqual(FailureMechanismCategoryGroup.Vt, category5.CategoryGroup); Assert.AreEqual(lowerBoundaryStandard, category5.LowerBoundary, 1e-8); Assert.AreEqual(30.0 * lowerBoundaryStandard, category5.UpperBoundary, 1e-8); var category6 = result[5]; Assert.AreEqual(FailureMechanismCategoryGroup.VIt, category6.CategoryGroup); Assert.AreEqual(30.0 * lowerBoundaryStandard, category6.LowerBoundary, 1e-8); Assert.AreEqual(1, category6.UpperBoundary, 1e-8); }
public void ConstructrValidatesProbabilityDistributionFactor(double probabilityDistributionFactor, ErrorCode expectedInnerExceptionCode) { try { var input = new CalculateFailureMechanismCategoriesInput((Probability)0.123, (Probability)0.456, probabilityDistributionFactor); Assert.Fail("Expected exception"); } catch (AssemblyToolKernelException e) { Assert.AreEqual(1, e.Code.Length); Assert.AreEqual(ErrorCode.InvalidProbabilityDistributionFactor, e.Code[0]); Assert.IsNotNull(e.InnerException); Assert.IsInstanceOf <AssemblyToolKernelException>(e.InnerException); var innerException = (AssemblyToolKernelException)e.InnerException; Assert.AreEqual(1, innerException.Code.Length); Assert.AreEqual(expectedInnerExceptionCode, innerException.Code[0]); } }
/// <summary> /// Calculates category boundaries (probabilities) for usages in assembly of WBI2017 assessment results on failure mechanism level. /// This method implements "WBI-1-1" from the Functional Design. /// </summary> /// <param name="input">The input for this method, consisting of an signaling standard, a lower boundary standard and probability distribution factor.</param> /// <returns>A collection of <see cref="FailureMechanismCategory"/> that contains all assembly categories with their boundaries.</returns> /// <exception cref="AssemblyToolKernelException">Thrown when inconsistent boundaries were calculated.</exception> public CalculationOutput <FailureMechanismCategory[]> CalculateFailureMechanismCategories(CalculateFailureMechanismCategoriesInput input) { var iToII = 1 / 30.0 * input.ProbabilityDistributionFactor * input.SignalingStandard; var iItoIII = input.ProbabilityDistributionFactor * input.SignalingStandard; var iIItoIV = input.ProbabilityDistributionFactor * input.LowerBoundaryStandard; var categories = new[] { new FailureMechanismCategory(FailureMechanismCategoryGroup.It, (Probability)0, iToII), new FailureMechanismCategory(FailureMechanismCategoryGroup.IIt, iToII, iItoIII), new FailureMechanismCategory(FailureMechanismCategoryGroup.IIIt, iItoIII, iIItoIV), new FailureMechanismCategory(FailureMechanismCategoryGroup.IVt, iIItoIV, input.LowerBoundaryStandard), new FailureMechanismCategory(FailureMechanismCategoryGroup.Vt, input.LowerBoundaryStandard, 30 * input.LowerBoundaryStandard), new FailureMechanismCategory(FailureMechanismCategoryGroup.VIt, 30 * input.LowerBoundaryStandard, (Probability)1), }; return(new CalculationOutput <FailureMechanismCategory[]>(categories)); }