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);
        }
コード例 #2
0
        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]);
     }
 }
コード例 #4
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));
        }