// 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 Assembly.Kernel.Model;
using Assembly.Kernel.Model.AssessmentResultTypes;
using Assembly.Kernel.Model.FmSectionTypes;
using Core.Common.TestUtil;
using NUnit.Framework;
using Rhino.Mocks;
using Ringtoets.AssemblyTool.Data;
using Ringtoets.AssemblyTool.KernelWrapper.Calculators.Assembly;
using Ringtoets.AssemblyTool.KernelWrapper.Creators;
using Ringtoets.AssemblyTool.KernelWrapper.Kernels;
using Ringtoets.AssemblyTool.KernelWrapper.TestUtil.Kernels;
using Ringtoets.AssemblyTool.KernelWrapper.TestUtil.Kernels.Assembly;
using Ringtoets.Common.Primitives;
namespace Ringtoets.AssemblyTool.KernelWrapper.Test.Calculators.Assembly
{
[TestFixture]
public class FailureMechanismSectionAssemblyCalculatorTest
{
[Test]
public void Constructor_ExpectedValues()
{
// Setup
var mocks = new MockRepository();
var kernelFactory = mocks.Stub();
mocks.ReplayAll();
// Call
var calculator = new FailureMechanismSectionAssemblyCalculator(kernelFactory);
// Assert
Assert.IsInstanceOf(calculator);
mocks.VerifyAll();
}
[Test]
public void Constructor_FactoryNull_ThrowsArgumentNullException()
{
// Call
TestDelegate call = () => new FailureMechanismSectionAssemblyCalculator(null);
// Assert
var exception = Assert.Throws(call);
Assert.AreEqual("factory", exception.ParamName);
}
private static void AssertCalculatorOutput(FmSectionAssemblyDirectResult original, FailureMechanismSectionAssembly actual)
{
Assert.AreEqual(GetGroup(original.Result), actual.Group);
Assert.AreEqual(original.FailureProbability, actual.Probability);
}
private static FailureMechanismSectionAssemblyCategoryGroup GetGroup(EFmSectionCategory originalGroup)
{
switch (originalGroup)
{
case EFmSectionCategory.Iv:
return FailureMechanismSectionAssemblyCategoryGroup.Iv;
case EFmSectionCategory.IIv:
return FailureMechanismSectionAssemblyCategoryGroup.IIv;
case EFmSectionCategory.IIIv:
return FailureMechanismSectionAssemblyCategoryGroup.IIIv;
case EFmSectionCategory.IVv:
return FailureMechanismSectionAssemblyCategoryGroup.IVv;
case EFmSectionCategory.Vv:
return FailureMechanismSectionAssemblyCategoryGroup.Vv;
case EFmSectionCategory.VIv:
return FailureMechanismSectionAssemblyCategoryGroup.VIv;
case EFmSectionCategory.VIIv:
return FailureMechanismSectionAssemblyCategoryGroup.VIIv;
case EFmSectionCategory.Gr:
return FailureMechanismSectionAssemblyCategoryGroup.None;
default:
throw new NotSupportedException();
}
}
#region Simple Assessment
[Test]
public void AssembleSimpleAssessment_WithInvalidEnumInput_ThrowFailureMechanismSectionAssemblyCalculatorException()
{
// Setup
using (new AssemblyToolKernelFactoryConfig())
{
var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance;
var calculator = new FailureMechanismSectionAssemblyCalculator(factory);
// Call
TestDelegate test = () => calculator.AssembleSimpleAssessment((SimpleAssessmentResultType) 99);
// Assert
var exception = Assert.Throws(test);
Exception innerException = exception.InnerException;
Assert.IsInstanceOf(innerException);
Assert.AreEqual(innerException.Message, exception.Message);
}
}
[Test]
public void AssembleSimpleAssessment_WithValidInput_InputCorrectlySetToKernel()
{
// Setup
var random = new Random(39);
var assessmentResult = random.NextEnumValue();
using (new AssemblyToolKernelFactoryConfig())
{
var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance;
FailureMechanismSectionAssemblyKernelStub kernel = factory.LastCreatedFailureMechanismSectionAssemblyKernel;
kernel.FailureMechanismSectionDirectResult = new FmSectionAssemblyDirectResult(random.NextEnumValue(),
random.NextDouble());
var calculator = new FailureMechanismSectionAssemblyCalculator(factory);
// Call
calculator.AssembleSimpleAssessment(assessmentResult);
// Assert
Assert.AreEqual(GetAssessmentResultTypeE1(assessmentResult), kernel.AssessmentResultTypeE1Input);
}
}
[Test]
public void AssembleSimpleAssessment_KernelWithCompleteOutput_OutputCorrectlyReturnedByCalculator()
{
// Setup
var random = new Random(39);
using (new AssemblyToolKernelFactoryConfig())
{
var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance;
FailureMechanismSectionAssemblyKernelStub kernel = factory.LastCreatedFailureMechanismSectionAssemblyKernel;
kernel.FailureMechanismSectionDirectResult = new FmSectionAssemblyDirectResult(random.NextEnumValue(),
random.NextDouble());
var calculator = new FailureMechanismSectionAssemblyCalculator(factory);
// Call
FailureMechanismSectionAssembly assembly = calculator.AssembleSimpleAssessment(random.NextEnumValue());
// Assert
AssertCalculatorOutput(kernel.FailureMechanismSectionDirectResult, assembly);
}
}
[Test]
public void AssembleSimpleAssessment_KernelWithInvalidOutput_ThrowFailureMechanismSectionAssemblyCalculatorException()
{
// Setup
var random = new Random(39);
using (new AssemblyToolKernelFactoryConfig())
{
var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance;
FailureMechanismSectionAssemblyKernelStub kernel = factory.LastCreatedFailureMechanismSectionAssemblyKernel;
kernel.FailureMechanismSectionDirectResult = new FmSectionAssemblyDirectResult((EFmSectionCategory) 99,
random.NextDouble());
var calculator = new FailureMechanismSectionAssemblyCalculator(factory);
// Call
TestDelegate test = () => calculator.AssembleSimpleAssessment(random.NextEnumValue());
// Assert
var exception = Assert.Throws(test);
Exception innerException = exception.InnerException;
Assert.IsInstanceOf(innerException);
Assert.AreEqual(innerException.Message, exception.Message);
}
}
[Test]
public void AssembleSimpleAssessment_KernelThrowsException_ThrowFailureMechanismSectionAssemblyCalculatorException()
{
// Setup
var random = new Random(39);
using (new AssemblyToolKernelFactoryConfig())
{
var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance;
FailureMechanismSectionAssemblyKernelStub kernel = factory.LastCreatedFailureMechanismSectionAssemblyKernel;
kernel.ThrowExceptionOnCalculate = true;
var calculator = new FailureMechanismSectionAssemblyCalculator(factory);
// Call
TestDelegate test = () => calculator.AssembleSimpleAssessment(random.NextEnumValue());
// Assert
var exception = Assert.Throws(test);
Exception innerException = exception.InnerException;
Assert.IsNotNull(innerException);
Assert.AreEqual(innerException.Message, exception.Message);
}
}
[Test]
public void AssembleSimpleAssessmentValidityOnly_WithInvalidEnumInput_ThrowFailureMechanismSectionAssemblyCalculatorException()
{
// Setup
using (new AssemblyToolKernelFactoryConfig())
{
var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance;
var calculator = new FailureMechanismSectionAssemblyCalculator(factory);
// Call
TestDelegate test = () => calculator.AssembleSimpleAssessment((SimpleAssessmentValidityOnlyResultType) 99);
// Assert
var exception = Assert.Throws(test);
Exception innerException = exception.InnerException;
Assert.IsInstanceOf(innerException);
Assert.AreEqual(innerException.Message, exception.Message);
}
}
[Test]
public void AssembleSimpleAssessmentValidityOnly_WithValidInput_InputCorrectlySetToKernel()
{
// Setup
var random = new Random(39);
var assessmentResult = random.NextEnumValue();
using (new AssemblyToolKernelFactoryConfig())
{
var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance;
FailureMechanismSectionAssemblyKernelStub kernel = factory.LastCreatedFailureMechanismSectionAssemblyKernel;
kernel.FailureMechanismSectionDirectResult = new FmSectionAssemblyDirectResult(random.NextEnumValue(),
random.NextDouble());
var calculator = new FailureMechanismSectionAssemblyCalculator(factory);
// Call
calculator.AssembleSimpleAssessment(assessmentResult);
// Assert
Assert.AreEqual(GetAssessmentResultTypeE2(assessmentResult), kernel.AssessmentResultTypeE2Input);
}
}
[Test]
public void AssembleSimpleAssessmentValidityOnly_KernelWithCompleteOutput_OutputCorrectlyReturnedByCalculator()
{
// Setup
var random = new Random(39);
using (new AssemblyToolKernelFactoryConfig())
{
var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance;
FailureMechanismSectionAssemblyKernelStub kernel = factory.LastCreatedFailureMechanismSectionAssemblyKernel;
kernel.FailureMechanismSectionDirectResult = new FmSectionAssemblyDirectResult(random.NextEnumValue(),
random.NextDouble());
var calculator = new FailureMechanismSectionAssemblyCalculator(factory);
// Call
FailureMechanismSectionAssembly assembly = calculator.AssembleSimpleAssessment(random.NextEnumValue());
// Assert
AssertCalculatorOutput(kernel.FailureMechanismSectionDirectResult, assembly);
}
}
[Test]
public void AssembleSimpleAssessmentValidityOnly_KernelWithInvalidOutput_ThrowFailureMechanismSectionAssemblyCalculatorException()
{
// Setup
var random = new Random(39);
using (new AssemblyToolKernelFactoryConfig())
{
var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance;
FailureMechanismSectionAssemblyKernelStub kernel = factory.LastCreatedFailureMechanismSectionAssemblyKernel;
kernel.FailureMechanismSectionDirectResult = new FmSectionAssemblyDirectResult((EFmSectionCategory) 99,
random.NextDouble());
var calculator = new FailureMechanismSectionAssemblyCalculator(factory);
// Call
TestDelegate test = () => calculator.AssembleSimpleAssessment(random.NextEnumValue());
// Assert
var exception = Assert.Throws(test);
Exception innerException = exception.InnerException;
Assert.IsInstanceOf(innerException);
Assert.AreEqual(innerException.Message, exception.Message);
}
}
[Test]
public void AssembleSimpleAssessmentValidityOnly_KernelThrowsException_ThrowFailureMechanismSectionAssemblyCalculatorException()
{
// Setup
var random = new Random(39);
using (new AssemblyToolKernelFactoryConfig())
{
var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance;
FailureMechanismSectionAssemblyKernelStub kernel = factory.LastCreatedFailureMechanismSectionAssemblyKernel;
kernel.ThrowExceptionOnCalculate = true;
var calculator = new FailureMechanismSectionAssemblyCalculator(factory);
// Call
TestDelegate test = () => calculator.AssembleSimpleAssessment(random.NextEnumValue());
// Assert
var exception = Assert.Throws(test);
Assert.IsNotNull(exception.InnerException);
Assert.AreEqual(exception.InnerException.Message, exception.Message);
}
}
private static EAssessmentResultTypeE1 GetAssessmentResultTypeE1(SimpleAssessmentResultType detailedAssessmentResult)
{
switch (detailedAssessmentResult)
{
case SimpleAssessmentResultType.None:
return EAssessmentResultTypeE1.Gr;
case SimpleAssessmentResultType.NotApplicable:
return EAssessmentResultTypeE1.Nvt;
case SimpleAssessmentResultType.ProbabilityNegligible:
return EAssessmentResultTypeE1.Fv;
case SimpleAssessmentResultType.AssessFurther:
return EAssessmentResultTypeE1.Vb;
default:
throw new NotSupportedException();
}
}
private static EAssessmentResultTypeE2 GetAssessmentResultTypeE2(SimpleAssessmentValidityOnlyResultType detailedAssessmentResult)
{
switch (detailedAssessmentResult)
{
case SimpleAssessmentValidityOnlyResultType.None:
return EAssessmentResultTypeE2.Gr;
case SimpleAssessmentValidityOnlyResultType.NotApplicable:
return EAssessmentResultTypeE2.Nvt;
case SimpleAssessmentValidityOnlyResultType.Applicable:
return EAssessmentResultTypeE2.Wvt;
default:
throw new NotSupportedException();
}
}
#endregion
#region Detailed Assessment
[Test]
public void AssembleDetailedAssessmentWithResult_WithInvalidEnumInput_ThrowFailureMechanismSectionAssemblyCalculatorException()
{
// Setup
using (new AssemblyToolKernelFactoryConfig())
{
var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance;
var calculator = new FailureMechanismSectionAssemblyCalculator(factory);
// Call
TestDelegate test = () => calculator.AssembleDetailedAssessment((DetailedAssessmentResultType) 99);
// Assert
var exception = Assert.Throws(test);
Exception innerException = exception.InnerException;
Assert.IsInstanceOf(innerException);
Assert.AreEqual(innerException.Message, exception.Message);
}
}
[Test]
public void AssembleDetailedAssessmentWithResult_WithValidInput_InputCorrectlySetToKernel()
{
// Setup
var random = new Random(39);
var detailedAssessmentResult = random.NextEnumValue();
using (new AssemblyToolKernelFactoryConfig())
{
var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance;
FailureMechanismSectionAssemblyKernelStub kernel = factory.LastCreatedFailureMechanismSectionAssemblyKernel;
kernel.FailureMechanismSectionDirectResult = new FmSectionAssemblyDirectResult(random.NextEnumValue());
var calculator = new FailureMechanismSectionAssemblyCalculator(factory);
// Call
calculator.AssembleDetailedAssessment(detailedAssessmentResult);
// Assert
Assert.AreEqual(kernel.AssessmentResultTypeG1Input, GetAssessmentResultTypeG1(detailedAssessmentResult));
}
}
[Test]
public void AssembleDetailedAssessmentWithResult_KernelWithInvalidOutput_ThrowFailureMechanismSectionAssemblyCalculatorException()
{
// Setup
var random = new Random(39);
var detailedAssessmentResult = random.NextEnumValue();
using (new AssemblyToolKernelFactoryConfig())
{
var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance;
FailureMechanismSectionAssemblyKernelStub kernel = factory.LastCreatedFailureMechanismSectionAssemblyKernel;
kernel.FailureMechanismSectionDirectResult = new FmSectionAssemblyDirectResult((EFmSectionCategory) 99);
var calculator = new FailureMechanismSectionAssemblyCalculator(factory);
// Call
TestDelegate test = () => calculator.AssembleDetailedAssessment(detailedAssessmentResult);
// Assert
var exception = Assert.Throws(test);
Exception innerException = exception.InnerException;
Assert.IsInstanceOf(innerException);
Assert.AreEqual(innerException.Message, exception.Message);
}
}
[Test]
public void AssembleDetailedAssessmentWithResult_KernelWithCompleteOutput_OutputCorrectlyReturnedByCalculator()
{
// Setup
var random = new Random(39);
using (new AssemblyToolKernelFactoryConfig())
{
var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance;
FailureMechanismSectionAssemblyKernelStub kernel = factory.LastCreatedFailureMechanismSectionAssemblyKernel;
kernel.FailureMechanismSectionDirectResult = new FmSectionAssemblyDirectResult(random.NextEnumValue());
var calculator = new FailureMechanismSectionAssemblyCalculator(factory);
// Call
FailureMechanismSectionAssemblyCategoryGroup assembly = calculator.AssembleDetailedAssessment(
random.NextEnumValue());
// Assert
Assert.AreEqual(GetGroup(kernel.FailureMechanismSectionDirectResult.Result), assembly);
}
}
[Test]
public void AssembleDetailedAssessmentWithResult_KernelThrowsException_ThrowFailureMechanismSectionAssemblyCalculatorException()
{
// Setup
var random = new Random(39);
using (new AssemblyToolKernelFactoryConfig())
{
var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance;
FailureMechanismSectionAssemblyKernelStub kernel = factory.LastCreatedFailureMechanismSectionAssemblyKernel;
kernel.ThrowExceptionOnCalculate = true;
var calculator = new FailureMechanismSectionAssemblyCalculator(factory);
// Call
TestDelegate test = () => calculator.AssembleDetailedAssessment(
random.NextEnumValue());
// Assert
var exception = Assert.Throws(test);
Exception innerException = exception.InnerException;
Assert.IsNotNull(innerException);
Assert.AreEqual(innerException.Message, exception.Message);
}
}
[Test]
public void AssembleDetailedAssessment_WithInvalidEnumInput_ThrowInvalidEnumArgumentException()
{
// Setup
var random = new Random(39);
using (new AssemblyToolKernelFactoryConfig())
{
var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance;
var calculator = new FailureMechanismSectionAssemblyCalculator(factory);
// Call
TestDelegate test = () => calculator.AssembleDetailedAssessment(
(DetailedAssessmentProbabilityOnlyResultType) 99,
random.NextDouble(),
new AssessmentSection(random.NextDouble(), random.NextDouble(0.0, 0.5), random.NextDouble(0.5, 1.0)),
new FailureMechanism(random.NextDouble(1, 5), random.NextDouble()));
// Assert
var exception = Assert.Throws(test);
Exception innerException = exception.InnerException;
Assert.IsInstanceOf(innerException);
Assert.AreEqual(innerException.Message, exception.Message);
}
}
[Test]
public void AssembleDetailedAssessment_WithValidInput_InputCorrectlySetToKernel()
{
// Setup
var random = new Random(39);
double probability = random.NextDouble();
var detailedAssessment = random.NextEnumValue();
var assessmentSection = new AssessmentSection(random.NextDouble(), random.NextDouble(0.0, 0.4), random.NextDouble(0.5, 0.9));
var failureMechanism = new FailureMechanism(random.NextDouble(1, 5), random.NextDouble());
using (new AssemblyToolKernelFactoryConfig())
{
var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance;
FailureMechanismSectionAssemblyKernelStub kernel = factory.LastCreatedFailureMechanismSectionAssemblyKernel;
kernel.FailureMechanismSectionDirectResult = new FmSectionAssemblyDirectResult(random.NextEnumValue(),
random.NextDouble());
var calculator = new FailureMechanismSectionAssemblyCalculator(factory);
// Call
calculator.AssembleDetailedAssessment(
detailedAssessment,
probability,
assessmentSection,
failureMechanism);
// Assert
Assert.AreEqual(probability, kernel.FailureProbabilityInput);
Assert.AreEqual(GetAssessmentResultTypeG2(detailedAssessment), kernel.AssessmentResultTypeG2Input);
Assert.AreSame(assessmentSection, kernel.AssessmentSectionInput);
Assert.AreSame(failureMechanism, kernel.FailureMechanismInput);
}
}
[Test]
public void AssembleDetailedAssessment_KernelWithCompleteOutput_OutputCorrectlyReturnedByCalculator()
{
// Setup
var random = new Random(39);
using (new AssemblyToolKernelFactoryConfig())
{
var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance;
FailureMechanismSectionAssemblyKernelStub kernel = factory.LastCreatedFailureMechanismSectionAssemblyKernel;
kernel.FailureMechanismSectionDirectResult = new FmSectionAssemblyDirectResult(random.NextEnumValue(),
random.NextDouble());
var calculator = new FailureMechanismSectionAssemblyCalculator(factory);
// Call
FailureMechanismSectionAssembly assembly = calculator.AssembleDetailedAssessment(
random.NextEnumValue(),
random.NextDouble(),
new AssessmentSection(random.NextDouble(), random.NextDouble(0.0, 0.5), random.NextDouble(0.5, 1.0)),
new FailureMechanism(random.NextDouble(1, 5), random.NextDouble()));
// Assert
AssertCalculatorOutput(kernel.FailureMechanismSectionDirectResult, assembly);
}
}
[Test]
public void AssembleDetailedAssessment_KernelWithInvalidOutput_ThrowFailureMechanismSectionAssemblyCalculatorException()
{
// Setup
var random = new Random(39);
using (new AssemblyToolKernelFactoryConfig())
{
var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance;
FailureMechanismSectionAssemblyKernelStub kernel = factory.LastCreatedFailureMechanismSectionAssemblyKernel;
kernel.FailureMechanismSectionDirectResult = new FmSectionAssemblyDirectResult((EFmSectionCategory) 99);
var calculator = new FailureMechanismSectionAssemblyCalculator(factory);
// Call
TestDelegate test = () => calculator.AssembleDetailedAssessment(
random.NextEnumValue(),
random.NextDouble(),
new AssessmentSection(random.NextDouble(), random.NextDouble(0.0, 0.4), random.NextDouble(0.5, 0.9)),
new FailureMechanism(random.NextDouble(1, 5), random.NextDouble()));
// Assert
var exception = Assert.Throws(test);
Exception innerException = exception.InnerException;
Assert.IsInstanceOf(innerException);
Assert.AreEqual(innerException.Message, exception.Message);
}
}
[Test]
public void AssembleDetailedAssessment_KernelThrowsException_ThrowFailureMechanismSectionAssemblyCalculatorException()
{
// Setup
var random = new Random(39);
using (new AssemblyToolKernelFactoryConfig())
{
var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance;
FailureMechanismSectionAssemblyKernelStub kernel = factory.LastCreatedFailureMechanismSectionAssemblyKernel;
kernel.ThrowExceptionOnCalculate = true;
var calculator = new FailureMechanismSectionAssemblyCalculator(factory);
// Call
TestDelegate test = () => calculator.AssembleDetailedAssessment(
random.NextEnumValue(),
random.NextDouble(),
new AssessmentSection(random.NextDouble(), random.NextDouble(0.0, 0.4), random.NextDouble(0.5, 0.9)),
new FailureMechanism(random.NextDouble(1, 5), random.NextDouble()));
// Assert
var exception = Assert.Throws(test);
Exception innerException = exception.InnerException;
Assert.IsNotNull(innerException);
Assert.AreEqual(innerException.Message, exception.Message);
}
}
[Test]
public void AssembleDetailedAssessmentWithLengthEffect_WithInvalidEnumInput_ThrowInvalidEnumArgumentException()
{
// Setup
var random = new Random(39);
using (new AssemblyToolKernelFactoryConfig())
{
var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance;
var calculator = new FailureMechanismSectionAssemblyCalculator(factory);
// Call
TestDelegate test = () => calculator.AssembleDetailedAssessment(
(DetailedAssessmentProbabilityOnlyResultType) 99,
random.NextDouble(),
random.NextDouble(),
new AssessmentSection(random.NextDouble(), random.NextDouble(0.0, 0.5), random.NextDouble(0.5, 1.0)),
new FailureMechanism(random.NextDouble(1, 5), random.NextDouble()));
// Assert
var exception = Assert.Throws(test);
Exception innerException = exception.InnerException;
Assert.IsInstanceOf(innerException);
Assert.AreEqual(innerException.Message, exception.Message);
}
}
[Test]
public void AssembleDetailedAssessmentWithLengthEffect_WithValidInput_InputCorrectlySetToKernel()
{
// Setup
var random = new Random(39);
double probability = random.NextDouble();
double n = random.NextDouble();
var detailedAssessment = random.NextEnumValue();
var assessmentSection = new AssessmentSection(random.NextDouble(), random.NextDouble(0.0, 0.5), random.NextDouble(0.5, 1.0));
var failureMechanism = new FailureMechanism(random.NextDouble(1, 5), random.NextDouble());
using (new AssemblyToolKernelFactoryConfig())
{
var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance;
FailureMechanismSectionAssemblyKernelStub kernel = factory.LastCreatedFailureMechanismSectionAssemblyKernel;
var calculator = new FailureMechanismSectionAssemblyCalculator(factory);
// Call
calculator.AssembleDetailedAssessment(
detailedAssessment,
probability,
n,
assessmentSection,
failureMechanism);
// Assert
Assert.AreEqual(probability, kernel.FailureProbabilityInput);
Assert.AreEqual(n, kernel.LengthEffectFactorInput);
Assert.AreEqual(GetAssessmentResultTypeG2(detailedAssessment), kernel.AssessmentResultTypeG2Input);
Assert.AreSame(assessmentSection, kernel.AssessmentSectionInput);
Assert.AreSame(failureMechanism, kernel.FailureMechanismInput);
}
}
[Test]
public void AssembleDetailedAssessmentWithLengthEffect_KernelWithCompleteOutput_OutputCorrectlyReturnedByCalculator()
{
// Setup
var random = new Random(39);
using (new AssemblyToolKernelFactoryConfig())
{
var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance;
FailureMechanismSectionAssemblyKernelStub kernel = factory.LastCreatedFailureMechanismSectionAssemblyKernel;
kernel.FailureMechanismSectionDirectResult = new FmSectionAssemblyDirectResult(random.NextEnumValue(),
random.NextDouble());
var calculator = new FailureMechanismSectionAssemblyCalculator(factory);
// Call
FailureMechanismSectionAssembly assembly = calculator.AssembleDetailedAssessment(
random.NextEnumValue(),
random.NextDouble(),
random.NextDouble(),
new AssessmentSection(random.NextDouble(), random.NextDouble(0.0, 0.4), random.NextDouble(0.5, 0.9)),
new FailureMechanism(random.NextDouble(1, 5), random.NextDouble()));
// Assert
AssertCalculatorOutput(kernel.FailureMechanismSectionDirectResult, assembly);
}
}
[Test]
public void AssembleDetailedAssessmentWithLengthEffect_KernelWithInvalidOutput_ThrowFailureMechanismSectionAssemblyCalculatorException()
{
// Setup
var random = new Random(39);
using (new AssemblyToolKernelFactoryConfig())
{
var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance;
FailureMechanismSectionAssemblyKernelStub kernel = factory.LastCreatedFailureMechanismSectionAssemblyKernel;
kernel.FailureMechanismSectionDirectResult = new FmSectionAssemblyDirectResult((EFmSectionCategory) 99);
var calculator = new FailureMechanismSectionAssemblyCalculator(factory);
// Call
TestDelegate test = () => calculator.AssembleDetailedAssessment(
random.NextEnumValue(),
random.NextDouble(),
random.NextDouble(),
new AssessmentSection(random.NextDouble(), random.NextDouble(0.0, 0.4), random.NextDouble(0.5, 0.9)),
new FailureMechanism(random.NextDouble(1, 5), random.NextDouble()));
// Assert
var exception = Assert.Throws(test);
Exception innerException = exception.InnerException;
Assert.IsInstanceOf(innerException);
Assert.AreEqual(innerException.Message, exception.Message);
}
}
[Test]
public void AssembleDetailedAssessmentWithLengthEffect_KernelThrowsException_ThrowFailureMechanismSectionAssemblyCalculatorException()
{
// Setup
var random = new Random(39);
using (new AssemblyToolKernelFactoryConfig())
{
var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance;
FailureMechanismSectionAssemblyKernelStub kernel = factory.LastCreatedFailureMechanismSectionAssemblyKernel;
kernel.ThrowExceptionOnCalculate = true;
var calculator = new FailureMechanismSectionAssemblyCalculator(factory);
// Call
TestDelegate test = () => calculator.AssembleDetailedAssessment(
random.NextEnumValue(),
random.NextDouble(),
random.NextDouble(),
new AssessmentSection(random.NextDouble(), random.NextDouble(0.0, 0.4), random.NextDouble(0.5, 0.9)),
new FailureMechanism(random.NextDouble(1, 5), random.NextDouble()));
// Assert
var exception = Assert.Throws(test);
Exception innerException = exception.InnerException;
Assert.IsNotNull(innerException);
Assert.AreEqual(innerException.Message, exception.Message);
}
}
[Test]
public void AssembleDetailedAssessmentWithCategoryResults_WithInvalidEnumInput_ThrowFailureMechanismSectionAssemblyCalculatorException()
{
// Setup
var random = new Random(39);
using (new AssemblyToolKernelFactoryConfig())
{
var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance;
var calculator = new FailureMechanismSectionAssemblyCalculator(factory);
// Call
TestDelegate test = () => calculator.AssembleDetailedAssessment(
(DetailedAssessmentResultType) 99,
random.NextEnumValue(),
random.NextEnumValue(),
random.NextEnumValue(),
random.NextEnumValue());
// Assert
var exception = Assert.Throws(test);
Exception innerException = exception.InnerException;
Assert.IsInstanceOf(innerException);
Assert.AreEqual(innerException.Message, exception.Message);
}
}
[Test]
public void AssembleDetailedAssessmentWithCategoryResults_WithValidInput_InputCorrectlySetToKernel()
{
// 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();
using (new AssemblyToolKernelFactoryConfig())
{
var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance;
FailureMechanismSectionAssemblyKernelStub kernel = factory.LastCreatedFailureMechanismSectionAssemblyKernel;
var calculator = new FailureMechanismSectionAssemblyCalculator(factory);
// Call
calculator.AssembleDetailedAssessment(detailedAssessmentResultForFactorizedSignalingNorm,
detailedAssessmentResultForSignalingNorm,
detailedAssessmentResultForMechanismSpecificLowerLimitNorm,
detailedAssessmentResultForLowerLimitNorm,
detailedAssessmentResultForFactorizedLowerLimitNorm);
// Assert
Dictionary results = kernel.CategoryCompliancyResultsInput.GetCompliancyResults();
Assert.AreEqual(results[EFmSectionCategory.Iv], GetCategoryCompliance(detailedAssessmentResultForFactorizedSignalingNorm));
Assert.AreEqual(results[EFmSectionCategory.IIv], GetCategoryCompliance(detailedAssessmentResultForSignalingNorm));
Assert.AreEqual(results[EFmSectionCategory.IIIv], GetCategoryCompliance(detailedAssessmentResultForMechanismSpecificLowerLimitNorm));
Assert.AreEqual(results[EFmSectionCategory.IVv], GetCategoryCompliance(detailedAssessmentResultForLowerLimitNorm));
Assert.AreEqual(results[EFmSectionCategory.Vv], GetCategoryCompliance(detailedAssessmentResultForFactorizedLowerLimitNorm));
}
}
[Test]
public void AssembleDetailedAssessmentWithCategoryResults_KernelWithInvalidOutput_ThrowFailureMechanismSectionAssemblyCalculatorException()
{
// 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();
using (new AssemblyToolKernelFactoryConfig())
{
var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance;
FailureMechanismSectionAssemblyKernelStub kernel = factory.LastCreatedFailureMechanismSectionAssemblyKernel;
kernel.FailureMechanismSectionDirectResult = new FmSectionAssemblyDirectResult((EFmSectionCategory) 99);
var calculator = new FailureMechanismSectionAssemblyCalculator(factory);
// Call
TestDelegate test = () => calculator.AssembleDetailedAssessment(
detailedAssessmentResultForFactorizedSignalingNorm,
detailedAssessmentResultForSignalingNorm,
detailedAssessmentResultForMechanismSpecificLowerLimitNorm,
detailedAssessmentResultForLowerLimitNorm,
detailedAssessmentResultForFactorizedLowerLimitNorm);
// Assert
var exception = Assert.Throws(test);
Exception innerException = exception.InnerException;
Assert.IsInstanceOf(innerException);
Assert.AreEqual(innerException.Message, exception.Message);
}
}
[Test]
public void AssembleDetailedAssessmentWithCategoryResults_KernelWithCompleteOutput_OutputCorrectlyReturnedByCalculator()
{
// Setup
var random = new Random(39);
using (new AssemblyToolKernelFactoryConfig())
{
var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance;
FailureMechanismSectionAssemblyKernelStub kernel = factory.LastCreatedFailureMechanismSectionAssemblyKernel;
kernel.FailureMechanismSectionDirectResult = new FmSectionAssemblyDirectResult(random.NextEnumValue());
var calculator = new FailureMechanismSectionAssemblyCalculator(factory);
// Call
FailureMechanismSectionAssemblyCategoryGroup assembly = calculator.AssembleDetailedAssessment(
random.NextEnumValue(),
random.NextEnumValue(),
random.NextEnumValue(),
random.NextEnumValue(),
random.NextEnumValue());
// Assert
Assert.AreEqual(GetGroup(kernel.FailureMechanismSectionDirectResult.Result), assembly);
}
}
[Test]
public void AssembleDetailedAssessmentWithCategoryResults_KernelThrowsException_ThrowFailureMechanismSectionAssemblyCalculatorException()
{
// Setup
var random = new Random(39);
using (new AssemblyToolKernelFactoryConfig())
{
var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance;
FailureMechanismSectionAssemblyKernelStub kernel = factory.LastCreatedFailureMechanismSectionAssemblyKernel;
kernel.ThrowExceptionOnCalculate = true;
var calculator = new FailureMechanismSectionAssemblyCalculator(factory);
// Call
TestDelegate test = () => calculator.AssembleDetailedAssessment(
random.NextEnumValue(),
random.NextEnumValue(),
random.NextEnumValue(),
random.NextEnumValue(),
random.NextEnumValue());
// Assert
var exception = Assert.Throws(test);
Exception innerException = exception.InnerException;
Assert.IsNotNull(innerException);
Assert.AreEqual(innerException.Message, exception.Message);
}
}
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();
}
}
private static EAssessmentResultTypeG2 GetAssessmentResultTypeG2(DetailedAssessmentProbabilityOnlyResultType detailedAssessmentResult)
{
switch (detailedAssessmentResult)
{
case DetailedAssessmentProbabilityOnlyResultType.Probability:
return EAssessmentResultTypeG2.ResultSpecified;
case DetailedAssessmentProbabilityOnlyResultType.NotAssessed:
return EAssessmentResultTypeG2.Ngo;
default:
throw new NotSupportedException();
}
}
private static ECategoryCompliancy GetCategoryCompliance(DetailedAssessmentResultType detailedAssessmentResult)
{
switch (detailedAssessmentResult)
{
case DetailedAssessmentResultType.None:
return ECategoryCompliancy.NoResult;
case DetailedAssessmentResultType.Sufficient:
return ECategoryCompliancy.Complies;
case DetailedAssessmentResultType.Insufficient:
return ECategoryCompliancy.DoesNotComply;
case DetailedAssessmentResultType.NotAssessed:
return ECategoryCompliancy.Ngo;
default:
throw new NotSupportedException();
}
}
#endregion
#region Tailor Made Assessment
[Test]
public void AssembleTailorMadeAssessmentWithResult_WithInvalidEnumInput_ThrowFailureMechanismSectionAssemblyCalculatorException()
{
// Setup
using (new AssemblyToolKernelFactoryConfig())
{
var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance;
var calculator = new FailureMechanismSectionAssemblyCalculator(factory);
// Call
TestDelegate test = () => calculator.AssembleTailorMadeAssessment((TailorMadeAssessmentResultType) 99);
// Assert
var exception = Assert.Throws(test);
Exception innerException = exception.InnerException;
Assert.IsInstanceOf(innerException);
Assert.AreEqual(innerException.Message, exception.Message);
}
}
[Test]
public void AssembleTailorMadeAssessmentWithResult_WithValidInput_InputCorrectlySetToKernel()
{
// Setup
var random = new Random(39);
var tailorMadeAssessmentResult = random.NextEnumValue();
using (new AssemblyToolKernelFactoryConfig())
{
var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance;
FailureMechanismSectionAssemblyKernelStub kernel = factory.LastCreatedFailureMechanismSectionAssemblyKernel;
kernel.FailureMechanismSectionDirectResult = new FmSectionAssemblyDirectResult(random.NextEnumValue(),
random.NextDouble());
var calculator = new FailureMechanismSectionAssemblyCalculator(factory);
// Call
calculator.AssembleTailorMadeAssessment(tailorMadeAssessmentResult);
// Assert
Assert.AreEqual(kernel.AssessmentResultTypeT1Input, GetAssessmentResultTypeT1(tailorMadeAssessmentResult));
}
}
[Test]
public void AssembleTailorMadeAssessmentWithResult_KernelWithInvalidOutput_ThrowFailureMechanismSectionAssemblyCalculatorException()
{
// Setup
var random = new Random(39);
var tailorMadeAssessmentResult = random.NextEnumValue();
using (new AssemblyToolKernelFactoryConfig())
{
var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance;
FailureMechanismSectionAssemblyKernelStub kernel = factory.LastCreatedFailureMechanismSectionAssemblyKernel;
kernel.FailureMechanismSectionDirectResult = new FmSectionAssemblyDirectResult((EFmSectionCategory) 99);
var calculator = new FailureMechanismSectionAssemblyCalculator(factory);
// Call
TestDelegate test = () => calculator.AssembleTailorMadeAssessment(tailorMadeAssessmentResult);
// Assert
var exception = Assert.Throws(test);
Exception innerException = exception.InnerException;
Assert.IsInstanceOf(innerException);
Assert.AreEqual(innerException.Message, exception.Message);
}
}
[Test]
public void AssembleTailorMadeAssessmentWithResult_KernelWithCompleteOutput_OutputCorrectlyReturnedByCalculator()
{
// Setup
var random = new Random(39);
using (new AssemblyToolKernelFactoryConfig())
{
var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance;
FailureMechanismSectionAssemblyKernelStub kernel = factory.LastCreatedFailureMechanismSectionAssemblyKernel;
kernel.FailureMechanismSectionDirectResult = new FmSectionAssemblyDirectResult(random.NextEnumValue());
var calculator = new FailureMechanismSectionAssemblyCalculator(factory);
// Call
FailureMechanismSectionAssemblyCategoryGroup assembly = calculator.AssembleTailorMadeAssessment(
random.NextEnumValue());
// Assert
Assert.AreEqual(GetGroup(kernel.FailureMechanismSectionDirectResult.Result), assembly);
}
}
[Test]
public void AssembleTailorMadeAssessmentWithResult_KernelThrowsException_ThrowFailureMechanismSectionAssemblyCalculatorException()
{
// Setup
var random = new Random(39);
using (new AssemblyToolKernelFactoryConfig())
{
var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance;
FailureMechanismSectionAssemblyKernelStub kernel = factory.LastCreatedFailureMechanismSectionAssemblyKernel;
kernel.ThrowExceptionOnCalculate = true;
var calculator = new FailureMechanismSectionAssemblyCalculator(factory);
// Call
TestDelegate test = () => calculator.AssembleTailorMadeAssessment(
random.NextEnumValue());
// Assert
var exception = Assert.Throws(test);
Exception innerException = exception.InnerException;
Assert.IsNotNull(innerException);
Assert.AreEqual(innerException.Message, exception.Message);
}
}
[Test]
public void AssembleTailorMadeAssessmentWithProbabilityAndDetailedCalculationResult_WithInvalidEnumInput_ThrowFailureMechanismSectionAssemblyCalculatorException()
{
// Setup
var random = new Random(39);
using (new AssemblyToolKernelFactoryConfig())
{
var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance;
var calculator = new FailureMechanismSectionAssemblyCalculator(factory);
// Call
TestDelegate test = () => calculator.AssembleTailorMadeAssessment(
(TailorMadeAssessmentProbabilityAndDetailedCalculationResultType) 99,
random.NextDouble(),
new AssessmentSection(random.NextDouble(), random.NextDouble(0.0, 0.4), random.NextDouble(0.5, 0.9)),
new FailureMechanism(random.NextDouble(1, 5), random.NextDouble()));
// Assert
var exception = Assert.Throws(test);
Exception innerException = exception.InnerException;
Assert.IsInstanceOf(innerException);
Assert.AreEqual(innerException.Message, exception.Message);
}
}
[Test]
public void AssembleTailorMadeAssessmentWithProbabilityAndDetailedCalculationResult_WithValidInput_InputCorrectlySetToKernel()
{
// Setup
var random = new Random(39);
var tailorMadeAssessmentResult = random.NextEnumValue();
double probability = random.NextDouble();
var assessmentSection = new AssessmentSection(random.NextDouble(), random.NextDouble(0.0, 0.4), random.NextDouble(0.5, 0.9));
var failureMechanism = new FailureMechanism(random.NextDouble(1, 5), random.NextDouble());
using (new AssemblyToolKernelFactoryConfig())
{
var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance;
FailureMechanismSectionAssemblyKernelStub kernel = factory.LastCreatedFailureMechanismSectionAssemblyKernel;
var calculator = new FailureMechanismSectionAssemblyCalculator(factory);
// Call
calculator.AssembleTailorMadeAssessment(tailorMadeAssessmentResult, probability, assessmentSection, failureMechanism);
// Assert
//Assert.AreEqual(GetAssessmentResultTypeT4(tailorMadeAssessmentResult), kernel.AssessmentResultTypeT4Input);
Assert.AreEqual(probability, kernel.FailureProbabilityInput);
Assert.AreSame(assessmentSection, kernel.AssessmentSectionInput);
Assert.AreSame(failureMechanism, kernel.FailureMechanismInput);
}
}
[Test]
public void AssembleTailorMadeAssessmentWithProbabilityAndDetailedCalculationResult_KernelWithCompleteOutput_OutputCorrectlyReturnedByCalculator()
{
// Setup
var random = new Random(39);
using (new AssemblyToolKernelFactoryConfig())
{
var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance;
FailureMechanismSectionAssemblyKernelStub kernel = factory.LastCreatedFailureMechanismSectionAssemblyKernel;
kernel.FailureMechanismSectionDirectResult = new FmSectionAssemblyDirectResult(random.NextEnumValue(),
random.NextDouble());
var calculator = new FailureMechanismSectionAssemblyCalculator(factory);
// Call
FailureMechanismSectionAssembly assembly = calculator.AssembleTailorMadeAssessment(
random.NextEnumValue(),
random.NextDouble(),
new AssessmentSection(random.NextDouble(), random.NextDouble(0.0, 0.4), random.NextDouble(0.5, 0.9)),
new FailureMechanism(random.NextDouble(1, 5), random.NextDouble()));
// Assert
AssertCalculatorOutput(kernel.FailureMechanismSectionDirectResult, assembly);
}
}
[Test]
public void AssembleTailorMadeAssessmentWithProbabilityAndDetailedCalculationResult_KernelWithInvalidOutput_ThrowFailureMechanismSectionAssemblyCalculatorException()
{
// Setup
var random = new Random(39);
using (new AssemblyToolKernelFactoryConfig())
{
var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance;
FailureMechanismSectionAssemblyKernelStub kernel = factory.LastCreatedFailureMechanismSectionAssemblyKernel;
kernel.FailureMechanismSectionDirectResult = new FmSectionAssemblyDirectResult((EFmSectionCategory) 99,
random.NextDouble());
var calculator = new FailureMechanismSectionAssemblyCalculator(factory);
// Call
TestDelegate test = () => calculator.AssembleTailorMadeAssessment(
random.NextEnumValue(),
random.NextDouble(),
new AssessmentSection(random.NextDouble(), random.NextDouble(0.0, 0.4), random.NextDouble(0.5, 0.9)),
new FailureMechanism(random.NextDouble(1, 5), random.NextDouble()));
// Assert
var exception = Assert.Throws(test);
Exception innerException = exception.InnerException;
Assert.IsInstanceOf(innerException);
Assert.AreEqual(innerException.Message, exception.Message);
}
}
[Test]
public void AssembleTailorMadeAssessmentWithProbabilityAndDetailedCalculationResult_KernelThrowsException_ThrowFailureMechanismSectionAssemblyCalculatorException()
{
// Setup
var random = new Random(39);
using (new AssemblyToolKernelFactoryConfig())
{
var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance;
FailureMechanismSectionAssemblyKernelStub kernel = factory.LastCreatedFailureMechanismSectionAssemblyKernel;
kernel.ThrowExceptionOnCalculate = true;
var calculator = new FailureMechanismSectionAssemblyCalculator(factory);
// Call
TestDelegate test = () => calculator.AssembleTailorMadeAssessment(
random.NextEnumValue(),
random.NextDouble(),
new AssessmentSection(random.NextDouble(), random.NextDouble(0.0, 0.4), random.NextDouble(0.5, 0.9)),
new FailureMechanism(random.NextDouble(1, 5), random.NextDouble()));
// Assert
var exception = Assert.Throws(test);
Exception innerException = exception.InnerException;
Assert.IsNotNull(innerException);
Assert.AreEqual(innerException.Message, exception.Message);
}
}
[Test]
public void AssembleTailorMadeAssessment_WithInvalidEnumInput_ThrowFailureMechanismSectionAssemblyCalculatorException()
{
// Setup
var random = new Random(39);
using (new AssemblyToolKernelFactoryConfig())
{
var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance;
var calculator = new FailureMechanismSectionAssemblyCalculator(factory);
// Call
TestDelegate test = () => calculator.AssembleTailorMadeAssessment(
(TailorMadeAssessmentProbabilityCalculationResultType) 99,
random.NextDouble(),
new AssessmentSection(random.NextDouble(), random.NextDouble(0.0, 0.4), random.NextDouble(0.5, 0.9)),
new FailureMechanism(random.NextDouble(1, 5), random.NextDouble()));
// Assert
var exception = Assert.Throws(test);
Exception innerException = exception.InnerException;
Assert.IsInstanceOf(innerException);
Assert.AreEqual(innerException.Message, exception.Message);
}
}
[Test]
public void AssembleTailorMadeAssessment_WithValidInput_InputCorrectlySetToKernel()
{
// Setup
var random = new Random(39);
var tailorMadeAssessmentResult = random.NextEnumValue();
double probability = random.NextDouble();
var assessmentSection = new AssessmentSection(random.NextDouble(), random.NextDouble(0.0, 0.4), random.NextDouble(0.5, 0.9));
var failureMechanism = new FailureMechanism(random.NextDouble(1, 5), random.NextDouble());
using (new AssemblyToolKernelFactoryConfig())
{
var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance;
FailureMechanismSectionAssemblyKernelStub kernel = factory.LastCreatedFailureMechanismSectionAssemblyKernel;
kernel.FailureMechanismSectionDirectResult = new FmSectionAssemblyDirectResult(random.NextEnumValue(),
random.NextDouble());
var calculator = new FailureMechanismSectionAssemblyCalculator(factory);
// Call
calculator.AssembleTailorMadeAssessment(tailorMadeAssessmentResult, probability, assessmentSection, failureMechanism);
// Assert
Assert.AreEqual(GetAssessmentResultTypeT3(tailorMadeAssessmentResult), kernel.AssessmentResultTypeT3Input);
Assert.AreEqual(probability, kernel.FailureProbabilityInput);
Assert.AreSame(assessmentSection, kernel.AssessmentSectionInput);
Assert.AreSame(failureMechanism, kernel.FailureMechanismInput);
}
}
[Test]
public void AssembleTailorMadeAssessment_KernelWithCompleteOutput_OutputCorrectlyReturnedByCalculator()
{
// Setup
var random = new Random(39);
using (new AssemblyToolKernelFactoryConfig())
{
var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance;
FailureMechanismSectionAssemblyKernelStub kernel = factory.LastCreatedFailureMechanismSectionAssemblyKernel;
kernel.FailureMechanismSectionDirectResult = new FmSectionAssemblyDirectResult(random.NextEnumValue(),
random.NextDouble());
var calculator = new FailureMechanismSectionAssemblyCalculator(factory);
// Call
FailureMechanismSectionAssembly assembly = calculator.AssembleTailorMadeAssessment(
random.NextEnumValue(),
random.NextDouble(),
new AssessmentSection(random.NextDouble(), random.NextDouble(0.0, 0.4), random.NextDouble(0.5, 0.9)),
new FailureMechanism(random.NextDouble(1, 5), random.NextDouble()));
// Assert
AssertCalculatorOutput(kernel.FailureMechanismSectionDirectResult, assembly);
}
}
[Test]
public void AssembleTailorMadeAssessment_KernelWithInvalidOutput_ThrowFailureMechanismSectionAssemblyCalculatorException()
{
// Setup
var random = new Random(39);
using (new AssemblyToolKernelFactoryConfig())
{
var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance;
FailureMechanismSectionAssemblyKernelStub kernel = factory.LastCreatedFailureMechanismSectionAssemblyKernel;
kernel.FailureMechanismSectionDirectResult = new FmSectionAssemblyDirectResult((EFmSectionCategory) 99,
random.NextDouble());
var calculator = new FailureMechanismSectionAssemblyCalculator(factory);
// Call
TestDelegate test = () => calculator.AssembleTailorMadeAssessment(
random.NextEnumValue(),
random.NextDouble(),
new AssessmentSection(random.NextDouble(), random.NextDouble(0.0, 0.4), random.NextDouble(0.5, 0.9)),
new FailureMechanism(random.NextDouble(1, 5), random.NextDouble()));
// Assert
var exception = Assert.Throws(test);
Exception innerException = exception.InnerException;
Assert.IsInstanceOf(innerException);
Assert.AreEqual(innerException.Message, exception.Message);
}
}
[Test]
public void AssembleTailorMadeAssessment_KernelThrowsException_ThrowFailureMechanismSectionAssemblyCalculatorException()
{
// Setup
var random = new Random(39);
using (new AssemblyToolKernelFactoryConfig())
{
var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance;
FailureMechanismSectionAssemblyKernelStub kernel = factory.LastCreatedFailureMechanismSectionAssemblyKernel;
kernel.ThrowExceptionOnCalculate = true;
var calculator = new FailureMechanismSectionAssemblyCalculator(factory);
// Call
TestDelegate test = () => calculator.AssembleTailorMadeAssessment(
random.NextEnumValue(),
random.NextDouble(),
new AssessmentSection(random.NextDouble(), random.NextDouble(0.0, 0.4), random.NextDouble(0.5, 0.9)),
new FailureMechanism(random.NextDouble(1, 5), random.NextDouble()));
// Assert
var exception = Assert.Throws(test);
Exception innerException = exception.InnerException;
Assert.IsNotNull(innerException);
Assert.AreEqual(innerException.Message, exception.Message);
}
}
[Test]
public void AssembleTailorMadeAssessmentWithLengthEffect_WithInvalidEnumInput_ThrowFailureMechanismSectionAssemblyCalculatorException()
{
// Setup
var random = new Random(39);
using (new AssemblyToolKernelFactoryConfig())
{
var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance;
var calculator = new FailureMechanismSectionAssemblyCalculator(factory);
// Call
TestDelegate test = () => calculator.AssembleTailorMadeAssessment(
(TailorMadeAssessmentProbabilityCalculationResultType) 99,
random.NextDouble(),
random.NextDouble(),
new AssessmentSection(random.NextDouble(), random.NextDouble(0.0, 0.4), random.NextDouble(0.5, 0.9)),
new FailureMechanism(random.NextDouble(1, 5), random.NextDouble()));
// Assert
var exception = Assert.Throws(test);
Exception innerException = exception.InnerException;
Assert.IsInstanceOf(innerException);
Assert.AreEqual(innerException.Message, exception.Message);
}
}
[Test]
public void AssembleTailorMadeAssessmentWithLengthEffect_WithValidInput_InputCorrectlySetToKernel()
{
// Setup
var random = new Random(39);
var tailorMadeAssessmentResult = random.NextEnumValue();
double probability = random.NextDouble();
double n = random.NextDouble();
var assessmentSection = new AssessmentSection(random.NextDouble(), random.NextDouble(0.0, 0.4), random.NextDouble(0.5, 0.9));
var failureMechanism = new FailureMechanism(random.NextDouble(1, 5), random.NextDouble());
using (new AssemblyToolKernelFactoryConfig())
{
var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance;
FailureMechanismSectionAssemblyKernelStub kernel = factory.LastCreatedFailureMechanismSectionAssemblyKernel;
kernel.FailureMechanismSectionDirectResult = new FmSectionAssemblyDirectResult(random.NextEnumValue(),
random.NextDouble());
var calculator = new FailureMechanismSectionAssemblyCalculator(factory);
// Call
calculator.AssembleTailorMadeAssessment(tailorMadeAssessmentResult, probability, n, assessmentSection, failureMechanism);
// Assert
Assert.AreEqual(GetAssessmentResultTypeT3(tailorMadeAssessmentResult), kernel.AssessmentResultTypeT3Input);
Assert.AreEqual(probability, kernel.FailureProbabilityInput);
Assert.AreEqual(n, kernel.LengthEffectFactorInput);
Assert.AreSame(assessmentSection, kernel.AssessmentSectionInput);
Assert.AreSame(failureMechanism, kernel.FailureMechanismInput);
}
}
[Test]
public void AssembleTailorMadeAssessmentWithLengthEffect_KernelWithCompleteOutput_OutputCorrectlyReturnedByCalculator()
{
// Setup
var random = new Random(39);
using (new AssemblyToolKernelFactoryConfig())
{
var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance;
FailureMechanismSectionAssemblyKernelStub kernel = factory.LastCreatedFailureMechanismSectionAssemblyKernel;
kernel.FailureMechanismSectionDirectResult = new FmSectionAssemblyDirectResult(random.NextEnumValue(),
random.NextDouble());
var calculator = new FailureMechanismSectionAssemblyCalculator(factory);
// Call
FailureMechanismSectionAssembly assembly = calculator.AssembleTailorMadeAssessment(
random.NextEnumValue(),
random.NextDouble(),
random.NextDouble(),
new AssessmentSection(random.NextDouble(), random.NextDouble(0.0, 0.4), random.NextDouble(0.5, 0.9)),
new FailureMechanism(random.NextDouble(1, 5), random.NextDouble()));
// Assert
AssertCalculatorOutput(kernel.FailureMechanismSectionDirectResult, assembly);
}
}
[Test]
public void AssembleTailorMadeAssessmentWithLengthEffect_KernelWithInvalidOutput_ThrowFailureMechanismSectionAssemblyCalculatorException()
{
// Setup
var random = new Random(39);
using (new AssemblyToolKernelFactoryConfig())
{
var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance;
FailureMechanismSectionAssemblyKernelStub kernel = factory.LastCreatedFailureMechanismSectionAssemblyKernel;
kernel.FailureMechanismSectionDirectResult = new FmSectionAssemblyDirectResult((EFmSectionCategory) 99,
random.NextDouble());
var calculator = new FailureMechanismSectionAssemblyCalculator(factory);
// Call
TestDelegate test = () => calculator.AssembleTailorMadeAssessment(
random.NextEnumValue(),
random.NextDouble(),
random.NextDouble(),
new AssessmentSection(random.NextDouble(), random.NextDouble(0.0, 0.4), random.NextDouble(0.5, 0.9)),
new FailureMechanism(random.NextDouble(1, 5), random.NextDouble()));
// Assert
var exception = Assert.Throws(test);
Exception innerException = exception.InnerException;
Assert.IsInstanceOf(innerException);
Assert.AreEqual(innerException.Message, exception.Message);
}
}
[Test]
public void AssembleTailorMadeAssessmentWithLengthEffect_KernelThrowsException_ThrowFailureMechanismSectionAssemblyCalculatorException()
{
// Setup
var random = new Random(39);
using (new AssemblyToolKernelFactoryConfig())
{
var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance;
FailureMechanismSectionAssemblyKernelStub kernel = factory.LastCreatedFailureMechanismSectionAssemblyKernel;
kernel.ThrowExceptionOnCalculate = true;
var calculator = new FailureMechanismSectionAssemblyCalculator(factory);
// Call
TestDelegate test = () => calculator.AssembleTailorMadeAssessment(
random.NextEnumValue(),
random.NextDouble(),
random.NextDouble(),
new AssessmentSection(random.NextDouble(), random.NextDouble(0.0, 0.4), random.NextDouble(0.5, 0.9)),
new FailureMechanism(random.NextDouble(1, 5), random.NextDouble()));
// Assert
var exception = Assert.Throws(test);
Exception innerException = exception.InnerException;
Assert.IsNotNull(innerException);
Assert.AreEqual(innerException.Message, exception.Message);
}
}
[Test]
public void AssembleTailorMadeAssessmentWithCategoryResult_WithInvalidAssessmentResultTypeEnumInput_ThrowFailureMechanismSectionAssemblyCalculatorException()
{
// Setup
using (new AssemblyToolKernelFactoryConfig())
{
var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance;
var calculator = new FailureMechanismSectionAssemblyCalculator(factory);
// Call
TestDelegate test = () => calculator.AssembleTailorMadeAssessment((FailureMechanismSectionAssemblyCategoryGroup) 99);
// Assert
var exception = Assert.Throws(test);
Exception innerException = exception.InnerException;
Assert.IsInstanceOf(innerException);
Assert.AreEqual(innerException.Message, exception.Message);
}
}
[Test]
public void AssembleTailorMadeAssessmentWithCategoryResult_WithValidInput_InputCorrectlySetToKernel()
{
// Setup
var random = new Random(39);
var categoryGroupResult = random.NextEnumValue();
using (new AssemblyToolKernelFactoryConfig())
{
var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance;
FailureMechanismSectionAssemblyKernelStub kernel = factory.LastCreatedFailureMechanismSectionAssemblyKernel;
kernel.FailureMechanismSectionDirectResult = new FmSectionAssemblyDirectResult(random.NextEnumValue(),
random.NextDouble());
var calculator = new FailureMechanismSectionAssemblyCalculator(factory);
// Call
calculator.AssembleTailorMadeAssessment(categoryGroupResult);
// Assert
Tuple expectedInput =
FailureMechanismSectionAssemblyCalculatorInputCreator.ConvertTailorMadeFailureMechanismSectionAssemblyCategoryGroup(categoryGroupResult);
Assert.AreEqual(expectedInput.Item1, kernel.AssessmentResultTypeT3Input);
Assert.AreEqual(expectedInput.Item2, kernel.SectionCategoryInput);
}
}
[Test]
public void AssembleTailorMadeAssessmentWithCategoryResult_KernelWithCompleteOutput_OutputCorrectlyReturnedByCalculator()
{
// Setup
var random = new Random(39);
using (new AssemblyToolKernelFactoryConfig())
{
var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance;
FailureMechanismSectionAssemblyKernelStub kernel = factory.LastCreatedFailureMechanismSectionAssemblyKernel;
kernel.FailureMechanismSectionDirectResult = new FmSectionAssemblyDirectResult(random.NextEnumValue());
var calculator = new FailureMechanismSectionAssemblyCalculator(factory);
// Call
FailureMechanismSectionAssemblyCategoryGroup assembly = calculator.AssembleTailorMadeAssessment(
random.NextEnumValue());
// Assert
Assert.AreEqual(GetGroup(kernel.FailureMechanismSectionDirectResult.Result), assembly);
}
}
[Test]
public void AssembleTailorMadeAssessmentWithCategoryResult_KernelWithInvalidOutput_ThrowFailureMechanismSectionAssemblyCalculatorException()
{
// Setup
var random = new Random(39);
using (new AssemblyToolKernelFactoryConfig())
{
var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance;
FailureMechanismSectionAssemblyKernelStub kernel = factory.LastCreatedFailureMechanismSectionAssemblyKernel;
kernel.FailureMechanismSectionDirectResult = new FmSectionAssemblyDirectResult((EFmSectionCategory) 99);
var calculator = new FailureMechanismSectionAssemblyCalculator(factory);
// Call
TestDelegate test = () => calculator.AssembleTailorMadeAssessment(
random.NextEnumValue());
// Assert
var exception = Assert.Throws(test);
Exception innerException = exception.InnerException;
Assert.IsInstanceOf(innerException);
Assert.AreEqual(innerException.Message, exception.Message);
}
}
[Test]
public void AssembleTailorMadeAssessmentWithCategoryResult_KernelThrowsException_ThrowFailureMechanismSectionAssemblyCalculatorException()
{
// Setup
var random = new Random(39);
using (new AssemblyToolKernelFactoryConfig())
{
var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance;
FailureMechanismSectionAssemblyKernelStub kernel = factory.LastCreatedFailureMechanismSectionAssemblyKernel;
kernel.ThrowExceptionOnCalculate = true;
var calculator = new FailureMechanismSectionAssemblyCalculator(factory);
// Call
TestDelegate test = () => calculator.AssembleTailorMadeAssessment(
random.NextEnumValue());
// Assert
var exception = Assert.Throws(test);
Exception innerException = exception.InnerException;
Assert.IsNotNull(innerException);
Assert.AreEqual(innerException.Message, exception.Message);
}
}
private static EAssessmentResultTypeT1 GetAssessmentResultTypeT1(TailorMadeAssessmentResultType tailorMadeAssessmentResult)
{
switch (tailorMadeAssessmentResult)
{
case TailorMadeAssessmentResultType.None:
return EAssessmentResultTypeT1.Gr;
case TailorMadeAssessmentResultType.ProbabilityNegligible:
return EAssessmentResultTypeT1.Fv;
case TailorMadeAssessmentResultType.Sufficient:
return EAssessmentResultTypeT1.V;
case TailorMadeAssessmentResultType.Insufficient:
return EAssessmentResultTypeT1.Vn;
case TailorMadeAssessmentResultType.NotAssessed:
return EAssessmentResultTypeT1.Ngo;
default:
throw new NotSupportedException();
}
}
private static EAssessmentResultTypeT3 GetAssessmentResultTypeT3(TailorMadeAssessmentProbabilityCalculationResultType tailorMadeAssessmentResult)
{
switch (tailorMadeAssessmentResult)
{
case TailorMadeAssessmentProbabilityCalculationResultType.None:
return EAssessmentResultTypeT3.Gr;
case TailorMadeAssessmentProbabilityCalculationResultType.ProbabilityNegligible:
return EAssessmentResultTypeT3.Fv;
case TailorMadeAssessmentProbabilityCalculationResultType.Probability:
return EAssessmentResultTypeT3.ResultSpecified;
case TailorMadeAssessmentProbabilityCalculationResultType.NotAssessed:
return EAssessmentResultTypeT3.Ngo;
default:
throw new NotSupportedException();
}
}
private static EAssessmentResultTypeT4 GetAssessmentResultTypeT4(TailorMadeAssessmentProbabilityAndDetailedCalculationResultType tailorMadeAssessmentResult)
{
switch (tailorMadeAssessmentResult)
{
case TailorMadeAssessmentProbabilityAndDetailedCalculationResultType.None:
return EAssessmentResultTypeT4.Gr;
case TailorMadeAssessmentProbabilityAndDetailedCalculationResultType.ProbabilityNegligible:
return EAssessmentResultTypeT4.Fv;
case TailorMadeAssessmentProbabilityAndDetailedCalculationResultType.Probability:
return EAssessmentResultTypeT4.ResultSpecified;
case TailorMadeAssessmentProbabilityAndDetailedCalculationResultType.Sufficient:
return EAssessmentResultTypeT4.V;
case TailorMadeAssessmentProbabilityAndDetailedCalculationResultType.Insufficient:
return EAssessmentResultTypeT4.Vn;
case TailorMadeAssessmentProbabilityAndDetailedCalculationResultType.NotAssessed:
return EAssessmentResultTypeT4.Ngo;
default:
throw new NotSupportedException();
}
}
#endregion
#region Combined Assembly
[Test]
public void AssembleCombinedWithProbabilities_WithInvalidEnumInput_ThrowFailureMechanismSectionAssemblyCalculatorException()
{
// Setup
var random = new Random(39);
using (new AssemblyToolKernelFactoryConfig())
{
var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance;
var calculator = new FailureMechanismSectionAssemblyCalculator(factory);
// Call
TestDelegate test = () => calculator.AssembleCombined(new FailureMechanismSectionAssembly(random.NextDouble(), (FailureMechanismSectionAssemblyCategoryGroup) 99),
new FailureMechanismSectionAssembly(random.NextDouble(), random.NextEnumValue()),
new FailureMechanismSectionAssembly(random.NextDouble(), random.NextEnumValue()));
// Assert
var exception = Assert.Throws(test);
Exception innerException = exception.InnerException;
Assert.IsInstanceOf(innerException);
Assert.AreEqual(innerException.Message, exception.Message);
}
}
[Test]
public void AssembleCombinedWithProbabilities_WithValidInput_InputCorrectlySetToKernel()
{
// Setup
var random = new Random(39);
var simpleAssembly = new FailureMechanismSectionAssembly(random.NextDouble(), random.NextEnumValue());
var detailedAssembly = new FailureMechanismSectionAssembly(random.NextDouble(), random.NextEnumValue());
var tailorMadeAssembly = new FailureMechanismSectionAssembly(random.NextDouble(), random.NextEnumValue());
using (new AssemblyToolKernelFactoryConfig())
{
var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance;
FailureMechanismSectionAssemblyKernelStub kernel = factory.LastCreatedFailureMechanismSectionAssemblyKernel;
kernel.FailureMechanismSectionDirectResult = new FmSectionAssemblyDirectResult(random.NextEnumValue(),
random.NextDouble());
var calculator = new FailureMechanismSectionAssemblyCalculator(factory);
// Call
calculator.AssembleCombined(simpleAssembly, detailedAssembly, tailorMadeAssembly);
// Assert
AssertAssembly(simpleAssembly, kernel.SimpleAssessmentResultInput);
AssertAssembly(detailedAssembly, kernel.DetailedAssessmentResultInput);
AssertAssembly(tailorMadeAssembly, kernel.TailorMadeAssessmentResultInput);
}
}
[Test]
public void AssembleCombinedWithProbabilities_KernelWithCompleteOutput_OutputCorrectlyReturnedByCalculator()
{
// Setup
var random = new Random(39);
using (new AssemblyToolKernelFactoryConfig())
{
var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance;
FailureMechanismSectionAssemblyKernelStub kernel = factory.LastCreatedFailureMechanismSectionAssemblyKernel;
kernel.FailureMechanismSectionDirectResult = new FmSectionAssemblyDirectResult(random.NextEnumValue(),
random.NextDouble());
var calculator = new FailureMechanismSectionAssemblyCalculator(factory);
// Call
FailureMechanismSectionAssembly assembly = calculator.AssembleCombined(
new FailureMechanismSectionAssembly(random.NextDouble(), random.NextEnumValue()),
new FailureMechanismSectionAssembly(random.NextDouble(), random.NextEnumValue()),
new FailureMechanismSectionAssembly(random.NextDouble(), random.NextEnumValue()));
// Assert
AssertCalculatorOutput(kernel.FailureMechanismSectionDirectResult, assembly);
}
}
[Test]
public void AssembleCombinedWithProbabilities_KernelWithInvalidOutput_ThrowFailureMechanismSectionAssemblyCalculatorException()
{
// Setup
var random = new Random(39);
using (new AssemblyToolKernelFactoryConfig())
{
var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance;
FailureMechanismSectionAssemblyKernelStub kernel = factory.LastCreatedFailureMechanismSectionAssemblyKernel;
kernel.FailureMechanismSectionDirectResult = new FmSectionAssemblyDirectResult((EFmSectionCategory) 99,
random.NextDouble());
var calculator = new FailureMechanismSectionAssemblyCalculator(factory);
// Call
TestDelegate test = () => calculator.AssembleCombined(
new FailureMechanismSectionAssembly(random.NextDouble(), random.NextEnumValue()),
new FailureMechanismSectionAssembly(random.NextDouble(), random.NextEnumValue()),
new FailureMechanismSectionAssembly(random.NextDouble(), random.NextEnumValue()));
// Assert
var exception = Assert.Throws(test);
Exception innerException = exception.InnerException;
Assert.IsInstanceOf(innerException);
Assert.AreEqual(innerException.Message, exception.Message);
}
}
[Test]
public void AssembleCombinedWithProbabilities_KernelThrowsException_ThrowFailureMechanismSectionAssemblyCalculatorException()
{
// Setup
var random = new Random(39);
using (new AssemblyToolKernelFactoryConfig())
{
var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance;
FailureMechanismSectionAssemblyKernelStub kernel = factory.LastCreatedFailureMechanismSectionAssemblyKernel;
kernel.ThrowExceptionOnCalculate = true;
var calculator = new FailureMechanismSectionAssemblyCalculator(factory);
// Call
TestDelegate test = () => calculator.AssembleCombined(
new FailureMechanismSectionAssembly(random.NextDouble(), random.NextEnumValue()),
new FailureMechanismSectionAssembly(random.NextDouble(), random.NextEnumValue()),
new FailureMechanismSectionAssembly(random.NextDouble(), random.NextEnumValue()));
// Assert
var exception = Assert.Throws(test);
Exception innerException = exception.InnerException;
Assert.IsNotNull(innerException);
Assert.AreEqual(innerException.Message, exception.Message);
}
}
[Test]
public void AssembleCombined_WithInvalidEnumInput_ThrowFailureMechanismSectionAssemblyCalculatorException()
{
// Setup
var random = new Random(39);
using (new AssemblyToolKernelFactoryConfig())
{
var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance;
var calculator = new FailureMechanismSectionAssemblyCalculator(factory);
// Call
TestDelegate test = () => calculator.AssembleCombined((FailureMechanismSectionAssemblyCategoryGroup) 99,
random.NextEnumValue(),
random.NextEnumValue());
// Assert
var exception = Assert.Throws(test);
Exception innerException = exception.InnerException;
Assert.IsInstanceOf(innerException);
Assert.AreEqual(innerException.Message, exception.Message);
}
}
[Test]
public void AssembleCombined_WithValidInput_InputCorrectlySetToKernel()
{
// Setup
var random = new Random(39);
var simpleAssembly = random.NextEnumValue();
var detailedAssembly = random.NextEnumValue();
var tailorMadeAssembly = random.NextEnumValue();
using (new AssemblyToolKernelFactoryConfig())
{
var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance;
FailureMechanismSectionAssemblyKernelStub kernel = factory.LastCreatedFailureMechanismSectionAssemblyKernel;
kernel.FailureMechanismSectionDirectResult = new FmSectionAssemblyDirectResult(random.NextEnumValue());
var calculator = new FailureMechanismSectionAssemblyCalculator(factory);
// Call
calculator.AssembleCombined(simpleAssembly, detailedAssembly, tailorMadeAssembly);
// Assert
Assert.AreEqual(simpleAssembly, GetGroup(kernel.SimpleAssessmentResultInput.Result));
Assert.AreEqual(detailedAssembly, GetGroup(kernel.DetailedAssessmentResultInput.Result));
Assert.AreEqual(tailorMadeAssembly, GetGroup(kernel.TailorMadeAssessmentResultInput.Result));
}
}
[Test]
public void AssembleCombined_KernelWithCompleteOutput_OutputCorrectlyReturnedByCalculator()
{
// Setup
var random = new Random(39);
using (new AssemblyToolKernelFactoryConfig())
{
var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance;
FailureMechanismSectionAssemblyKernelStub kernel = factory.LastCreatedFailureMechanismSectionAssemblyKernel;
kernel.FailureMechanismSectionDirectResult = new FmSectionAssemblyDirectResult(random.NextEnumValue());
var calculator = new FailureMechanismSectionAssemblyCalculator(factory);
// Call
FailureMechanismSectionAssemblyCategoryGroup group = calculator.AssembleCombined(
random.NextEnumValue(),
random.NextEnumValue(),
random.NextEnumValue());
// Assert
Assert.AreEqual(GetGroup(kernel.FailureMechanismSectionDirectResult.Result), group);
}
}
[Test]
public void AssembleCombined_KernelWithInvalidOutput_ThrowFailureMechanismSectionAssemblyCalculatorException()
{
// Setup
var random = new Random(39);
using (new AssemblyToolKernelFactoryConfig())
{
var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance;
FailureMechanismSectionAssemblyKernelStub kernel = factory.LastCreatedFailureMechanismSectionAssemblyKernel;
kernel.FailureMechanismSectionDirectResult = new FmSectionAssemblyDirectResult((EFmSectionCategory) 99);
var calculator = new FailureMechanismSectionAssemblyCalculator(factory);
// Call
TestDelegate test = () => calculator.AssembleCombined(
random.NextEnumValue(),
random.NextEnumValue(),
random.NextEnumValue());
// Assert
var exception = Assert.Throws(test);
Exception innerException = exception.InnerException;
Assert.IsInstanceOf(innerException);
Assert.AreEqual(innerException.Message, exception.Message);
}
}
[Test]
public void AssembleCombined_KernelThrowsException_ThrowFailureMechanismSectionAssemblyCalculatorException()
{
// Setup
var random = new Random(39);
using (new AssemblyToolKernelFactoryConfig())
{
var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance;
FailureMechanismSectionAssemblyKernelStub kernel = factory.LastCreatedFailureMechanismSectionAssemblyKernel;
kernel.ThrowExceptionOnCalculate = true;
var calculator = new FailureMechanismSectionAssemblyCalculator(factory);
// Call
TestDelegate test = () => calculator.AssembleCombined(
random.NextEnumValue(),
random.NextEnumValue(),
random.NextEnumValue());
// Assert
var exception = Assert.Throws(test);
Exception innerException = exception.InnerException;
Assert.IsNotNull(innerException);
Assert.AreEqual(innerException.Message, exception.Message);
}
}
private static void AssertAssembly(FailureMechanismSectionAssembly simpleAssembly, FmSectionAssemblyDirectResult kernelInput)
{
Assert.AreEqual(simpleAssembly.Probability, kernelInput.FailureProbability);
Assert.AreEqual(simpleAssembly.Group, GetGroup(kernelInput.Result));
}
#endregion
}
}