UNPKG

raptor-journey-planner

Version:

Implementation of the Round bAsed Public Transit Optimized Router (Raptor) journey planning algorithm.

566 lines (565 loc) 28.5 kB
"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); }); });