@fboes/aerofly-patterns
Version:
Landegerät - Create random custom missions for Aerofly FS 4.
124 lines (123 loc) • 7.42 kB
JavaScript
import { strict as assert } from "node:assert";
import { Point } from "@fboes/geojson";
import { AeroflyAircraftFinder } from "../../data/AeroflyAircraft.js";
import { Configuration } from "./Configuration.js";
import { HoldingPattern } from "./HoldingPattern.js";
import { HoldingPatternFix } from "./HoldingPatternFix.js";
export class HoldingPatternTest {
constructor() {
this.testHoldingPattern();
this.testHoldingPatternDME();
}
testHoldingPattern() {
const configuration = new Configuration([
"",
"",
"--dme-probability=0",
"--inbound-heading=0",
"--left-probability=0",
]);
assert.ok(configuration);
assert.ok(configuration instanceof Configuration);
assert.strictEqual(configuration.dmeProcedureProbability, 0);
assert.strictEqual(configuration.leftHandPatternProbability, 0);
const holdingPatternFix = new HoldingPatternFix("GND", "Test VOR", // Example name
"VOR/DME", new Point(8.0, 50.0, 0), 0, 127.0);
const aircraft = AeroflyAircraftFinder.get(configuration.aircraft);
assert.ok(aircraft);
const holdingPattern = new HoldingPattern(configuration, holdingPatternFix, aircraft);
//console.log("Holding Pattern Test:", holdingPattern);
assert.ok(holdingPattern);
assert.strictEqual(holdingPattern.id, "GND");
assert.ok(holdingPattern.turnRadiusMeters > 0);
assert.ok(holdingPattern.inboundHeading >= 0 && holdingPattern.inboundHeading < 360);
assert.ok(holdingPattern.inboundHeadingTrue >= 0 && holdingPattern.inboundHeadingTrue < 360);
assert.ok(holdingPattern.isLeftTurn === true || holdingPattern.isLeftTurn === false);
// ----
assert.strictEqual(holdingPattern.getEntry(-1), "offset");
assert.strictEqual(holdingPattern.getEntry(-45), "offset");
assert.strictEqual(holdingPattern.getEntry(-90), "direct");
assert.strictEqual(holdingPattern.getEntry(-180), "direct");
assert.strictEqual(holdingPattern.getEntry(-270), "parallel");
assert.strictEqual(holdingPattern.getEntry(-315), "parallel");
assert.strictEqual(holdingPattern.getEntry(-360), "parallel");
// ----
configuration.leftHandPatternProbability = 1;
const leftHandHoldingPattern = new HoldingPattern(configuration, holdingPatternFix, aircraft);
assert.strictEqual(leftHandHoldingPattern.getEntry(1), "offset");
assert.strictEqual(leftHandHoldingPattern.getEntry(45), "offset");
assert.strictEqual(leftHandHoldingPattern.getEntry(90), "direct");
assert.strictEqual(leftHandHoldingPattern.getEntry(180), "direct");
assert.strictEqual(leftHandHoldingPattern.getEntry(270), "parallel");
assert.strictEqual(leftHandHoldingPattern.getEntry(315), "parallel");
assert.strictEqual(leftHandHoldingPattern.getEntry(360), "parallel");
console.log(`✅ ${this.constructor.name}.testHoldingPattern successful`);
}
testHoldingPatternDME() {
const configuration = new Configuration([
"",
"",
"--dme-probability=1",
"--inbound-heading=0",
"--left-probability=0",
]);
assert.ok(configuration);
assert.ok(configuration instanceof Configuration);
assert.strictEqual(configuration.dmeProcedureProbability, 1);
//console.log(configuration);
const holdingPatternFix = new HoldingPatternFix("GND", "Test VOR", // Example name
"VOR/DME", new Point(8.0, 50.0, 0), 0, 127.0);
const aircraft = AeroflyAircraftFinder.get(configuration.aircraft);
assert.ok(aircraft);
const holdingPattern = new HoldingPattern(configuration, holdingPatternFix, aircraft);
//console.log("Holding Pattern Test:", holdingPattern);
assert.ok(holdingPattern);
assert.ok(holdingPattern.id.startsWith("GND+"));
assert.ok(holdingPattern.turnRadiusMeters > 0);
assert.ok(holdingPattern.inboundHeading >= 0 && holdingPattern.inboundHeading < 360);
assert.ok(holdingPattern.inboundHeadingTrue >= 0 && holdingPattern.inboundHeadingTrue < 360);
assert.ok(holdingPattern.isLeftTurn === true || holdingPattern.isLeftTurn === false);
// ----
configuration.dmeHoldingAwayFromNavaidProbability = 0;
assert.strictEqual(holdingPattern.getEntry(-1), "offset");
assert.strictEqual(holdingPattern.getEntry(-45), "offset");
assert.strictEqual(holdingPattern.getEntry(-90), "direct");
assert.strictEqual(holdingPattern.getEntry(-180), "direct");
assert.strictEqual(holdingPattern.getEntry(-270), "parallel");
assert.strictEqual(holdingPattern.getEntry(-315), "parallel");
assert.strictEqual(holdingPattern.getEntry(-360), "parallel");
// ----
configuration.dmeHoldingAwayFromNavaidProbability = 1;
const awayFromNavaidHoldingPattern = new HoldingPattern(configuration, holdingPatternFix, aircraft);
assert.strictEqual(awayFromNavaidHoldingPattern.getEntry(180 - 1), "offset");
assert.strictEqual(awayFromNavaidHoldingPattern.getEntry(180 - 45), "offset");
assert.strictEqual(awayFromNavaidHoldingPattern.getEntry(180 - 90), "direct");
assert.strictEqual(awayFromNavaidHoldingPattern.getEntry(180 - 180), "direct");
assert.strictEqual(awayFromNavaidHoldingPattern.getEntry(180 - 270), "parallel");
assert.strictEqual(awayFromNavaidHoldingPattern.getEntry(180 - 315), "parallel");
assert.strictEqual(awayFromNavaidHoldingPattern.getEntry(180 - 360), "parallel");
// ----
configuration.dmeHoldingAwayFromNavaidProbability = 1;
configuration.leftHandPatternProbability = 1;
const leftHandAwayHoldingPattern = new HoldingPattern(configuration, holdingPatternFix, aircraft);
assert.strictEqual(leftHandAwayHoldingPattern.getEntry(180 + 1), "offset");
assert.strictEqual(leftHandAwayHoldingPattern.getEntry(180 + 45), "offset");
assert.strictEqual(leftHandAwayHoldingPattern.getEntry(180 + 90), "direct");
assert.strictEqual(leftHandAwayHoldingPattern.getEntry(180 + 180), "direct");
assert.strictEqual(leftHandAwayHoldingPattern.getEntry(180 + 270), "parallel");
assert.strictEqual(leftHandAwayHoldingPattern.getEntry(180 + 315), "parallel");
assert.strictEqual(leftHandAwayHoldingPattern.getEntry(180 + 360), "parallel");
// ----
configuration.dmeHoldingAwayFromNavaidProbability = 0;
configuration.leftHandPatternProbability = 1;
const leftHandHoldingPattern = new HoldingPattern(configuration, holdingPatternFix, aircraft);
assert.strictEqual(leftHandHoldingPattern.getEntry(1), "offset");
assert.strictEqual(leftHandHoldingPattern.getEntry(45), "offset");
assert.strictEqual(leftHandHoldingPattern.getEntry(90), "direct");
assert.strictEqual(leftHandHoldingPattern.getEntry(180), "direct");
assert.strictEqual(leftHandHoldingPattern.getEntry(270), "parallel");
assert.strictEqual(leftHandHoldingPattern.getEntry(315), "parallel");
assert.strictEqual(leftHandHoldingPattern.getEntry(360), "parallel");
console.log(`✅ ${this.constructor.name}.testHoldingPatternDME successful`);
}
}