raptor-journey-planner
Version:
Implementation of the Round bAsed Public Transit Optimized Router (Raptor) journey planning algorithm.
566 lines (565 loc) • 28.5 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const chai = require("chai");
const JourneyFactory_1 = require("../../../src/results/JourneyFactory");
const util_1 = require("../util");
const RaptorAlgorithmFactory_1 = require("../../../src/raptor/RaptorAlgorithmFactory");
const DepartAfterQuery_1 = require("../../../src/query/DepartAfterQuery");
const Service_1 = require("../../../src/gtfs/Service");
describe("DepartAfterQuery", () => {
const journeyFactory = new JourneyFactory_1.JourneyFactory();
it("finds journeys with direct connections", () => {
const trips = [
(0, util_1.t)((0, util_1.st)("A", null, 1000), (0, util_1.st)("B", 1030, 1035), (0, util_1.st)("C", 1100, null))
];
const raptor = RaptorAlgorithmFactory_1.RaptorAlgorithmFactory.create(trips, {}, {});
const query = new DepartAfterQuery_1.DepartAfterQuery(raptor, journeyFactory);
const result = query.plan("A", "C", new Date("2018-10-16"), 900);
(0, util_1.setDefaultTrip)(result);
chai.expect(result).to.deep.equal([
(0, util_1.j)([
(0, util_1.st)("A", null, 1000),
(0, util_1.st)("B", 1030, 1035),
(0, util_1.st)("C", 1100, null)
])
]);
});
it("finds the earliest calendars", () => {
const trips = [
(0, util_1.t)((0, util_1.st)("A", null, 1400), (0, util_1.st)("B", 1430, 1435), (0, util_1.st)("C", 1500, null)),
(0, util_1.t)((0, util_1.st)("A", null, 1000), (0, util_1.st)("B", 1030, 1035), (0, util_1.st)("C", 1100, null))
];
const raptor = RaptorAlgorithmFactory_1.RaptorAlgorithmFactory.create(trips, {}, {});
const query = new DepartAfterQuery_1.DepartAfterQuery(raptor, journeyFactory);
const result = query.plan("A", "C", new Date("2018-10-16"), 900);
(0, util_1.setDefaultTrip)(result);
chai.expect(result).to.deep.equal([
(0, util_1.j)([
(0, util_1.st)("A", null, 1000),
(0, util_1.st)("B", 1030, 1035),
(0, util_1.st)("C", 1100, null)
])
]);
});
it("finds journeys with a single connection", () => {
const trips = [
(0, util_1.t)((0, util_1.st)("A", null, 1000), (0, util_1.st)("B", 1030, 1035), (0, util_1.st)("C", 1100, null)),
(0, util_1.t)((0, util_1.st)("D", null, 1000), (0, util_1.st)("B", 1030, 1035), (0, util_1.st)("E", 1100, null))
];
const raptor = RaptorAlgorithmFactory_1.RaptorAlgorithmFactory.create(trips, {}, {});
const query = new DepartAfterQuery_1.DepartAfterQuery(raptor, journeyFactory);
const result = query.plan("A", "E", new Date("2018-10-16"), 900);
(0, util_1.setDefaultTrip)(result);
chai.expect(result).to.deep.equal([
(0, util_1.j)([
(0, util_1.st)("A", null, 1000),
(0, util_1.st)("B", 1030, 1035),
], [
(0, util_1.st)("B", 1030, 1035),
(0, util_1.st)("E", 1100, null)
])
]);
});
it("does not return journeys that cannot be made", () => {
const trips = [
(0, util_1.t)((0, util_1.st)("A", null, 1000), (0, util_1.st)("B", 1035, 1035), (0, util_1.st)("C", 1100, null)),
(0, util_1.t)((0, util_1.st)("D", null, 1000), (0, util_1.st)("B", 1030, 1030), (0, util_1.st)("E", 1100, null))
];
const raptor = RaptorAlgorithmFactory_1.RaptorAlgorithmFactory.create(trips, {}, {});
const query = new DepartAfterQuery_1.DepartAfterQuery(raptor, journeyFactory, 1);
const result = query.plan("A", "E", new Date("2018-10-16"), 900);
(0, util_1.setDefaultTrip)(result);
chai.expect(result).to.deep.equal([]);
});
it("returns the fastest and the least changes", () => {
const trips = [
(0, util_1.t)((0, util_1.st)("A", null, 1000), (0, util_1.st)("B", 1030, 1030), (0, util_1.st)("C", 1200, null)),
(0, util_1.t)((0, util_1.st)("B", null, 1030), (0, util_1.st)("C", 1100, null))
];
const raptor = RaptorAlgorithmFactory_1.RaptorAlgorithmFactory.create(trips, {}, {});
const query = new DepartAfterQuery_1.DepartAfterQuery(raptor, journeyFactory);
const result = query.plan("A", "C", new Date("2018-10-16"), 900);
(0, util_1.setDefaultTrip)(result);
const direct = (0, util_1.j)([
(0, util_1.st)("A", null, 1000),
(0, util_1.st)("B", 1030, 1030),
(0, util_1.st)("C", 1200, null)
]);
const change = (0, util_1.j)([
(0, util_1.st)("A", null, 1000),
(0, util_1.st)("B", 1030, 1030),
], [
(0, util_1.st)("B", null, 1030),
(0, util_1.st)("C", 1100, null)
]);
chai.expect(result).to.deep.equal([
direct,
change
]);
});
it("chooses the fastest journey where the number of journeys is the same", () => {
const trips = [
(0, util_1.t)((0, util_1.st)("A", null, 1000), (0, util_1.st)("B", 1030, 1030), (0, util_1.st)("C", 1100, null)),
(0, util_1.t)((0, util_1.st)("C", null, 1200), (0, util_1.st)("D", 1230, 1230), (0, util_1.st)("E", 1300, null)),
(0, util_1.t)((0, util_1.st)("A", null, 1100), (0, util_1.st)("F", 1130, 1130), (0, util_1.st)("G", 1200, null)),
(0, util_1.t)((0, util_1.st)("G", null, 1200), (0, util_1.st)("H", 1230, 1230), (0, util_1.st)("E", 1255, null)),
];
const raptor = RaptorAlgorithmFactory_1.RaptorAlgorithmFactory.create(trips, {}, {});
const query = new DepartAfterQuery_1.DepartAfterQuery(raptor, journeyFactory);
const result = query.plan("A", "E", new Date("2018-10-16"), 900);
(0, util_1.setDefaultTrip)(result);
const fastest = (0, util_1.j)([
(0, util_1.st)("A", null, 1100),
(0, util_1.st)("F", 1130, 1130),
(0, util_1.st)("G", 1200, null)
], [
(0, util_1.st)("G", null, 1200),
(0, util_1.st)("H", 1230, 1230),
(0, util_1.st)("E", 1255, null)
]);
chai.expect(result).to.deep.equal([
fastest
]);
});
it("chooses an arbitrary journey when they are the same", () => {
const trips = [
(0, util_1.t)((0, util_1.st)("A", null, 1000), (0, util_1.st)("B", 1030, 1030), (0, util_1.st)("C", 1100, null)),
(0, util_1.t)((0, util_1.st)("C", null, 1200), (0, util_1.st)("D", 1230, 1230), (0, util_1.st)("E", 1300, null)),
(0, util_1.t)((0, util_1.st)("A", null, 1100), (0, util_1.st)("F", 1130, 1130), (0, util_1.st)("G", 1200, null)),
(0, util_1.t)((0, util_1.st)("G", null, 1200), (0, util_1.st)("H", 1230, 1230), (0, util_1.st)("E", 1300, null)),
];
const raptor = RaptorAlgorithmFactory_1.RaptorAlgorithmFactory.create(trips, {}, {});
const query = new DepartAfterQuery_1.DepartAfterQuery(raptor, journeyFactory);
const result = query.plan("A", "E", new Date("2018-10-16"), 900);
(0, util_1.setDefaultTrip)(result);
const journey1 = (0, util_1.j)([
(0, util_1.st)("A", null, 1000),
(0, util_1.st)("B", 1030, 1030),
(0, util_1.st)("C", 1100, null)
], [
(0, util_1.st)("C", null, 1200),
(0, util_1.st)("D", 1230, 1230),
(0, util_1.st)("E", 1300, null)
]);
chai.expect(result).to.deep.equal([
journey1
]);
});
it("chooses the correct change point", () => {
const trips = [
(0, util_1.t)((0, util_1.st)("A", null, 1000), (0, util_1.st)("B", 1030, null)),
(0, util_1.t)((0, util_1.st)("A", null, 1030), (0, util_1.st)("C", 1200, null)),
(0, util_1.t)((0, util_1.st)("C", null, 1000), (0, util_1.st)("B", 1030, 1030), (0, util_1.st)("E", 1100, null)),
(0, util_1.t)((0, util_1.st)("C", null, 1200), (0, util_1.st)("B", 1230, 1230), (0, util_1.st)("E", 1300, null)),
];
const raptor = RaptorAlgorithmFactory_1.RaptorAlgorithmFactory.create(trips, {}, {});
const query = new DepartAfterQuery_1.DepartAfterQuery(raptor, journeyFactory);
const result = query.plan("A", "E", new Date("2018-10-16"), 900);
(0, util_1.setDefaultTrip)(result);
const change = (0, util_1.j)([
(0, util_1.st)("A", null, 1000),
(0, util_1.st)("B", 1030, null)
], [
(0, util_1.st)("B", 1030, 1030),
(0, util_1.st)("E", 1100, null)
]);
chai.expect(result).to.deep.equal([
change
]);
});
it("finds journeys with a transfer", () => {
const trips = [
(0, util_1.t)((0, util_1.st)("A", null, 1000), (0, util_1.st)("B", 1030, 1035), (0, util_1.st)("C", 1100, null)),
(0, util_1.t)((0, util_1.st)("D", null, 1200), (0, util_1.st)("E", 1300, null))
];
const transfers = {
"C": [
(0, util_1.tf)("C", "D", 10)
]
};
const raptor = RaptorAlgorithmFactory_1.RaptorAlgorithmFactory.create(trips, transfers, {});
const query = new DepartAfterQuery_1.DepartAfterQuery(raptor, journeyFactory);
const result = query.plan("A", "E", new Date("2018-10-16"), 900);
(0, util_1.setDefaultTrip)(result);
chai.expect(result).to.deep.equal([
(0, util_1.j)([
(0, util_1.st)("A", null, 1000),
(0, util_1.st)("B", 1030, 1035),
(0, util_1.st)("C", 1100, null)
], (0, util_1.tf)("C", "D", 10), [
(0, util_1.st)("D", null, 1200),
(0, util_1.st)("E", 1300, null)
])
]);
});
it("uses a transfer if it is faster", () => {
const trips = [
(0, util_1.t)((0, util_1.st)("A", null, 1000), (0, util_1.st)("B", 1030, 1030), (0, util_1.st)("C", 1100, null)),
(0, util_1.t)((0, util_1.st)("C", null, 1130), (0, util_1.st)("D", 1200, null))
];
const transfers = {
"C": [
(0, util_1.tf)("C", "D", 10)
]
};
const raptor = RaptorAlgorithmFactory_1.RaptorAlgorithmFactory.create(trips, transfers, {});
const query = new DepartAfterQuery_1.DepartAfterQuery(raptor, journeyFactory);
const result = query.plan("A", "D", new Date("2018-10-16"), 900);
(0, util_1.setDefaultTrip)(result);
const transfer = (0, util_1.j)([
(0, util_1.st)("A", null, 1000),
(0, util_1.st)("B", 1030, 1030),
(0, util_1.st)("C", 1100, null)
], (0, util_1.tf)("C", "D", 10));
chai.expect(result).to.deep.equal([
transfer
]);
});
it("doesn't allow pick up from locations without pickup specified", () => {
const trips = [
(0, util_1.t)((0, util_1.st)("A", null, 1000), (0, util_1.st)("B", 1030, 1030), (0, util_1.st)("C", 1200, null)),
(0, util_1.t)((0, util_1.st)("E", null, 1000), (0, util_1.st)("B", 1030, null), (0, util_1.st)("C", 1100, null))
];
const raptor = RaptorAlgorithmFactory_1.RaptorAlgorithmFactory.create(trips, {}, {});
const query = new DepartAfterQuery_1.DepartAfterQuery(raptor, journeyFactory);
const result = query.plan("A", "C", new Date("2018-10-16"), 900);
(0, util_1.setDefaultTrip)(result);
const direct = (0, util_1.j)([
(0, util_1.st)("A", null, 1000),
(0, util_1.st)("B", 1030, 1030),
(0, util_1.st)("C", 1200, null)
]);
chai.expect(result).to.deep.equal([
direct
]);
});
it("doesn't allow drop off at non-drop off locations", () => {
const trips = [
(0, util_1.t)((0, util_1.st)("A", null, 1000), (0, util_1.st)("B", null, 1030), (0, util_1.st)("C", 1200, null)),
(0, util_1.t)((0, util_1.st)("E", null, 1000), (0, util_1.st)("B", 1030, 1030), (0, util_1.st)("C", 1100, null))
];
const raptor = RaptorAlgorithmFactory_1.RaptorAlgorithmFactory.create(trips, {}, {});
const query = new DepartAfterQuery_1.DepartAfterQuery(raptor, journeyFactory);
const result = query.plan("A", "C", new Date("2018-10-16"), 900);
(0, util_1.setDefaultTrip)(result);
const direct = (0, util_1.j)([
(0, util_1.st)("A", null, 1000),
(0, util_1.st)("B", null, 1030),
(0, util_1.st)("C", 1200, null)
]);
chai.expect(result).to.deep.equal([
direct
]);
});
it("applies interchange times", () => {
const trips = [
(0, util_1.t)((0, util_1.st)("A", null, 1000), (0, util_1.st)("B", 1030, 1030), (0, util_1.st)("C", 1200, null)),
(0, util_1.t)((0, util_1.st)("B", null, 1030), (0, util_1.st)("C", 1100, null)),
(0, util_1.t)((0, util_1.st)("B", null, 1040), (0, util_1.st)("C", 1110, null))
];
const transfers = {};
const interchange = { B: 10 };
const raptor = RaptorAlgorithmFactory_1.RaptorAlgorithmFactory.create(trips, transfers, interchange);
const query = new DepartAfterQuery_1.DepartAfterQuery(raptor, journeyFactory);
const result = query.plan("A", "C", new Date("2018-10-16"), 900);
(0, util_1.setDefaultTrip)(result);
const direct = (0, util_1.j)([
(0, util_1.st)("A", null, 1000),
(0, util_1.st)("B", 1030, 1030),
(0, util_1.st)("C", 1200, null)
]);
const change = (0, util_1.j)([
(0, util_1.st)("A", null, 1000),
(0, util_1.st)("B", 1030, 1030),
], [
(0, util_1.st)("B", null, 1040),
(0, util_1.st)("C", 1110, null)
]);
chai.expect(result).to.deep.equal([
direct,
change
]);
});
it("applies interchange times to transfers", () => {
const trips = [
(0, util_1.t)((0, util_1.st)("A", null, 1000), (0, util_1.st)("B", 1030, null)),
(0, util_1.t)((0, util_1.st)("C", null, 1030), (0, util_1.st)("D", 1100, null)),
(0, util_1.t)((0, util_1.st)("C", null, 1050), (0, util_1.st)("D", 1110, null)),
(0, util_1.t)((0, util_1.st)("C", null, 1100), (0, util_1.st)("D", 1120, null))
];
const transfers = {
"B": [
(0, util_1.tf)("B", "C", 10)
]
};
const interchange = { B: 10, C: 10 };
const raptor = RaptorAlgorithmFactory_1.RaptorAlgorithmFactory.create(trips, transfers, interchange);
const query = new DepartAfterQuery_1.DepartAfterQuery(raptor, journeyFactory);
const result = query.plan("A", "D", new Date("2018-10-16"), 900);
(0, util_1.setDefaultTrip)(result);
const lastPossible = (0, util_1.j)([
(0, util_1.st)("A", null, 1000),
(0, util_1.st)("B", 1030, null),
], (0, util_1.tf)("B", "C", 10), [
(0, util_1.st)("C", null, 1100),
(0, util_1.st)("D", 1120, null)
]);
chai.expect(result).to.deep.equal([
lastPossible
]);
});
it("omits calendars not running that day", () => {
const trip = (0, util_1.t)((0, util_1.st)("B", null, 1030), (0, util_1.st)("C", 1100, null));
trip.service = new Service_1.Service(20181001, 20181015, util_1.allDays, {});
const trips = [
(0, util_1.t)((0, util_1.st)("A", null, 1000), (0, util_1.st)("B", 1030, null)),
trip,
(0, util_1.t)((0, util_1.st)("B", null, 1040), (0, util_1.st)("C", 1110, null))
];
const transfers = {};
const interchange = {};
const raptor = RaptorAlgorithmFactory_1.RaptorAlgorithmFactory.create(trips, transfers, interchange);
const query = new DepartAfterQuery_1.DepartAfterQuery(raptor, journeyFactory);
const result = query.plan("A", "C", new Date("2018-10-16"), 900);
(0, util_1.setDefaultTrip)(result);
const change = (0, util_1.j)([
(0, util_1.st)("A", null, 1000),
(0, util_1.st)("B", 1030, null),
], [
(0, util_1.st)("B", null, 1040),
(0, util_1.st)("C", 1110, null)
]);
chai.expect(result).to.deep.equal([
change
]);
});
it("omits calendars not running that day of the week", () => {
const trip = (0, util_1.t)((0, util_1.st)("B", null, 1030), (0, util_1.st)("C", 1100, null));
const days = Object.assign({}, util_1.allDays, { 1: false });
trip.service = new Service_1.Service(20181001, 20991231, days, {});
const trips = [
(0, util_1.t)((0, util_1.st)("A", null, 1000), (0, util_1.st)("B", 1030, null)),
trip,
(0, util_1.t)((0, util_1.st)("B", null, 1040), (0, util_1.st)("C", 1110, null))
];
const transfers = {};
const interchange = {};
const raptor = RaptorAlgorithmFactory_1.RaptorAlgorithmFactory.create(trips, transfers, interchange);
const query = new DepartAfterQuery_1.DepartAfterQuery(raptor, journeyFactory);
const result = query.plan("A", "C", new Date("2018-10-22"), 900);
(0, util_1.setDefaultTrip)(result);
const change = (0, util_1.j)([
(0, util_1.st)("A", null, 1000),
(0, util_1.st)("B", 1030, null),
], [
(0, util_1.st)("B", null, 1040),
(0, util_1.st)("C", 1110, null)
]);
chai.expect(result).to.deep.equal([
change
]);
});
it("includes calendars with an include day", () => {
const trip = (0, util_1.t)((0, util_1.st)("B", null, 1030), (0, util_1.st)("C", 1100, null));
trip.service = new Service_1.Service(20991231, 20991231, util_1.allDays, { 20181022: true });
const trips = [
(0, util_1.t)((0, util_1.st)("A", null, 1000), (0, util_1.st)("B", 1030, null)),
trip,
(0, util_1.t)((0, util_1.st)("B", null, 1040), (0, util_1.st)("C", 1110, null))
];
const transfers = {};
const interchange = {};
const raptor = RaptorAlgorithmFactory_1.RaptorAlgorithmFactory.create(trips, transfers, interchange);
const query = new DepartAfterQuery_1.DepartAfterQuery(raptor, journeyFactory);
const result = query.plan("A", "C", new Date("2018-10-22"), 900);
(0, util_1.setDefaultTrip)(result);
const change = (0, util_1.j)([
(0, util_1.st)("A", null, 1000),
(0, util_1.st)("B", 1030, null),
], [
(0, util_1.st)("B", null, 1030),
(0, util_1.st)("C", 1100, null)
]);
chai.expect(result).to.deep.equal([
change
]);
});
it("omits calendars with an exclude day", () => {
const trip = (0, util_1.t)((0, util_1.st)("B", null, 1030), (0, util_1.st)("C", 1100, null));
trip.service = new Service_1.Service(20181001, 20991231, util_1.allDays, { 20181022: false });
const trips = [
(0, util_1.t)((0, util_1.st)("A", null, 1000), (0, util_1.st)("B", 1030, null)),
trip,
(0, util_1.t)((0, util_1.st)("B", null, 1040), (0, util_1.st)("C", 1110, null))
];
const transfers = {};
const interchange = {};
const raptor = RaptorAlgorithmFactory_1.RaptorAlgorithmFactory.create(trips, transfers, interchange);
const query = new DepartAfterQuery_1.DepartAfterQuery(raptor, journeyFactory);
const result = query.plan("A", "C", new Date("2018-10-22"), 900);
(0, util_1.setDefaultTrip)(result);
const change = (0, util_1.j)([
(0, util_1.st)("A", null, 1000),
(0, util_1.st)("B", 1030, null),
], [
(0, util_1.st)("B", null, 1040),
(0, util_1.st)("C", 1110, null)
]);
chai.expect(result).to.deep.equal([
change
]);
});
it("finds journeys after gaps in rounds", () => {
const trips = [
(0, util_1.t)((0, util_1.st)("A", null, 1000), (0, util_1.st)("B", 1030, 1035), (0, util_1.st)("C", 1400, null)),
(0, util_1.t)((0, util_1.st)("B", null, 1035), (0, util_1.st)("D", 1100, null)),
(0, util_1.t)((0, util_1.st)("D", null, 1100), (0, util_1.st)("E", 1130, null)),
(0, util_1.t)((0, util_1.st)("E", null, 1130), (0, util_1.st)("C", 1200, null)),
(0, util_1.t)((0, util_1.st)("A", null, 1000), (0, util_1.st)("E", 1135, null)),
(0, util_1.t)((0, util_1.st)("E", null, 1135), (0, util_1.st)("C", 1330, null)),
];
const raptor = RaptorAlgorithmFactory_1.RaptorAlgorithmFactory.create(trips, {}, {});
const query = new DepartAfterQuery_1.DepartAfterQuery(raptor, journeyFactory);
const result = query.plan("A", "C", new Date("2018-10-16"), 900);
(0, util_1.setDefaultTrip)(result);
const direct = (0, util_1.j)([
(0, util_1.st)("A", null, 1000),
(0, util_1.st)("B", 1030, 1035),
(0, util_1.st)("C", 1400, null)
]);
const slowChange = (0, util_1.j)([
(0, util_1.st)("A", null, 1000),
(0, util_1.st)("E", 1135, null)
], [
(0, util_1.st)("E", null, 1135),
(0, util_1.st)("C", 1330, null)
]);
const change = (0, util_1.j)([
(0, util_1.st)("A", null, 1000),
(0, util_1.st)("B", 1030, 1035)
], [
(0, util_1.st)("B", null, 1035),
(0, util_1.st)("D", 1100, null)
], [
(0, util_1.st)("D", null, 1100),
(0, util_1.st)("E", 1130, null)
], [
(0, util_1.st)("E", null, 1130),
(0, util_1.st)("C", 1200, null)
]);
chai.expect(result).to.deep.equal([
direct,
slowChange,
change
]);
});
it("puts overtaken trains in different routes", () => {
const trips = [
(0, util_1.t)((0, util_1.st)("A", null, 1000), (0, util_1.st)("B", 1030, 1030), (0, util_1.st)("C", 1100, 1110), (0, util_1.st)("D", 1130, 1130), (0, util_1.st)("E", 1200, null)),
(0, util_1.t)((0, util_1.st)("A", null, 1010), (0, util_1.st)("B", 1040, 1040), (0, util_1.st)("C", 1050, 1100), (0, util_1.st)("D", 1120, 1120), (0, util_1.st)("E", 1150, null)),
];
const raptor = RaptorAlgorithmFactory_1.RaptorAlgorithmFactory.create(trips, {}, {});
const query = new DepartAfterQuery_1.DepartAfterQuery(raptor, journeyFactory);
const result = query.plan("A", "E", new Date("2018-10-16"), 900);
(0, util_1.setDefaultTrip)(result);
const faster = (0, util_1.j)([
(0, util_1.st)("A", null, 1010),
(0, util_1.st)("B", 1040, 1040),
(0, util_1.st)("C", 1050, 1100),
(0, util_1.st)("D", 1120, 1120),
(0, util_1.st)("E", 1150, null)
]);
chai.expect(result).to.deep.equal([
faster
]);
});
it("finds journeys that can only be made by waiting for the next day", () => {
const trips = [
(0, util_1.t)((0, util_1.st)("A", null, 1000), (0, util_1.st)("B", 1035, 1035), (0, util_1.st)("C", 1100, null)),
(0, util_1.t)((0, util_1.st)("D", null, 1000), (0, util_1.st)("B", 1030, 1030), (0, util_1.st)("E", 1100, null))
];
const raptor = RaptorAlgorithmFactory_1.RaptorAlgorithmFactory.create(trips, {}, {});
const query = new DepartAfterQuery_1.DepartAfterQuery(raptor, journeyFactory, 2);
const result = query.plan("A", "E", new Date("2018-10-16"), 900);
(0, util_1.setDefaultTrip)(result);
const expected = (0, util_1.j)([
(0, util_1.st)("A", null, 1000),
(0, util_1.st)("B", 1035, 1035),
], [
(0, util_1.st)("B", 1030, 1030),
(0, util_1.st)("E", 1100, null)
]);
chai.expect(result[0].legs).to.deep.equal(expected.legs);
});
it("adds a day to the arrival time of journeys that are made overnight", () => {
const trips = [
(0, util_1.t)((0, util_1.st)("A", null, 1000), (0, util_1.st)("B", 1035, 1035), (0, util_1.st)("C", 1100, null)),
(0, util_1.t)((0, util_1.st)("D", null, 1000), (0, util_1.st)("B", 1030, 1030), (0, util_1.st)("E", 1100, null))
];
const raptor = RaptorAlgorithmFactory_1.RaptorAlgorithmFactory.create(trips, {}, {});
const query = new DepartAfterQuery_1.DepartAfterQuery(raptor, journeyFactory, 2);
const result = query.plan("A", "E", new Date("2018-10-16"), 900);
(0, util_1.setDefaultTrip)(result);
chai.expect(result[0].arrivalTime).to.equal(1100 + 86400);
});
it("increments the day when searching subsequent days", () => {
const trips = [
(0, util_1.t)((0, util_1.st)("A", null, 1000), (0, util_1.st)("B", 1030, 1030), (0, util_1.st)("C", 1100, null)),
(0, util_1.t)((0, util_1.st)("D", null, 1000), (0, util_1.st)("B", 1035, 1035), (0, util_1.st)("E", 1100, null))
];
trips[1].service = util_1.services["2"];
const raptor = RaptorAlgorithmFactory_1.RaptorAlgorithmFactory.create(trips, {}, {});
const query = new DepartAfterQuery_1.DepartAfterQuery(raptor, journeyFactory, 2);
const result = query.plan("A", "E", new Date("2018-12-31"), 900);
(0, util_1.setDefaultTrip)(result);
chai.expect(result[0].arrivalTime).to.equal(1100 + 86400);
});
it("uses all results from every day", () => {
const trips = [
(0, util_1.t)((0, util_1.st)("A", null, 1900), (0, util_1.st)("B", 1930, 1935), (0, util_1.st)("C", 2000, null)),
(0, util_1.t)((0, util_1.st)("B", null, 1035), (0, util_1.st)("D", 1100, null)),
(0, util_1.t)((0, util_1.st)("D", null, 1100), (0, util_1.st)("E", 1130, null)),
(0, util_1.t)((0, util_1.st)("C", null, 1130), (0, util_1.st)("E", 1200, null))
];
const raptor = RaptorAlgorithmFactory_1.RaptorAlgorithmFactory.create(trips, {}, {});
const query = new DepartAfterQuery_1.DepartAfterQuery(raptor, journeyFactory, 2);
const result = query.plan("A", "E", new Date("2019-04-23"), 900);
(0, util_1.setDefaultTrip)(result);
const change = (0, util_1.j)([
(0, util_1.st)("A", null, 1900),
(0, util_1.st)("B", 1930, 1935)
], [
(0, util_1.st)("B", null, 1035),
(0, util_1.st)("D", 1100, null)
], [
(0, util_1.st)("D", null, 1100),
(0, util_1.st)("E", 1130, null)
]);
const noChange = (0, util_1.j)([
(0, util_1.st)("A", null, 1900),
(0, util_1.st)("B", 1930, 1935),
(0, util_1.st)("C", 2000, null)
], [
(0, util_1.st)("C", null, 1130),
(0, util_1.st)("E", 1200, null)
]);
const expected = [
noChange,
change,
];
expected.forEach(journey => journey.arrivalTime += 86400);
chai.expect(result).to.deep.equal(expected);
});
it("does not return overnight journeys that cannot be made", () => {
const trips = [
(0, util_1.t)((0, util_1.st)("A", null, 86000), (0, util_1.st)("B", 86400, 86400), (0, util_1.st)("C", 86400 + 3600 + 3600, null)),
(0, util_1.t)((0, util_1.st)("C", null, 3600), (0, util_1.st)("D", 3635, 3635), (0, util_1.st)("E", 3700, null)),
(0, util_1.t)((0, util_1.st)("C", null, 3600 + 3600), (0, util_1.st)("D", 3635 + 3600, 3635 + 3600), (0, util_1.st)("E", 3700 + 3600, null))
];
const raptor = RaptorAlgorithmFactory_1.RaptorAlgorithmFactory.create(trips, {}, {});
const query = new DepartAfterQuery_1.DepartAfterQuery(raptor, journeyFactory, 2);
const result = query.plan("A", "E", new Date("2018-12-31"), 50000);
(0, util_1.setDefaultTrip)(result);
chai.expect(result[0].arrivalTime).to.equal(86400 + 3700 + 3600);
});
});