public void DetailedAssessmentDirectFailureMechanismsFromProbabilityWithNValueReturnsCorrectResult(double probability, double nValue, FailureMechanismSectionCategoryGroup expectedCategoryGroup, double expectedProbabilityWithoutNMultiplication) { var categories = new[] { new FailureMechanismSectionCategory(FailureMechanismSectionCategoryGroup.Iv, (Probability)0, (Probability)0.1), new FailureMechanismSectionCategory(FailureMechanismSectionCategoryGroup.IIv, (Probability)0.1, (Probability)0.2), new FailureMechanismSectionCategory(FailureMechanismSectionCategoryGroup.IIIv, (Probability)0.2, (Probability)0.3), new FailureMechanismSectionCategory(FailureMechanismSectionCategoryGroup.IVv, (Probability)0.3, (Probability)0.4), new FailureMechanismSectionCategory(FailureMechanismSectionCategoryGroup.Vv, (Probability)0.4, (Probability)0.5), new FailureMechanismSectionCategory(FailureMechanismSectionCategoryGroup.VIv, (Probability)0.5, (Probability)1), }; var input = new DetailedCalculationInputFromProbabilityWithLengthEffect((Probability)probability, categories, nValue); var calculationOutput = new FailureMechanismSectionAssemblyCalculator().DetailedAssessmentDirectFailureMechanisms(input); Assert.IsNotNull(calculationOutput); var expectedProbability = expectedProbabilityWithoutNMultiplication * nValue; if (expectedProbability > 1) { Assert.AreEqual(1, calculationOutput.WarningMessages.Length); Assert.AreEqual(WarningMessage.CorrectedProbability, calculationOutput.WarningMessages[0]); } else { Assert.IsEmpty(calculationOutput.WarningMessages); } Assert.IsNotNull(calculationOutput.Result); Assert.AreEqual(expectedCategoryGroup, calculationOutput.Result.CategoryGroup); Assert.AreEqual(Math.Min(1, expectedProbability), calculationOutput.Result.EstimatedProbabilityOfFailure); }
public CalculationOutput <FailureMechanismSectionAssemblyCategoryResult> DetailedAssessmentDirectFailureMechanisms(DetailedCalculationInputFromProbabilityWithLengthEffect input) { if (input == null) { throw new AssemblyToolKernelException(ErrorCode.InputIsNull); } if (double.IsNaN(input.Probability)) { return(new CalculationOutput <FailureMechanismSectionAssemblyCategoryResult>(new FailureMechanismSectionAssemblyCategoryResult(FailureMechanismSectionCategoryGroup.None, Probability.NaN))); } var warnings = new List <WarningMessage>(); var result = DetailedAssessmentDirectFailureMechanisms(new DetailedCalculationInputFromProbability(input.Probability, input.Categories)); var adjustedProbability = (double)result.Result.EstimatedProbabilityOfFailure * input.NValue; if (adjustedProbability > 1.0) { warnings.Add(WarningMessage.CorrectedProbability); } var estimatedProbabilityOfFailure = (Probability)Math.Min(1.0, adjustedProbability); return(new CalculationOutput <FailureMechanismSectionAssemblyCategoryResult>(new FailureMechanismSectionAssemblyCategoryResult(result.Result.CategoryGroup, estimatedProbabilityOfFailure), warnings.ToArray())); }