// Copyright (C) Stichting Deltares 2017. All rights reserved.
//
// This file is part of Ringtoets.
//
// Ringtoets is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see .
//
// All names, logos, and references to "Deltares" are registered trademarks of
// Stichting Deltares and remain full property of Stichting Deltares at all times.
// All rights reserved.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using Assembly.Kernel.Model.AssessmentResultTypes;
using Core.Common.TestUtil;
using NUnit.Framework;
using Ringtoets.AssemblyTool.Data;
using Ringtoets.AssemblyTool.KernelWrapper.Creators;
using Ringtoets.Common.Primitives;
namespace Ringtoets.AssemblyTool.KernelWrapper.Test.Creators
{
[TestFixture]
public class FailureMechanismSectionAssemblyCalculatorInputCreatorTest
{
#region Simple Assessment
[Test]
public void CreateAssessmentResultE1_WithInvalidEnumInput_ThrowInvalidEnumArgumentException()
{
// Call
TestDelegate test = () => FailureMechanismSectionAssemblyCalculatorInputCreator.CreateAssessmentResultE1((SimpleAssessmentResultType) 99);
// Assert
const string expectedMessage = "The value of argument 'input' (99) is invalid for Enum type 'SimpleAssessmentResultType'.";
TestHelper.AssertThrowsArgumentExceptionAndTestMessage(test, expectedMessage);
}
[Test]
[TestCase(SimpleAssessmentResultType.None, EAssessmentResultTypeE1.Gr)]
[TestCase(SimpleAssessmentResultType.NotApplicable, EAssessmentResultTypeE1.Nvt)]
[TestCase(SimpleAssessmentResultType.ProbabilityNegligible, EAssessmentResultTypeE1.Fv)]
[TestCase(SimpleAssessmentResultType.AssessFurther, EAssessmentResultTypeE1.Vb)]
public void CreateAssessmentResultE1_ValidData_ReturnSimpleCalculationResult(SimpleAssessmentResultType originalResult,
EAssessmentResultTypeE1 expectedResult)
{
// Call
EAssessmentResultTypeE1 result = FailureMechanismSectionAssemblyCalculatorInputCreator.CreateAssessmentResultE1(originalResult);
// Assert
Assert.AreEqual(expectedResult, result);
}
[Test]
public void CreateAssessmentResultTypeE2_WithInvalidEnumInput_ThrowInvalidEnumArgumentException()
{
// Call
TestDelegate test = () => FailureMechanismSectionAssemblyCalculatorInputCreator.CreateAssessmentResultTypeE2((SimpleAssessmentValidityOnlyResultType) 99);
// Assert
const string expectedMessage = "The value of argument 'input' (99) is invalid for Enum type 'SimpleAssessmentValidityOnlyResultType'.";
TestHelper.AssertThrowsArgumentExceptionAndTestMessage(test, expectedMessage);
}
[Test]
[TestCase(SimpleAssessmentValidityOnlyResultType.None, EAssessmentResultTypeE2.Gr)]
[TestCase(SimpleAssessmentValidityOnlyResultType.NotApplicable, EAssessmentResultTypeE2.Nvt)]
[TestCase(SimpleAssessmentValidityOnlyResultType.Applicable, EAssessmentResultTypeE2.Wvt)]
public void CreateAssessmentResultTypeE2_ValidData_ReturnSimpleCalculationResultValidityOnly(
SimpleAssessmentValidityOnlyResultType originalResult,
EAssessmentResultTypeE2 expectedResult)
{
// Call
EAssessmentResultTypeE2 result = FailureMechanismSectionAssemblyCalculatorInputCreator.CreateAssessmentResultTypeE2(originalResult);
// Assert
Assert.AreEqual(expectedResult, result);
}
#endregion
#region Detailed Assessment
[Test]
public void CreateDetailedCalculationInputFromProbability_WithInvalidEnumInput_ThrowInvalidEnumArgumentException()
{
// Setup
var random = new Random(39);
// Call
TestDelegate test = () => FailureMechanismSectionAssemblyCalculatorInputCreator.CreateDetailedCalculationInputFromProbability(
random.NextDouble(),
new[]
{
new FailureMechanismSectionAssemblyCategory(random.NextDouble(),
random.NextDouble(),
(FailureMechanismSectionAssemblyCategoryGroup) 99)
});
// Assert
const string expectedMessage = "The value of argument 'category' (99) is invalid for Enum type 'FailureMechanismSectionAssemblyCategoryGroup'.";
TestHelper.AssertThrowsArgumentExceptionAndTestMessage(test, expectedMessage);
}
[Test]
public void CreateDetailedCalculationInputFromProbability_CategoriesNull_ThrowArgumentNullException()
{
// Call
TestDelegate test = () => FailureMechanismSectionAssemblyCalculatorInputCreator.CreateDetailedCalculationInputFromProbability(
new Random(39).NextDouble(),
null);
// Assert
var exception = Assert.Throws(test);
Assert.AreEqual("categories", exception.ParamName);
}
[Test]
[TestCase(FailureMechanismSectionAssemblyCategoryGroup.NotApplicable, FailureMechanismCategoryGroup.NotApplicable)]
[TestCase(FailureMechanismSectionAssemblyCategoryGroup.None, FailureMechanismSectionCategoryGroup.None)]
[TestCase(FailureMechanismSectionAssemblyCategoryGroup.Iv, FailureMechanismSectionCategoryGroup.Iv)]
[TestCase(FailureMechanismSectionAssemblyCategoryGroup.IIv, FailureMechanismSectionCategoryGroup.IIv)]
[TestCase(FailureMechanismSectionAssemblyCategoryGroup.IIIv, FailureMechanismSectionCategoryGroup.IIIv)]
[TestCase(FailureMechanismSectionAssemblyCategoryGroup.IVv, FailureMechanismSectionCategoryGroup.IVv)]
[TestCase(FailureMechanismSectionAssemblyCategoryGroup.Vv, FailureMechanismSectionCategoryGroup.Vv)]
[TestCase(FailureMechanismSectionAssemblyCategoryGroup.VIv, FailureMechanismSectionCategoryGroup.VIv)]
[TestCase(FailureMechanismSectionAssemblyCategoryGroup.VIIv, FailureMechanismSectionCategoryGroup.VIIv)]
public void CreateDetailedCalculationInputFromProbability_ValidData_ReturnDetailedCalculationInputFromProbabilityWithLengthEffect(
FailureMechanismSectionAssemblyCategoryGroup originalResult,
FailureMechanismSectionCategoryGroup expectedResult)
{
// Setup
var random = new Random(39);
double probability = random.NextDouble();
double lowerBoundary = random.NextDouble(0.0, 0.5);
double upperBoundary = random.NextDouble(0.6, 1.0);
// Call
DetailedCalculationInputFromProbability result =
FailureMechanismSectionAssemblyCalculatorInputCreator.CreateDetailedCalculationInputFromProbability(
probability,
new[]
{
new FailureMechanismSectionAssemblyCategory(lowerBoundary,
upperBoundary,
originalResult)
});
// Assert
Assert.AreEqual(probability, result.Probability);
FailureMechanismSectionCategory actualCategory = result.Categories.Single();
Assert.AreEqual(expectedResult, actualCategory.CategoryGroup);
Assert.AreEqual(lowerBoundary, actualCategory.LowerBoundary);
Assert.AreEqual(upperBoundary, actualCategory.UpperBoundary);
}
[Test]
public void CreateDetailedCalculationInputFromProbabilityWithLengthEffect_WithInvalidEnumInput_ThrowInvalidEnumArgumentException()
{
// Setup
var random = new Random(39);
// Call
TestDelegate test = () => FailureMechanismSectionAssemblyCalculatorInputCreator.CreateDetailedCalculationInputFromProbabilityWithLengthEffect(
random.NextDouble(),
new[]
{
new FailureMechanismSectionAssemblyCategory(random.NextDouble(),
random.NextDouble(),
(FailureMechanismSectionAssemblyCategoryGroup) 99)
},
random.NextDouble());
// Assert
const string expectedMessage = "The value of argument 'category' (99) is invalid for Enum type 'FailureMechanismSectionAssemblyCategoryGroup'.";
TestHelper.AssertThrowsArgumentExceptionAndTestMessage(test, expectedMessage);
}
[Test]
public void CreateDetailedCalculationInputFromProbabilityWithLengthEffect_CategoriesNull_ThrowArgumentNullException()
{
// Setup
var random = new Random(39);
// Call
TestDelegate test = () => FailureMechanismSectionAssemblyCalculatorInputCreator.CreateDetailedCalculationInputFromProbabilityWithLengthEffect(
random.NextDouble(),
null,
random.NextDouble());
// Assert
var exception = Assert.Throws(test);
Assert.AreEqual("categories", exception.ParamName);
}
[Test]
[TestCase(FailureMechanismSectionAssemblyCategoryGroup.NotApplicable, FailureMechanismCategoryGroup.NotApplicable)]
[TestCase(FailureMechanismSectionAssemblyCategoryGroup.None, FailureMechanismSectionCategoryGroup.None)]
[TestCase(FailureMechanismSectionAssemblyCategoryGroup.Iv, FailureMechanismSectionCategoryGroup.Iv)]
[TestCase(FailureMechanismSectionAssemblyCategoryGroup.IIv, FailureMechanismSectionCategoryGroup.IIv)]
[TestCase(FailureMechanismSectionAssemblyCategoryGroup.IIIv, FailureMechanismSectionCategoryGroup.IIIv)]
[TestCase(FailureMechanismSectionAssemblyCategoryGroup.IVv, FailureMechanismSectionCategoryGroup.IVv)]
[TestCase(FailureMechanismSectionAssemblyCategoryGroup.Vv, FailureMechanismSectionCategoryGroup.Vv)]
[TestCase(FailureMechanismSectionAssemblyCategoryGroup.VIv, FailureMechanismSectionCategoryGroup.VIv)]
[TestCase(FailureMechanismSectionAssemblyCategoryGroup.VIIv, FailureMechanismSectionCategoryGroup.VIIv)]
public void CreateDetailedCalculationInputFromProbabilityWithLengthEffect_ValidData_ReturnDetailedCalculationInputFromProbabilityWithLengthEffect(
FailureMechanismSectionAssemblyCategoryGroup originalResult,
FailureMechanismSectionCategoryGroup expectedResult)
{
// Setup
var random = new Random(39);
double probability = random.NextDouble();
double lowerBoundary = random.NextDouble(0.0, 0.5);
double upperBoundary = random.NextDouble(0.6, 1.0);
double n = random.NextDouble(1.0, 10.0);
// Call
DetailedCalculationInputFromProbabilityWithLengthEffect result =
FailureMechanismSectionAssemblyCalculatorInputCreator.CreateDetailedCalculationInputFromProbabilityWithLengthEffect(
probability,
new[]
{
new FailureMechanismSectionAssemblyCategory(lowerBoundary,
upperBoundary,
originalResult)
},
n);
// Assert
Assert.AreEqual(probability, result.Probability);
Assert.AreEqual(n, result.NValue);
FailureMechanismSectionCategory actualCategory = result.Categories.Single();
Assert.AreEqual(expectedResult, actualCategory.CategoryGroup);
Assert.AreEqual(lowerBoundary, actualCategory.LowerBoundary);
Assert.AreEqual(upperBoundary, actualCategory.UpperBoundary);
}
[Test]
[TestCaseSource(nameof(InvalidDetailedAssessmentCategoryResults))]
public void CreateDetailedCalculationInputFromCategoryResults_InvalidEnumInput_ThrowInvalidEnumArgumentException(
DetailedAssessmentResultType detailedAssessmentResultForFactorizedSignalingNorm,
DetailedAssessmentResultType detailedAssessmentResultForSignalingNorm,
DetailedAssessmentResultType detailedAssessmentResultForMechanismSpecificLowerLimitNorm,
DetailedAssessmentResultType detailedAssessmentResultForLowerLimitNorm,
DetailedAssessmentResultType detailedAssessmentResultForFactorizedLowerLimitNorm)
{
// Call
TestDelegate test = () => FailureMechanismSectionAssemblyCalculatorInputCreator.CreateDetailedCalculationInputFromCategoryResults(
detailedAssessmentResultForFactorizedSignalingNorm,
detailedAssessmentResultForSignalingNorm,
detailedAssessmentResultForMechanismSpecificLowerLimitNorm,
detailedAssessmentResultForLowerLimitNorm,
detailedAssessmentResultForFactorizedLowerLimitNorm);
// Assert
string expectedMessage = $"The value of argument 'detailedAssessmentResult' (99) is invalid for Enum type '{nameof(DetailedAssessmentResultType)}'.";
TestHelper.AssertThrowsArgumentExceptionAndTestMessage(test, expectedMessage);
}
[Test]
public void CreateDetailedCalculationInputFromCategoryResults_ValidInput_ReturnsDetailedCategoryBoundariesCalculationResult()
{
// Setup
var random = new Random(39);
var detailedAssessmentResultForFactorizedSignalingNorm = random.NextEnumValue();
var detailedAssessmentResultForSignalingNorm = random.NextEnumValue();
var detailedAssessmentResultForMechanismSpecificLowerLimitNorm = random.NextEnumValue();
var detailedAssessmentResultForLowerLimitNorm = random.NextEnumValue();
var detailedAssessmentResultForFactorizedLowerLimitNorm = random.NextEnumValue();
// Call
DetailedCategoryBoundariesCalculationResult result = FailureMechanismSectionAssemblyCalculatorInputCreator.CreateDetailedCalculationInputFromCategoryResults(
detailedAssessmentResultForFactorizedSignalingNorm,
detailedAssessmentResultForSignalingNorm,
detailedAssessmentResultForMechanismSpecificLowerLimitNorm,
detailedAssessmentResultForLowerLimitNorm,
detailedAssessmentResultForFactorizedLowerLimitNorm);
// Assert
Assert.AreEqual(result.ResultItoII, GetAssessmentResultTypeG1(detailedAssessmentResultForFactorizedSignalingNorm));
Assert.AreEqual(result.ResultIItoIII, GetAssessmentResultTypeG1(detailedAssessmentResultForSignalingNorm));
Assert.AreEqual(result.ResultIIItoIV, GetAssessmentResultTypeG1(detailedAssessmentResultForMechanismSpecificLowerLimitNorm));
Assert.AreEqual(result.ResultIVtoV, GetAssessmentResultTypeG1(detailedAssessmentResultForLowerLimitNorm));
Assert.AreEqual(result.ResultVtoVI, GetAssessmentResultTypeG1(detailedAssessmentResultForFactorizedLowerLimitNorm));
}
[Test]
public void CreateAssessmentResultTypeG1_InvalidEnumInput_ThrowInvalidEnumArgumentException()
{
// Call
TestDelegate test = () => FailureMechanismSectionAssemblyCalculatorInputCreator.CreateAssessmentResultTypeG1((DetailedAssessmentResultType) 99);
// Assert
string expectedMessage = $"The value of argument 'detailedAssessmentResult' (99) is invalid for Enum type '{nameof(DetailedAssessmentResultType)}'.";
TestHelper.AssertThrowsArgumentExceptionAndTestMessage(test, expectedMessage);
}
[Test]
[TestCase(DetailedAssessmentResultType.None)]
[TestCase(DetailedAssessmentResultType.Insufficient)]
[TestCase(DetailedAssessmentResultType.Sufficient)]
[TestCase(DetailedAssessmentResultType.NotAssessed)]
public void CreateAssessmentResultTypeG1_ValidInput_ReturnsDetailedCalculationResult(DetailedAssessmentResultType detailedAssessmentResult)
{
// Call
EAssessmentResultTypeG1 result = FailureMechanismSectionAssemblyCalculatorInputCreator.CreateAssessmentResultTypeG1(detailedAssessmentResult);
// Assert
Assert.AreEqual(result, GetAssessmentResultTypeG1(detailedAssessmentResult));
}
private static IEnumerable InvalidDetailedAssessmentCategoryResults
{
get
{
var random = new Random(39);
yield return new TestCaseData((DetailedAssessmentResultType) 99,
random.NextEnumValue(),
random.NextEnumValue(),
random.NextEnumValue(),
random.NextEnumValue());
yield return new TestCaseData(random.NextEnumValue(),
(DetailedAssessmentResultType) 99,
random.NextEnumValue(),
random.NextEnumValue(),
random.NextEnumValue());
yield return new TestCaseData(random.NextEnumValue(),
random.NextEnumValue(),
(DetailedAssessmentResultType) 99,
random.NextEnumValue(),
random.NextEnumValue());
yield return new TestCaseData(random.NextEnumValue(),
random.NextEnumValue(),
random.NextEnumValue(),
(DetailedAssessmentResultType) 99,
random.NextEnumValue());
yield return new TestCaseData(random.NextEnumValue(),
random.NextEnumValue(),
random.NextEnumValue(),
random.NextEnumValue(),
(DetailedAssessmentResultType) 99);
}
}
private static EAssessmentResultTypeG1 GetAssessmentResultTypeG1(DetailedAssessmentResultType detailedAssessmentResult)
{
switch (detailedAssessmentResult)
{
case DetailedAssessmentResultType.None:
return EAssessmentResultTypeG1.Gr;
case DetailedAssessmentResultType.Sufficient:
return EAssessmentResultTypeG1.V;
case DetailedAssessmentResultType.Insufficient:
return EAssessmentResultTypeG1.Vn;
case DetailedAssessmentResultType.NotAssessed:
return EAssessmentResultTypeG1.Ngo;
default:
throw new NotSupportedException();
}
}
#endregion
#region Failure Mechanism Section Assembly
[Test]
public void CreateFailureMechanismSectionAssemblyCategoryResult_AssemblyNull_ThrowsArgumentNullException()
{
// Call
TestDelegate call = () => FailureMechanismSectionAssemblyCalculatorInputCreator.CreateFailureMechanismSectionAssemblyCategoryResult(null);
// Assert
var exception = Assert.Throws(call);
Assert.AreEqual("assembly", exception.ParamName);
}
[Test]
[TestCase(FailureMechanismSectionAssemblyCategoryGroup.NotApplicable, FailureMechanismCategoryGroup.NotApplicable)]
[TestCase(FailureMechanismSectionAssemblyCategoryGroup.None, FailureMechanismSectionCategoryGroup.None)]
[TestCase(FailureMechanismSectionAssemblyCategoryGroup.Iv, FailureMechanismSectionCategoryGroup.Iv)]
[TestCase(FailureMechanismSectionAssemblyCategoryGroup.IIv, FailureMechanismSectionCategoryGroup.IIv)]
[TestCase(FailureMechanismSectionAssemblyCategoryGroup.IIIv, FailureMechanismSectionCategoryGroup.IIIv)]
[TestCase(FailureMechanismSectionAssemblyCategoryGroup.IVv, FailureMechanismSectionCategoryGroup.IVv)]
[TestCase(FailureMechanismSectionAssemblyCategoryGroup.Vv, FailureMechanismSectionCategoryGroup.Vv)]
[TestCase(FailureMechanismSectionAssemblyCategoryGroup.VIv, FailureMechanismSectionCategoryGroup.VIv)]
[TestCase(FailureMechanismSectionAssemblyCategoryGroup.VIIv, FailureMechanismSectionCategoryGroup.VIIv)]
public void CreateFailureMechanismSectionAssemblyCategoryResult_WithAssembly_ReturnFailureMechanismSectionAssemblyCategoryResult(
FailureMechanismSectionAssemblyCategoryGroup originalGroup,
FailureMechanismSectionCategoryGroup expectedGroup)
{
// Setup
var random = new Random(11);
var assembly = new FailureMechanismSectionAssembly(random.NextDouble(), originalGroup);
// Call
FailureMechanismSectionAssemblyCategoryResult input = FailureMechanismSectionAssemblyCalculatorInputCreator.CreateFailureMechanismSectionAssemblyCategoryResult(
assembly);
// Assert
Assert.AreEqual(assembly.Probability, input.EstimatedProbabilityOfFailure);
Assert.AreEqual(expectedGroup, input.CategoryGroup);
}
[Test]
public void CreateFailureMechanismSectionAssemblyCategoryResult_WithInvalidEnumInput_ThrowInvalidEnumArgumentException()
{
// Call
TestDelegate test = () => FailureMechanismSectionAssemblyCalculatorInputCreator.CreateFailureMechanismSectionAssemblyCategoryResult(
new FailureMechanismSectionAssembly(0, (FailureMechanismSectionAssemblyCategoryGroup) 99));
// Assert
const string expectedMessage = "The value of argument 'category' (99) is invalid for Enum type 'FailureMechanismSectionAssemblyCategoryGroup'.";
TestHelper.AssertThrowsArgumentExceptionAndTestMessage(test, expectedMessage);
}
[Test]
[TestCase(FailureMechanismSectionAssemblyCategoryGroup.NotApplicable, FailureMechanismCategoryGroup.NotApplicable)]
[TestCase(FailureMechanismSectionAssemblyCategoryGroup.None, FailureMechanismSectionCategoryGroup.None)]
[TestCase(FailureMechanismSectionAssemblyCategoryGroup.Iv, FailureMechanismSectionCategoryGroup.Iv)]
[TestCase(FailureMechanismSectionAssemblyCategoryGroup.IIv, FailureMechanismSectionCategoryGroup.IIv)]
[TestCase(FailureMechanismSectionAssemblyCategoryGroup.IIIv, FailureMechanismSectionCategoryGroup.IIIv)]
[TestCase(FailureMechanismSectionAssemblyCategoryGroup.IVv, FailureMechanismSectionCategoryGroup.IVv)]
[TestCase(FailureMechanismSectionAssemblyCategoryGroup.Vv, FailureMechanismSectionCategoryGroup.Vv)]
[TestCase(FailureMechanismSectionAssemblyCategoryGroup.VIv, FailureMechanismSectionCategoryGroup.VIv)]
[TestCase(FailureMechanismSectionAssemblyCategoryGroup.VIIv, FailureMechanismSectionCategoryGroup.VIIv)]
public void ConvertFailureMechanismSectionAssemblyCategoryGroup_ValidGroup_ReturnFailureMechanismSectionCategoryGroup(
FailureMechanismSectionAssemblyCategoryGroup originalGroup,
FailureMechanismSectionCategoryGroup expectedGroup)
{
// Call
FailureMechanismSectionCategoryGroup actualGroup = FailureMechanismSectionAssemblyCalculatorInputCreator.ConvertFailureMechanismSectionAssemblyCategoryGroup(
originalGroup);
// Assert
Assert.AreEqual(expectedGroup, actualGroup);
}
[Test]
public void ConvertFailureMechanismSectionAssemblyCategoryGroup_InvalidGroup_ThrowInvalidEnumArgumentException()
{
// Call
TestDelegate test = () => FailureMechanismSectionAssemblyCalculatorInputCreator.ConvertFailureMechanismSectionAssemblyCategoryGroup(
(FailureMechanismSectionAssemblyCategoryGroup) 99);
// Assert
const string expectedMessage = "The value of argument 'category' (99) is invalid for Enum type 'FailureMechanismSectionAssemblyCategoryGroup'.";
TestHelper.AssertThrowsArgumentExceptionAndTestMessage(test, expectedMessage);
}
#endregion
#region Tailor Made Assessment
[Test]
public void CreateTailorMadeCalculationInputFromProbability_CategoriesNull_ThrowArgumentNullException()
{
// Setup
var random = new Random(39);
// Call
TestDelegate test = () => FailureMechanismSectionAssemblyCalculatorInputCreator.CreateTailorMadeCalculationInputFromProbability(
random.NextEnumValue(),
random.NextDouble(),
null);
// Assert
var exception = Assert.Throws(test);
Assert.AreEqual("categories", exception.ParamName);
}
[Test]
public void CreateTailorMadeCalculationInputFromProbability_WithInvalidResultEnumInput_ThrowInvalidEnumArgumentException()
{
// Call
TestDelegate test = () => FailureMechanismSectionAssemblyCalculatorInputCreator.CreateTailorMadeCalculationInputFromProbability(
(TailorMadeAssessmentProbabilityCalculationResultType) 99,
new Random(39).NextDouble(),
Enumerable.Empty());
// Assert
const string expectedMessage = "The value of argument 'tailorMadeAssessmentResult' (99) is invalid for Enum type 'TailorMadeAssessmentProbabilityCalculationResultType'.";
TestHelper.AssertThrowsArgumentExceptionAndTestMessage(test, expectedMessage);
}
[Test]
public void CreateTailorMadeCalculationInputFromProbability_WithInvalidCategoryEnumInput_ThrowInvalidEnumArgumentException()
{
// Setup
var random = new Random(39);
// Call
TestDelegate test = () => FailureMechanismSectionAssemblyCalculatorInputCreator.CreateTailorMadeCalculationInputFromProbability(
random.NextEnumValue(),
random.NextDouble(),
new[]
{
new FailureMechanismSectionAssemblyCategory(random.NextDouble(),
random.NextDouble(),
(FailureMechanismSectionAssemblyCategoryGroup) 99)
});
// Assert
const string expectedMessage = "The value of argument 'category' (99) is invalid for Enum type 'FailureMechanismSectionAssemblyCategoryGroup'.";
TestHelper.AssertThrowsArgumentExceptionAndTestMessage(test, expectedMessage);
}
[Test]
[TestCase(FailureMechanismSectionAssemblyCategoryGroup.NotApplicable, FailureMechanismCategoryGroup.NotApplicable)]
[TestCase(FailureMechanismSectionAssemblyCategoryGroup.None, FailureMechanismSectionCategoryGroup.None)]
[TestCase(FailureMechanismSectionAssemblyCategoryGroup.Iv, FailureMechanismSectionCategoryGroup.Iv)]
[TestCase(FailureMechanismSectionAssemblyCategoryGroup.IIv, FailureMechanismSectionCategoryGroup.IIv)]
[TestCase(FailureMechanismSectionAssemblyCategoryGroup.IIIv, FailureMechanismSectionCategoryGroup.IIIv)]
[TestCase(FailureMechanismSectionAssemblyCategoryGroup.IVv, FailureMechanismSectionCategoryGroup.IVv)]
[TestCase(FailureMechanismSectionAssemblyCategoryGroup.Vv, FailureMechanismSectionCategoryGroup.Vv)]
[TestCase(FailureMechanismSectionAssemblyCategoryGroup.VIv, FailureMechanismSectionCategoryGroup.VIv)]
[TestCase(FailureMechanismSectionAssemblyCategoryGroup.VIIv, FailureMechanismSectionCategoryGroup.VIIv)]
public void CreateTailorMadeCalculationInputFromProbability_ValidData_ReturnTailorMadeCalculationInputFromProbabilityWithCorrectCategories(
FailureMechanismSectionAssemblyCategoryGroup originalResult,
FailureMechanismSectionCategoryGroup expectedResult)
{
// Setup
var random = new Random(39);
double probability = random.NextDouble();
double lowerBoundary = random.NextDouble(0.0, 0.5);
double upperBoundary = random.NextDouble(0.6, 1.0);
// Call
TailorMadeCalculationInputFromProbability result =
FailureMechanismSectionAssemblyCalculatorInputCreator.CreateTailorMadeCalculationInputFromProbability(
random.NextEnumValue(),
probability,
new[]
{
new FailureMechanismSectionAssemblyCategory(lowerBoundary,
upperBoundary,
originalResult)
});
// Assert
FailureMechanismSectionCategory actualCategory = result.Categories.Single();
Assert.AreEqual(expectedResult, actualCategory.CategoryGroup);
Assert.AreEqual(lowerBoundary, actualCategory.LowerBoundary);
Assert.AreEqual(upperBoundary, actualCategory.UpperBoundary);
}
[Test]
[TestCase(TailorMadeAssessmentProbabilityCalculationResultType.None, TailorMadeProbabilityCalculationResultGroup.None)]
[TestCase(TailorMadeAssessmentProbabilityCalculationResultType.ProbabilityNegligible, TailorMadeProbabilityCalculationResultGroup.FV)]
[TestCase(TailorMadeAssessmentProbabilityCalculationResultType.NotAssessed, TailorMadeProbabilityCalculationResultGroup.NGO)]
public void CreateTailorMadeCalculationInputFromProbability_ValidDataNotProbability_ReturnTailorMadeCalculationInputFromProbability(
TailorMadeAssessmentProbabilityCalculationResultType originalResult,
TailorMadeProbabilityCalculationResultGroup expectedResult)
{
// Setup
var random = new Random(39);
double probability = random.NextDouble();
double lowerBoundary = random.NextDouble(0.0, 0.5);
double upperBoundary = random.NextDouble(0.6, 1.0);
const FailureMechanismSectionAssemblyCategoryGroup categoryGroup = FailureMechanismSectionAssemblyCategoryGroup.IIv;
// Call
TailorMadeCalculationInputFromProbability input = FailureMechanismSectionAssemblyCalculatorInputCreator.CreateTailorMadeCalculationInputFromProbability(
originalResult,
probability,
new[]
{
new FailureMechanismSectionAssemblyCategory(lowerBoundary,
upperBoundary,
categoryGroup)
});
// Assert
Assert.AreEqual(expectedResult, input.Result.CalculationResultGroup);
Assert.AreEqual(0.0, input.Result.Probability);
FailureMechanismSectionCategory actualCategory = input.Categories.Single();
Assert.AreEqual(FailureMechanismSectionCategoryGroup.IIv, actualCategory.CategoryGroup);
Assert.AreEqual(lowerBoundary, actualCategory.LowerBoundary);
Assert.AreEqual(upperBoundary, actualCategory.UpperBoundary);
}
[Test]
public void CreateTailorMadeCalculationInputFromProbability_ValidDataProbability_ReturnTailorMadeCalculationInputFromProbability()
{
// Setup
var random = new Random(39);
double probability = random.NextDouble();
double lowerBoundary = random.NextDouble(0.0, 0.5);
double upperBoundary = random.NextDouble(0.6, 1.0);
const FailureMechanismSectionAssemblyCategoryGroup categoryGroup = FailureMechanismSectionAssemblyCategoryGroup.IIv;
// Call
TailorMadeCalculationInputFromProbability input = FailureMechanismSectionAssemblyCalculatorInputCreator.CreateTailorMadeCalculationInputFromProbability(
TailorMadeAssessmentProbabilityCalculationResultType.Probability,
probability,
new[]
{
new FailureMechanismSectionAssemblyCategory(lowerBoundary,
upperBoundary,
categoryGroup)
});
// Assert
Assert.AreEqual(TailorMadeProbabilityCalculationResultGroup.Probability, input.Result.CalculationResultGroup);
Assert.AreEqual(probability, input.Result.Probability);
FailureMechanismSectionCategory actualCategory = input.Categories.Single();
Assert.AreEqual(FailureMechanismSectionCategoryGroup.IIv, actualCategory.CategoryGroup);
Assert.AreEqual(lowerBoundary, actualCategory.LowerBoundary);
Assert.AreEqual(upperBoundary, actualCategory.UpperBoundary);
}
[Test]
public void CreateTailorMadeCalculationInputFromProbabilityWithLengthEffectFactor_CategoriesNull_ThrowArgumentNullException()
{
// Setup
var random = new Random(39);
// Call
TestDelegate test = () => FailureMechanismSectionAssemblyCalculatorInputCreator.CreateTailorMadeCalculationInputFromProbabilityWithLengthEffectFactor(
random.NextEnumValue(),
random.NextDouble(),
null,
random.NextDouble());
// Assert
var exception = Assert.Throws(test);
Assert.AreEqual("categories", exception.ParamName);
}
[Test]
public void CreateTailorMadeCalculationInputFromProbabilityWithLengthEffectFactor_WithInvalidResultEnumInput_ThrowInvalidEnumArgumentException()
{
// Setup
var random = new Random(39);
// Call
TestDelegate test = () => FailureMechanismSectionAssemblyCalculatorInputCreator.CreateTailorMadeCalculationInputFromProbabilityWithLengthEffectFactor(
(TailorMadeAssessmentProbabilityCalculationResultType) 99,
random.NextDouble(),
Enumerable.Empty(),
random.NextDouble());
// Assert
const string expectedMessage = "The value of argument 'tailorMadeAssessmentResult' (99) is invalid for Enum type 'TailorMadeAssessmentProbabilityCalculationResultType'.";
TestHelper.AssertThrowsArgumentExceptionAndTestMessage(test, expectedMessage);
}
[Test]
public void CreateTailorMadeCalculationInputFromProbabilityWithLengthEffectFactor_WithInvalidCategoryEnumInput_ThrowInvalidEnumArgumentException()
{
// Setup
var random = new Random(39);
// Call
TestDelegate test = () => FailureMechanismSectionAssemblyCalculatorInputCreator.CreateTailorMadeCalculationInputFromProbabilityWithLengthEffectFactor(
random.NextEnumValue(),
random.NextDouble(),
new[]
{
new FailureMechanismSectionAssemblyCategory(random.NextDouble(),
random.NextDouble(),
(FailureMechanismSectionAssemblyCategoryGroup) 99)
},
random.NextDouble());
// Assert
const string expectedMessage = "The value of argument 'category' (99) is invalid for Enum type 'FailureMechanismSectionAssemblyCategoryGroup'.";
TestHelper.AssertThrowsArgumentExceptionAndTestMessage(test, expectedMessage);
}
[Test]
[TestCase(FailureMechanismSectionAssemblyCategoryGroup.NotApplicable, FailureMechanismCategoryGroup.NotApplicable)]
[TestCase(FailureMechanismSectionAssemblyCategoryGroup.None, FailureMechanismSectionCategoryGroup.None)]
[TestCase(FailureMechanismSectionAssemblyCategoryGroup.Iv, FailureMechanismSectionCategoryGroup.Iv)]
[TestCase(FailureMechanismSectionAssemblyCategoryGroup.IIv, FailureMechanismSectionCategoryGroup.IIv)]
[TestCase(FailureMechanismSectionAssemblyCategoryGroup.IIIv, FailureMechanismSectionCategoryGroup.IIIv)]
[TestCase(FailureMechanismSectionAssemblyCategoryGroup.IVv, FailureMechanismSectionCategoryGroup.IVv)]
[TestCase(FailureMechanismSectionAssemblyCategoryGroup.Vv, FailureMechanismSectionCategoryGroup.Vv)]
[TestCase(FailureMechanismSectionAssemblyCategoryGroup.VIv, FailureMechanismSectionCategoryGroup.VIv)]
[TestCase(FailureMechanismSectionAssemblyCategoryGroup.VIIv, FailureMechanismSectionCategoryGroup.VIIv)]
public void CreateTailorMadeCalculationInputFromProbabilityWithLengthEffectFactor_ValidData_ReturnTailorMadeCalculationInputFromProbabilityWithLengthEffectFactorWithCorrectCategories(
FailureMechanismSectionAssemblyCategoryGroup originalResult,
FailureMechanismSectionCategoryGroup expectedResult)
{
// Setup
var random = new Random(39);
double probability = random.NextDouble();
double lowerBoundary = random.NextDouble(0.0, 0.5);
double upperBoundary = random.NextDouble(0.6, 1.0);
// Call
TailorMadeCalculationInputFromProbabilityWithLengthEffectFactor result =
FailureMechanismSectionAssemblyCalculatorInputCreator.CreateTailorMadeCalculationInputFromProbabilityWithLengthEffectFactor(
random.NextEnumValue(),
probability,
new[]
{
new FailureMechanismSectionAssemblyCategory(lowerBoundary,
upperBoundary,
originalResult)
},
random.NextDouble(1.0, 10.0));
// Assert
FailureMechanismSectionCategory actualCategory = result.Categories.Single();
Assert.AreEqual(expectedResult, actualCategory.CategoryGroup);
Assert.AreEqual(lowerBoundary, actualCategory.LowerBoundary);
Assert.AreEqual(upperBoundary, actualCategory.UpperBoundary);
}
[Test]
[TestCase(TailorMadeAssessmentProbabilityCalculationResultType.None, TailorMadeProbabilityCalculationResultGroup.None)]
[TestCase(TailorMadeAssessmentProbabilityCalculationResultType.ProbabilityNegligible, TailorMadeProbabilityCalculationResultGroup.FV)]
[TestCase(TailorMadeAssessmentProbabilityCalculationResultType.NotAssessed, TailorMadeProbabilityCalculationResultGroup.NGO)]
public void CreateTailorMadeCalculationInputFromProbabilityWithLengthEffectFactor_ValidDataNotProbability_ReturnTailorMadeCalculationInputFromProbabilityWithLengthEffectFactor(
TailorMadeAssessmentProbabilityCalculationResultType originalResult,
TailorMadeProbabilityCalculationResultGroup expectedResult)
{
// Setup
var random = new Random(39);
double probability = random.NextDouble();
double lowerBoundary = random.NextDouble(0.0, 0.5);
double upperBoundary = random.NextDouble(0.6, 1.0);
double n = random.NextDouble(1.0, 10.0);
const FailureMechanismSectionAssemblyCategoryGroup categoryGroup = FailureMechanismSectionAssemblyCategoryGroup.IIv;
// Call
TailorMadeCalculationInputFromProbabilityWithLengthEffectFactor input = FailureMechanismSectionAssemblyCalculatorInputCreator.CreateTailorMadeCalculationInputFromProbabilityWithLengthEffectFactor(
originalResult,
probability,
new[]
{
new FailureMechanismSectionAssemblyCategory(lowerBoundary,
upperBoundary,
categoryGroup)
},
n);
// Assert
Assert.AreEqual(expectedResult, input.Result.CalculationResultGroup);
Assert.AreEqual(0.0, input.Result.Probability);
Assert.AreEqual(n, input.NValue);
FailureMechanismSectionCategory actualCategory = input.Categories.Single();
Assert.AreEqual(FailureMechanismSectionCategoryGroup.IIv, actualCategory.CategoryGroup);
Assert.AreEqual(lowerBoundary, actualCategory.LowerBoundary);
Assert.AreEqual(upperBoundary, actualCategory.UpperBoundary);
}
[Test]
public void CreateTailorMadeCalculationInputFromProbabilityWithLengthEffectFactor_ValidDataProbability_ReturnTailorMadeCalculationInputFromProbabilityWithLengthEffectFactor()
{
// Setup
var random = new Random(39);
double probability = random.NextDouble();
double lowerBoundary = random.NextDouble(0.0, 0.5);
double upperBoundary = random.NextDouble(0.6, 1.0);
double n = random.NextDouble(1.0, 10.0);
const FailureMechanismSectionAssemblyCategoryGroup categoryGroup = FailureMechanismSectionAssemblyCategoryGroup.IIv;
// Call
TailorMadeCalculationInputFromProbabilityWithLengthEffectFactor input = FailureMechanismSectionAssemblyCalculatorInputCreator.CreateTailorMadeCalculationInputFromProbabilityWithLengthEffectFactor(
TailorMadeAssessmentProbabilityCalculationResultType.Probability,
probability,
new[]
{
new FailureMechanismSectionAssemblyCategory(lowerBoundary,
upperBoundary,
categoryGroup)
},
n);
// Assert
Assert.AreEqual(TailorMadeProbabilityCalculationResultGroup.Probability, input.Result.CalculationResultGroup);
Assert.AreEqual(probability, input.Result.Probability);
Assert.AreEqual(n, input.NValue);
FailureMechanismSectionCategory actualCategory = input.Categories.Single();
Assert.AreEqual(FailureMechanismSectionCategoryGroup.IIv, actualCategory.CategoryGroup);
Assert.AreEqual(lowerBoundary, actualCategory.LowerBoundary);
Assert.AreEqual(upperBoundary, actualCategory.UpperBoundary);
}
[Test]
[TestCase(FailureMechanismSectionAssemblyCategoryGroup.NotApplicable, TailorMadeCategoryCalculationResult.None)]
[TestCase(FailureMechanismSectionAssemblyCategoryGroup.None, TailorMadeCategoryCalculationResult.None)]
[TestCase(FailureMechanismSectionAssemblyCategoryGroup.Iv, TailorMadeCategoryCalculationResult.FV)]
[TestCase(FailureMechanismSectionAssemblyCategoryGroup.IIv, TailorMadeCategoryCalculationResult.IIv)]
[TestCase(FailureMechanismSectionAssemblyCategoryGroup.IIIv, TailorMadeCategoryCalculationResult.IIIv)]
[TestCase(FailureMechanismSectionAssemblyCategoryGroup.IVv, TailorMadeCategoryCalculationResult.IVv)]
[TestCase(FailureMechanismSectionAssemblyCategoryGroup.Vv, TailorMadeCategoryCalculationResult.Vv)]
[TestCase(FailureMechanismSectionAssemblyCategoryGroup.VIv, TailorMadeCategoryCalculationResult.VIv)]
[TestCase(FailureMechanismSectionAssemblyCategoryGroup.VIIv, TailorMadeCategoryCalculationResult.NGO)]
public void ConvertTailorMadeFailureMechanismSectionAssemblyCategoryGroup_ValidGroup_ReturnFailureMechanismSectionCategoryGroup(
FailureMechanismSectionAssemblyCategoryGroup originalGroup,
TailorMadeCategoryCalculationResult expectedGroup)
{
// Call
TailorMadeCategoryCalculationResult actualGroup = FailureMechanismSectionAssemblyCalculatorInputCreator.ConvertTailorMadeFailureMechanismSectionAssemblyCategoryGroup(
originalGroup);
// Assert
Assert.AreEqual(expectedGroup, actualGroup);
}
[Test]
public void ConvertTailorMadeFailureMechanismSectionAssemblyCategoryGroup_InvalidGroup_ThrowInvalidEnumArgumentException()
{
// Call
TestDelegate test = () => FailureMechanismSectionAssemblyCalculatorInputCreator.ConvertTailorMadeFailureMechanismSectionAssemblyCategoryGroup(
(FailureMechanismSectionAssemblyCategoryGroup) 99);
// Assert
const string expectedMessage = "The value of argument 'category' (99) is invalid for Enum type 'FailureMechanismSectionAssemblyCategoryGroup'.";
TestHelper.AssertThrowsArgumentExceptionAndTestMessage(test, expectedMessage);
}
[Test]
public void CreateTailorMadeCalculationResult_InvalidEnumInput_ThrowInvalidEnumArgumentException()
{
// Call
TestDelegate test = () => FailureMechanismSectionAssemblyCalculatorInputCreator.CreateTailorMadeCalculationResult((TailorMadeAssessmentResultType) 99);
// Assert
string expectedMessage = $"The value of argument 'tailorMadeAssessmentResult' (99) is invalid for Enum type '{nameof(TailorMadeAssessmentResultType)}'.";
TestHelper.AssertThrowsArgumentExceptionAndTestMessage(test, expectedMessage);
}
[Test]
[TestCase(TailorMadeAssessmentResultType.None)]
[TestCase(TailorMadeAssessmentResultType.ProbabilityNegligible)]
[TestCase(TailorMadeAssessmentResultType.Insufficient)]
[TestCase(TailorMadeAssessmentResultType.Sufficient)]
[TestCase(TailorMadeAssessmentResultType.NotAssessed)]
public void CreateTailorMadeCalculationResult_ValidInput_ReturnsTailorMadeCalculationResult(TailorMadeAssessmentResultType detailedAssessmentResult)
{
// Call
TailorMadeCalculationResult result = FailureMechanismSectionAssemblyCalculatorInputCreator.CreateTailorMadeCalculationResult(detailedAssessmentResult);
// Assert
Assert.AreEqual(result, GetTailorMadeCalculationResult(detailedAssessmentResult));
}
private static TailorMadeCalculationResult GetTailorMadeCalculationResult(TailorMadeAssessmentResultType detailedAssessmentResult)
{
switch (detailedAssessmentResult)
{
case TailorMadeAssessmentResultType.None:
return TailorMadeCalculationResult.None;
case TailorMadeAssessmentResultType.ProbabilityNegligible:
return TailorMadeCalculationResult.FV;
case TailorMadeAssessmentResultType.Sufficient:
return TailorMadeCalculationResult.V;
case TailorMadeAssessmentResultType.Insufficient:
return TailorMadeCalculationResult.VN;
case TailorMadeAssessmentResultType.NotAssessed:
return TailorMadeCalculationResult.NGO;
default:
throw new NotSupportedException();
}
}
#endregion
}
}