public static void CreateAircraftData_Always_ReturnsAircraftData() { // Call AircraftData data = AircraftDataTestFactory.CreateRandomAircraftData(); // Assert Assert.IsTrue(IsConcreteNonZeroNumber(data.NrOfEngines)); Assert.IsTrue(IsConcreteNonZeroNumber(data.MaximumThrustPerEngine)); Assert.IsTrue(IsConcreteNonZeroNumber(data.TakeOffWeight)); Assert.IsTrue(IsConcreteNonZeroNumber(data.PitchAngleGradient.Degrees)); Assert.IsTrue(IsConcreteNonZeroNumber(data.MaximumPitchAngle.Degrees)); Assert.IsTrue(IsConcreteNonZeroNumber(data.RollingResistanceCoefficient)); Assert.IsTrue(IsConcreteNonZeroNumber(data.BrakingResistanceCoefficient)); AerodynamicsData aerodynamicsData = data.AerodynamicsData; Assert.IsTrue(IsConcreteNonZeroNumber(aerodynamicsData.AspectRatio)); Assert.IsTrue(IsConcreteNonZeroNumber(aerodynamicsData.WingArea)); Assert.IsTrue(IsConcreteNonZeroNumber(aerodynamicsData.ZeroLiftAngleOfAttack.Degrees)); Assert.IsTrue(IsConcreteNonZeroNumber(aerodynamicsData.LiftCoefficientGradient)); Assert.IsTrue(IsConcreteNonZeroNumber(aerodynamicsData.MaximumLiftCoefficient)); Assert.IsTrue(IsConcreteNonZeroNumber(aerodynamicsData.RestDragCoefficientWithoutEngineFailure)); Assert.IsTrue(IsConcreteNonZeroNumber(aerodynamicsData.RestDragCoefficientWithEngineFailure)); Assert.IsTrue(IsConcreteNonZeroNumber(aerodynamicsData.OswaldFactor)); }
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 GivenAircraftStateResultsIntoInvalidCalculationException_WhenCalculateCalled_ThenCalculatorExceptionThrown() { // Given var random = new Random(21); AircraftData aircraftData = AircraftDataTestFactory.CreateRandomAircraftData(); var calculator = new TestTakeOffDynamicsCalculator(aircraftData, random.NextDouble(), random.NextDouble()); var state = new AircraftState(aircraftData.AerodynamicsData.ZeroLiftAngleOfAttack - Angle.FromRadians(1), new Angle(), random.NextDouble(), random.NextDouble(), random.NextDouble()); // When TestDelegate call = () => calculator.Calculate(state); // Then var exception = Assert.Throws <CalculatorException>(call); Exception innerException = exception.InnerException; Assert.IsInstanceOf <InvalidCalculationException>(innerException); Assert.AreEqual(innerException.Message, exception.Message); }
public static void Constructor_ExpectedValues() { // Setup var random = new Random(21); AircraftData aircraftData = AircraftDataTestFactory.CreateRandomAircraftData(); // Call var calculator = new NormalTakeOffDynamicsCalculator(aircraftData, random.NextDouble(), random.NextDouble()); // Assert Assert.IsInstanceOf <TakeOffDynamicsCalculatorBase>(calculator); Assert.IsInstanceOf <INormalTakeOffDynamicsCalculator>(calculator); }
public void Calculate_AircraftStateNull_ThrowsArgumentNullException() { // Setup var random = new Random(21); AircraftData aircraftData = AircraftDataTestFactory.CreateRandomAircraftData(); var calculator = new TestTakeOffDynamicsCalculator(aircraftData, random.NextDouble(), random.NextDouble()); // Call TestDelegate call = () => calculator.Calculate(null); // Assert var exception = Assert.Throws <ArgumentNullException>(call); Assert.AreEqual("aircraftState", exception.ParamName); }
public static void Calculate_WithArguments_ExecutesDistanceCalculatorsAndReturnsExpectedOutput() { // 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 abortedTakeOffDistanceCalculator = Substitute.For <IDistanceCalculator>(); var abortedTakeOffDistanceOutput = new DistanceCalculatorOutput(calculationSettings.FailureSpeed, random.NextDouble()); abortedTakeOffDistanceCalculator.Calculate().Returns(abortedTakeOffDistanceOutput); var continuedTakeOffDistanceCalculator = Substitute.For <IDistanceCalculator>(); var continuedTakeOffDistanceOutput = new DistanceCalculatorOutput(calculationSettings.FailureSpeed, random.NextDouble()); continuedTakeOffDistanceCalculator.Calculate().Returns(continuedTakeOffDistanceOutput); var distanceCalculatorFactory = Substitute.For <IDistanceCalculatorFactory>(); distanceCalculatorFactory.CreateAbortedTakeOffDistanceCalculator(Arg.Is(aircraftData), Arg.Is(integrator), Arg.Is(density), Arg.Is(gravitationalAcceleration), Arg.Is(calculationSettings)) .Returns(abortedTakeOffDistanceCalculator); distanceCalculatorFactory.CreateContinuedTakeOffDistanceCalculator(Arg.Is(aircraftData), Arg.Is(integrator), Arg.Is(nrOfFailedEngines), Arg.Is(density), Arg.Is(gravitationalAcceleration), Arg.Is(calculationSettings)) .Returns(continuedTakeOffDistanceCalculator); var aggregatedCalculator = new Calculator.AggregatedDistanceCalculator.AggregatedDistanceCalculator(distanceCalculatorFactory); // Call AggregatedDistanceOutput output = aggregatedCalculator.Calculate(aircraftData, integrator, nrOfFailedEngines, density, gravitationalAcceleration, calculationSettings); // Assert Assert.AreEqual(calculationSettings.FailureSpeed, output.FailureSpeed); Assert.AreEqual(abortedTakeOffDistanceOutput.Distance, output.AbortedTakeOffDistance); Assert.AreEqual(continuedTakeOffDistanceOutput.Distance, output.ContinuedTakeOffDistance); }
public void CreateAbortedTakeOffDynamics_Always_ReturnsExpectedCalculator() { // Setup var random = new Random(21); AircraftData aircraftData = AircraftDataTestFactory.CreateRandomAircraftData(); var factory = new TakeOffDynamicsCalculatorFactory(); // Call IFailureTakeOffDynamicsCalculator calculator = factory.CreateAbortedTakeOffDynamics(aircraftData, random.NextDouble(), random.NextDouble()); // Assert Assert.IsInstanceOf <AbortedTakeOffDynamicsCalculator>(calculator); }
public void CreateContinuedTakeOffDistanceCalculator_WithValidArguments_ReturnsExpectedCalculator() { // Setup var random = new Random(21); double density = random.NextDouble(); double gravitationalAcceleration = random.NextDouble(); int nrOfFailedEngines = random.Next(); AircraftData aircraftData = AircraftDataTestFactory.CreateRandomAircraftData(); var normalTakeOffDynamicsCalculator = Substitute.For <INormalTakeOffDynamicsCalculator>(); var failureTakeOffDynamicsCalculator = Substitute.For <IFailureTakeOffDynamicsCalculator>(); var takeOffDynamicsCalculatorFactory = Substitute.For <ITakeOffDynamicsCalculatorFactory>(); takeOffDynamicsCalculatorFactory.CreateNormalTakeOffDynamics(aircraftData, density, gravitationalAcceleration) .Returns(normalTakeOffDynamicsCalculator); takeOffDynamicsCalculatorFactory.CreateContinuedTakeOffDynamicsCalculator(aircraftData, nrOfFailedEngines, density, gravitationalAcceleration) .Returns(failureTakeOffDynamicsCalculator); var integrator = Substitute.For <IIntegrator>(); IDistanceCalculatorFactory factory = new DistanceCalculatorFactory(takeOffDynamicsCalculatorFactory); // Call IDistanceCalculator calculator = factory.CreateContinuedTakeOffDistanceCalculator(aircraftData, integrator, nrOfFailedEngines, density, gravitationalAcceleration, CalculationSettingsTestFactory.CreateDistanceCalculatorSettings()); // Assert takeOffDynamicsCalculatorFactory.DidNotReceiveWithAnyArgs().CreateAbortedTakeOffDynamics(Arg.Any <AircraftData>(), Arg.Any <double>(), Arg.Any <double>()); takeOffDynamicsCalculatorFactory.Received(1).CreateNormalTakeOffDynamics(Arg.Any <AircraftData>(), Arg.Any <double>(), Arg.Any <double>()); takeOffDynamicsCalculatorFactory.Received(1).CreateContinuedTakeOffDynamicsCalculator(Arg.Any <AircraftData>(), Arg.Any <int>(), Arg.Any <double>(), Arg.Any <double>()); Assert.IsInstanceOf <DistanceCalculator>(calculator); }
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); }
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); }
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 static void Calculate_Always_ReturnsExpectedZeroPitchRate() { // Setup var random = new Random(21); AircraftData aircraftData = AircraftDataTestFactory.CreateRandomAircraftData(); Angle angleOfAttack = AerodynamicsDataTestHelper.GetValidAngleOfAttack(aircraftData.AerodynamicsData); var aircraftState = new AircraftState(angleOfAttack, new Angle(), random.NextDouble(), random.NextDouble(), random.NextDouble()); var calculator = new AbortedTakeOffDynamicsCalculator(aircraftData, random.NextDouble(), random.NextDouble()); // Call AircraftAccelerations accelerations = calculator.Calculate(aircraftState); // Assert Assert.Zero(accelerations.PitchRate.Radians); }
public static void Calculate_Always_SendsCorrectInput() { // Setup var random = new Random(21); AircraftData aircraftData = AircraftDataTestFactory.CreateRandomAircraftData(); var calculator = new TestTakeOffDynamicsCalculator(aircraftData, random.NextDouble(), random.NextDouble()); Angle angleOfAttack = AerodynamicsDataTestHelper.GetValidAngleOfAttack(aircraftData.AerodynamicsData); var state = new AircraftState(angleOfAttack, new Angle(), random.NextDouble(), random.NextDouble(), random.NextDouble()); // Call calculator.Calculate(state); // Assert Assert.AreSame(state, calculator.CalculateDragInput); }
public static void Calculate_WithAircraftStateAlways_ReturnsExpectedClimbRate() { // Setup var random = new Random(21); AircraftData aircraftData = AircraftDataTestFactory.CreateRandomAircraftData(); Angle angleOfAttack = AerodynamicsDataTestHelper.GetValidAngleOfAttack(aircraftData.AerodynamicsData); var aircraftState = new AircraftState(angleOfAttack, new Angle(), random.NextDouble(), random.NextDouble(), random.NextDouble()); var calculator = new TestTakeOffDynamicsCalculator(aircraftData, random.NextDouble(), random.NextDouble()); // Call AircraftAccelerations accelerations = calculator.Calculate(aircraftState); // Assert double expectedClimbRate = aircraftState.TrueAirspeed * Math.Sin(aircraftState.FlightPathAngle.Radians); Assert.AreEqual(expectedClimbRate, accelerations.ClimbRate, tolerance); }
public void Calculate_CalculationSettingsNull_ThrowsArgumentNullException() { // 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(); var distanceCalculatorFactory = Substitute.For <IDistanceCalculatorFactory>(); var aggregatedCalculator = new Calculator.AggregatedDistanceCalculator.AggregatedDistanceCalculator(distanceCalculatorFactory); // Call TestDelegate call = () => aggregatedCalculator.Calculate(aircraftData, integrator, nrOfFailedEngines, density, gravitationalAcceleration, null); // Assert var exception = Assert.Throws <ArgumentNullException>(call); Assert.AreEqual("calculationSettings", exception.ParamName); }
public static void Calculate_WithAirspeedLowerThanThreshold_ReturnsExpectedZeroRate() { // Setup var random = new Random(21); AircraftData aircraftData = AircraftDataTestFactory.CreateRandomAircraftData(); Angle angleOfAttack = AerodynamicsDataTestHelper.GetValidAngleOfAttack(aircraftData.AerodynamicsData); var aircraftState = new AircraftState(angleOfAttack, new Angle(), random.NextDouble(), random.NextDouble(), random.NextDouble()); // Precondition Assert.IsTrue(aircraftState.TrueAirspeed < 1); var calculator = new TestTakeOffDynamicsCalculator(aircraftData, random.NextDouble(), random.NextDouble()); // Call AircraftAccelerations accelerations = calculator.Calculate(aircraftState); // Assert Assert.Zero(accelerations.FlightPathRate.Degrees); }