public void DistanceRequiredTest()
        {
            string text  = new TestData().AllText;
            var    doc   = XDocument.Parse(text);
            var    table = new PerfDataLoader().GetItem(doc);

            var para = new LandingParameters(
                55000.0,
                0.0,
                1000.0,
                -10.0,
                -1.0,
                15.0,
                1013.25,
                5.0,
                ReverserOption.NoRev,
                SurfaceCondition.Good,
                0,
                0);

            var dis = new LandingCalculator(table, para)
                      .DistanceRequiredMeter();

            double expectedDistance = 1200.0 + 85.0 + 30.0 + 205.0 +
                                      30.0 + 1.98 / 10.0 * 30.0 + 100.0 * 0.5 + 145.0;

            Assert.AreEqual(expectedDistance, dis, 1E-7);
        }
        public void WhenRwyIsTooShortShouldThrowException()
        {
            string text  = new TestData().AllText;
            var    doc   = XDocument.Parse(text);
            var    table = new PerfDataLoader().GetItem(doc);

            var para = new LandingParameters(
                55000.0,
                0.0,        // Too short runway
                1000.0,
                -10.0,
                -1.0,
                15.0,
                1013.0,
                5.0,
                ReverserOption.NoRev,
                SurfaceCondition.Good,
                0,
                0);

            Assert.Throws <RunwayTooShortException>(() =>
            {
                new LandingReportGenerator(table, para).GetReport();
            });
        }
        public void GetReportTest()
        {
            string text  = new TestData().AllText;
            var    doc   = XDocument.Parse(text);
            var    table = new PerfDataLoader().GetItem(doc);

            var para = new LandingParameters(
                55000.0,
                3000.0,
                1000.0,
                -10.0,
                -1.0,
                15.0,
                1013.0,
                5.0,
                ReverserOption.NoRev,
                SurfaceCondition.Good,
                0,
                0);

            var report = new LandingReportGenerator(table, para).GetReport();

            AssertMainResult(report, para, table);
            AssertOtherResult(report, para, table);
        }
Пример #4
0
        /// <summary>
        /// Load all xml in the landing performance data folder.
        /// Files in wrong format are ignored.
        /// If two files have the same profile name, the rules are:
        /// (1) The file in custom folder shadows file in default folder.
        /// (2) Only one of them is loaded.
        /// </summary>
        public IEnumerable <PerfTable> Load()
        {
            var tables = new Dictionary <string, PerfTable>();
            var files  = Directory.GetFiles(CustomFolderPath).Concat(
                Directory.GetFiles(DefaultFolderPath));

            foreach (var i in files)
            {
                try
                {
                    var table = new PerfDataLoader().ReadFromXml(i);
                    tables.Add(table.Entry.ProfileName, table);
                }
                catch { }
            }

            return(tables.Select(kv => kv.Value));
        }
Пример #5
0
        public void ReadTableTest()
        {
            var data      = new TestData();
            var allTables = new PerfDataLoader().ReadTable(XDocument.Parse(data.PerfXml).Root);

            Assert.AreEqual(1, allTables.Flaps.Count);
            var table = allTables.Tables[0];

            Assert.AreEqual(500.0, table.PacksOffDry, delta);
            Assert.AreEqual(500.0, table.PacksOffWet, delta);
            Assert.AreEqual(1700.0, table.PacksOffClimb, delta);
            Assert.AreEqual(0.0, table.AIEngDry, delta);
            Assert.AreEqual(0.0, table.AIEngWet, delta);
            Assert.AreEqual(0.0, table.AIEngClimb, delta);
            Assert.AreEqual(2050.0, table.AIBothDry, delta);
            Assert.AreEqual(2200.0, table.AIBothWet, delta);
            Assert.AreEqual(2100.0, table.AIBothClimb, delta);
            Assert.IsTrue(table.Flaps == "5");
            Assert.IsTrue(table.AltnRatingAvail);
            Assert.AreEqual(2, table.AlternateThrustTables.Count);

            Assert.IsTrue(table.AlternateThrustTables[0].Equals(
                              data.AltnThrustTables[0], delta));
            Assert.IsTrue(table.AlternateThrustTables[1].Equals(
                              data.AltnThrustTables[1], delta));

            Assert.IsTrue(table.ThrustRatings.SequenceEqual(new[] { "TO", "TO1", "TO2" }));

            Assert.IsTrue(table.SlopeCorrDry.Equals(data.SlopeCorrDry, delta));
            Assert.IsTrue(table.SlopeCorrWet.Equals(data.SlopeCorrWet, delta));
            Assert.IsTrue(table.WindCorrDry.Equals(data.WindCorrDry, delta));
            Assert.IsTrue(table.WindCorrWet.Equals(data.WindCorrWet, delta));
            Assert.IsTrue(table.WeightTableDry.Equals(data.WtTableDry, delta));
            Assert.IsTrue(table.WeightTableWet.Equals(data.WtTableWet, delta));
            Assert.IsTrue(table.ClimbLimitWt.Equals(data.ClimbLimTable, delta));
        }
Пример #6
0
        public void GetItemTest()
        {
            string text  = new TestData().AllText;
            var    doc   = XDocument.Parse(text);
            var    table = new PerfDataLoader().GetItem(doc);

            Assert.AreEqual(table.WeightRef, 50000.0, delta);
            Assert.AreEqual(table.WeightStep, 5000.0, delta);

            Assert.IsTrue(table.BrakesAvailable(SurfaceCondition.Dry).SequenceEqual(
                              "MAX MANUAL", "MAX AUTO"));

            Assert.IsTrue(table.BrakesAvailable(SurfaceCondition.Good).SequenceEqual(
                              "MAX MANUAL"));

            Assert.IsTrue(table.Flaps.SequenceEqual("30", "40"));
            Assert.IsTrue(table.Reversers.SequenceEqual("Both", "One Rev", "No Rev"));

            Assert.IsTrue(table.DataDry.Equals(new TableDry(
                                                   new[]
            {
                new[]
                {
                    new[] { 750, 55, -40, 15, 15, -30, 95, 5, -5, 15, -15, 55, 10, 25.0 },
                    new[] { 955, 60, -60, 20, 20, -35, 125, 0, 0, 20, -20, 95, 0, 0.0 }
                },
                new[]
                {
                    new[] { 750, 55, -40, 15, 15, -30, 100, 10, -5, 15, -15, 60, 10, 25.0 },
                    new[] { 930, 55, -55, 20, 20, -35, 125, 0, 0, 20, -20, 95, 0, 0.0 }
                }
            }),
                                               delta));

            Assert.IsTrue(table.DataWet.Equals(new TableWet(
                                                   new[]
            {
                new[]
                {
                    new[]
                    {
                        new[] { 1200, 85, -80, 30, 30, -55, 205, 30, -20, 30, -25, 100, 65, 145.0 }
                    },
                    new[]
                    {
                        new[] { 1595, 130, -120, 50, 50, -85, 335, 70, -50, 45, -40, 130, 175, 430.0 }
                    },
                    new[]
                    {
                        new[] { 2045, 185, -170, 65, 65, -130, 525, 170, -105, 55, -50, 150, 370, 1030.0 }
                    }
                },
                new[]
                {
                    new[]
                    {
                        new[] { 1185, 85, -70, 30, 30, -55, 205, 30, -20, 30, -25, 100, 65, 140.0 }
                    },
                    new[]
                    {
                        new[] { 1565, 130, -120, 45, 45, -85, 330, 70, -50, 45, -40, 130, 165, 405.0 }
                    },
                    new[]
                    {
                        new[] { 2005, 180, -165, 60, 60, -130, 525, 165, -105, 55, -50, 150, 345, 945.0 }
                    }
                }
            }),
                                               delta));
        }