/// <summary>
        /// Validates a <see cref="BalancedFieldLengthCalculation"/>.
        /// </summary>
        /// <param name="calculation">The calculation to validate.</param>
        /// <returns>A collection of validation messages if the validation failed, empty otherwise.</returns>
        /// <exception cref="ArgumentNullException">Thrown when <paramref name="calculation"/>
        /// is <c>null</c>.</exception>
        public IEnumerable <string> Validate(BalancedFieldLengthCalculation calculation)
        {
            if (calculation == null)
            {
                throw new ArgumentNullException(nameof(calculation));
            }

            try
            {
                EngineData engineData = calculation.EngineData;
                GeneralSimulationSettingsData generalSimulationSettings = calculation.SimulationSettings;

                AircraftData          aircraftData     = AircraftDataFactory.Create(calculation.AircraftData, engineData);
                KernelValidationError validationResult = kernel.Validate(aircraftData,
                                                                         generalSimulationSettings.Density,
                                                                         generalSimulationSettings.GravitationalAcceleration,
                                                                         engineData.NrOfFailedEngines);

                var messages = new List <string>();
                if (generalSimulationSettings.EndFailureVelocity < 1)
                {
                    messages.Add(Resources.BalancedFieldLengthCalculationModule_ValidationMessage_End_failure_velocity_must_be_larger_than_Zero);
                }

                if (validationResult.HasFlag(KernelValidationError.InvalidDensity))
                {
                    messages.Add(Resources.BalancedFieldLengthCalculationModule_ValidationMessage_Invalid_Density);
                }

                if (validationResult.HasFlag(KernelValidationError.InvalidGravitationalAcceleration))
                {
                    messages.Add(Resources.BalancedFieldLengthCalculationModule_ValidationMessage_Invalid_GravitationalAcceleration);
                }

                if (validationResult.HasFlag(KernelValidationError.InvalidNrOfFailedEngines))
                {
                    messages.Add(Resources.BalancedFieldLengthCalculationModule_ValidationMessage_Invalid_NrOfFailedEngines);
                }

                return(messages);
            }
            catch (CreateKernelDataException e)
            {
                return(new[]
                {
                    e.Message
                });
            }
        }
Ejemplo n.º 2
0
        public void Validate_AllDataInvalid_ReturnsExpectedValidationResult()
        {
            // Setup
            AircraftData aircraftData = AircraftDataTestFactory.CreateRandomAircraftData();

            var kernel = new AggregatedDistanceCalculatorKernel();

            // Call
            KernelValidationError result = kernel.Validate(aircraftData, 0, 0,
                                                           aircraftData.NrOfEngines + 1);

            // Assert
            const KernelValidationError expectedResult = KernelValidationError.InvalidDensity
                                                         | KernelValidationError.InvalidGravitationalAcceleration
                                                         | KernelValidationError.InvalidNrOfFailedEngines;

            Assert.AreEqual(expectedResult, result);
        }
Ejemplo n.º 3
0
        public void Validate_WithValidData_ReturnsExpectedValidationResult()
        {
            // Setup
            var          random       = new Random(21);
            AircraftData aircraftData = AircraftDataTestFactory.CreateRandomAircraftData();
            double       density      = random.NextDouble();
            double       gravitationalAcceleration = random.NextDouble();

            var kernel = new AggregatedDistanceCalculatorKernel();

            // Call
            KernelValidationError result = kernel.Validate(aircraftData,
                                                           density,
                                                           gravitationalAcceleration,
                                                           aircraftData.NrOfEngines - 1);

            // Assert
            Assert.AreEqual(KernelValidationError.None, result);
        }
Ejemplo n.º 4
0
        public void Validate_DensityInvalid_ReturnsExpectedValidationResult(double density)
        {
            // Setup
            var          random       = new Random(21);
            AircraftData aircraftData = AircraftDataTestFactory.CreateRandomAircraftData();
            double       gravitationalAcceleration = random.NextDouble();

            var kernel = new AggregatedDistanceCalculatorKernel();

            // Call
            KernelValidationError result = kernel.Validate(aircraftData,
                                                           density,
                                                           gravitationalAcceleration,
                                                           aircraftData.NrOfEngines - 1);

            // Assert
            Assert.IsTrue(result.HasFlag(KernelValidationError.InvalidDensity));
            Assert.IsFalse(result.HasFlag(KernelValidationError.InvalidGravitationalAcceleration));
            Assert.IsFalse(result.HasFlag(KernelValidationError.InvalidNrOfFailedEngines));
        }
        public void Validate_WithArgumentAndKernelValidationErrorOccurs_ReturnsErrorMessages(KernelValidationError error,
                                                                                             string expectedMessage)
        {
            // Setup
            var calculation = new BalancedFieldLengthCalculation();

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

            var kernel = Substitute.For <IAggregatedDistanceCalculatorKernel>();

            kernel.Validate(Arg.Any <KernelAircraftData>(),
                            Arg.Any <double>(),
                            Arg.Any <double>(),
                            Arg.Any <int>())
            .ReturnsForAnyArgs(error);

            var testFactory = new TestKernelFactory(kernel);

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

                // Call
                IEnumerable <string> messages = module.Validate(calculation);

                // Assert
                CollectionAssert.AreEqual(new[]
                {
                    expectedMessage
                }, messages);
            }
        }