예제 #1
0
        public void Calculate_NormalDynamicsCalculatorThrowsException_ThenExceptionRethrown()
        {
            // Setup
            var calculatorException             = new CalculatorException();
            var normalTakeOffDynamicsCalculator = Substitute.For <INormalTakeOffDynamicsCalculator>();

            normalTakeOffDynamicsCalculator.Calculate(Arg.Any <AircraftState>())
            .Throws(calculatorException);

            var failureTakeOffDynamicsCalculator = Substitute.For <IFailureTakeOffDynamicsCalculator>();
            var integrator = Substitute.For <IIntegrator>();

            var calculator = new DistanceCalculator(normalTakeOffDynamicsCalculator,
                                                    failureTakeOffDynamicsCalculator,
                                                    integrator,
                                                    CalculationSettingsTestFactory.CreateDistanceCalculatorSettings());

            // Call
            TestDelegate call = () => calculator.Calculate();

            // Assert
            var exception = Assert.Throws <CalculatorException>(call);

            Assert.AreSame(calculatorException, exception);
        }
예제 #2
0
        public static void Calculate_ContinuedTakeOffDistanceCalculatorThrowsCalculatorException_ThrowsCalculatorException()
        {
            // Setup
            var random = new Random(21);

            AircraftData        aircraftData              = AircraftDataTestFactory.CreateRandomAircraftData();
            var                 integrator                = Substitute.For <IIntegrator>();
            int                 nrOfFailedEngines         = random.Next();
            double              density                   = random.NextDouble();
            double              gravitationalAcceleration = random.NextDouble();
            CalculationSettings calculationSettings       = CalculationSettingsTestFactory.CreateDistanceCalculatorSettings();

            var calculatorException = new CalculatorException();

            var continuedTakeOffDistanceCalculator = Substitute.For <IDistanceCalculator>();

            continuedTakeOffDistanceCalculator.Calculate().Throws(calculatorException);

            var distanceCalculatorFactory = Substitute.For <IDistanceCalculatorFactory>();

            distanceCalculatorFactory.CreateAbortedTakeOffDistanceCalculator(null, null, 0, 0, null).ReturnsForAnyArgs(continuedTakeOffDistanceCalculator);

            var aggregatedCalculator = new Calculator.AggregatedDistanceCalculator.AggregatedDistanceCalculator(distanceCalculatorFactory);

            // Call
            TestDelegate call = () => aggregatedCalculator.Calculate(aircraftData, integrator, nrOfFailedEngines, density, gravitationalAcceleration, calculationSettings);

            // Assert
            var exception = Assert.Throws <CalculatorException>(call);

            Assert.AreSame(calculatorException, exception);
        }
        public void Calculate_CalculatorThrowsCalculateException_ThrowsKernelCalculateException()
        {
            // Setup
            var calculation = new BalancedFieldLengthCalculation();

            SetValidAircraftData(calculation.AircraftData);
            SetEngineData(calculation.EngineData);
            SetSimulationSettingsData(calculation.SimulationSettings);

            calculation.SimulationSettings.EndFailureVelocity = 1;

            var kernel = Substitute.For <IAggregatedDistanceCalculatorKernel>();
            var calculatorException = new CalculatorException("Can't calculate this.");

            kernel.Calculate(Arg.Any <KernelAircraftData>(),
                             Arg.Any <EulerIntegrator>(),
                             Arg.Any <int>(),
                             Arg.Any <double>(),
                             Arg.Any <double>(),
                             Arg.Any <CalculationSettings>())
            .ThrowsForAnyArgs(calculatorException);

            var testFactory = new TestKernelFactory(kernel);

            using (new BalancedFieldLengthKernelFactoryConfig(testFactory))
            {
                var module = new BalancedFieldLengthCalculationModule();

                // Call
                TestDelegate call = () => module.Calculate(calculation);

                // Assert
                var exception = Assert.Throws <KernelCalculationException>(call);
                Assert.That(exception.InnerException, Is.SameAs(calculatorException));
                Assert.That(exception.Message, Is.EqualTo(calculatorException.Message));
            }
        }
예제 #4
0
        public void Calculate_MaximumIterationsHit_ThrowsCalculatorException()
        {
            // Setup
            var    random        = new Random(21);
            int    nrOfTimeSteps = random.Next(1, 10);
            double timeStep      = random.NextDouble();
            int    failureSpeed  = random.Next();

            var normalTakeOffDynamicsCalculator = Substitute.For <INormalTakeOffDynamicsCalculator>();

            var calculatorException = new CalculatorException();
            var failureTakeOffDynamicsCalculator = Substitute.For <IFailureTakeOffDynamicsCalculator>();

            failureTakeOffDynamicsCalculator.Calculate(Arg.Any <AircraftState>())
            .Throws(calculatorException);

            var integrator = Substitute.For <IIntegrator>();

            integrator.Integrate(Arg.Any <AircraftState>(), Arg.Any <AircraftAccelerations>(), timeStep)
            .Returns(CreateAircraftStateWithVelocity(failureSpeed));

            var calculatorSettings = new CalculationSettings(failureSpeed, nrOfTimeSteps, timeStep);
            var calculator         = new DistanceCalculator(normalTakeOffDynamicsCalculator, failureTakeOffDynamicsCalculator,
                                                            integrator, calculatorSettings);

            // Call
            TestDelegate call = () => calculator.Calculate();

            // Assert
            var exception = Assert.Throws <CalculatorException>(call);

            Assert.AreEqual("Calculation did not converge.", exception.Message);

            integrator.ReceivedWithAnyArgs(nrOfTimeSteps)
            .Integrate(Arg.Any <AircraftState>(), Arg.Any <AircraftAccelerations>(), timeStep);
        }
예제 #5
0
        public void Calculate_FailureDynamicsCalculatorThrowsException_ThenExceptionRethrown()
        {
            // Setup
            var    random       = new Random(21);
            double timeStep     = random.NextDouble();
            int    failureSpeed = random.Next();

            var normalTakeOffDynamicsCalculator = Substitute.For <INormalTakeOffDynamicsCalculator>();

            var calculatorException = new CalculatorException();
            var failureTakeOffDynamicsCalculator = Substitute.For <IFailureTakeOffDynamicsCalculator>();

            failureTakeOffDynamicsCalculator.Calculate(Arg.Any <AircraftState>())
            .Throws(calculatorException);

            var integrator = Substitute.For <IIntegrator>();

            integrator.Integrate(Arg.Any <AircraftState>(), Arg.Any <AircraftAccelerations>(), timeStep)
            .Returns(CreateAircraftStateWithVelocity(failureSpeed + 0.1));

            var calculatorSettings = new CalculationSettings(failureSpeed,
                                                             random.Next(),
                                                             timeStep);
            var calculator = new DistanceCalculator(normalTakeOffDynamicsCalculator,
                                                    failureTakeOffDynamicsCalculator,
                                                    integrator,
                                                    calculatorSettings);

            // Call
            TestDelegate call = () => calculator.Calculate();

            // Assert
            var exception = Assert.Throws <CalculatorException>(call);

            Assert.AreSame(calculatorException, exception);
        }