Пример #1
0
def find_max_duration__counterclockwise_test():
    resp_builder = ResponseBuilder()\
        .journey(sections=[
            {'mode': 'Walking', 'duration': 240},
            {'type': 'PT', 'duration': 300},
            {'mode': 'Walking', 'duration': 120},
        ], type='best', arrival='T1231')\
        .journey(uri='rapid', sections=[
            {'mode': 'Walking', 'duration': 120},
            {'type': 'PT', 'duration': 300},
            {'mode': 'Walking', 'duration': 120},
        ], type='rapid', arrival='T1501')\
        .journey(uri='non pt', sections=[
            {'mode': 'Walking', 'duration': 130},
        ], type='non_pt_walk', arrival='T1534')

    response = resp_builder.response

    scenario = default.Scenario()
    assert scenario._find_max_duration(response.journeys, Instance(),
                                       False) == 580
    scenario._delete_too_long_journey(response, Instance(), False)
    assert len(response.journeys) == 2
    assert response.journeys[0] == resp_builder.get_journey('rapid')
    assert response.journeys[1] == resp_builder.get_journey('non pt')
Пример #2
0
def find_max_duration__counterclockwise_test():
    response = response_pb2.Response()
    journey1 = response.journeys.add()

    journey1.type = "best"
    section = journey1.sections.add()
    section.type = response_pb2.STREET_NETWORK
    section.street_network.mode = response_pb2.Walking
    section.duration = 240
    section = journey1.sections.add()
    section.type = response_pb2.PUBLIC_TRANSPORT
    section.duration = 300
    section = journey1.sections.add()
    section.type = response_pb2.STREET_NETWORK
    section.street_network.mode = response_pb2.Walking
    section.duration = 120
    journey1.duration = sum(
        [section.duration for section in journey1.sections])
    journey1.arrival_date_time = 1418211071
    journey1.departure_date_time = journey1.arrival_date_time - journey1.duration

    journey2 = response.journeys.add()
    journey2.type = "rapid"
    section = journey2.sections.add()
    section.type = response_pb2.STREET_NETWORK
    section.street_network.mode = response_pb2.Walking
    section.duration = 120
    section = journey2.sections.add()
    section.type = response_pb2.PUBLIC_TRANSPORT
    section.duration = 300
    section = journey2.sections.add()
    section.type = response_pb2.STREET_NETWORK
    section.street_network.mode = response_pb2.Walking
    section.duration = 120
    journey2.duration = sum(
        [section.duration for section in journey2.sections])
    journey2.arrival_date_time = 1418220071
    journey2.departure_date_time = journey2.arrival_date_time - journey2.duration

    journey3 = response.journeys.add()
    journey3.type = "non_pt_walk"
    section = journey3.sections.add()
    section.type = response_pb2.STREET_NETWORK
    section.street_network.mode = response_pb2.Walking
    section.duration = 130
    journey3.duration = sum(
        [section.duration for section in journey3.sections])
    journey3.arrival_date_time = 1418222071
    journey3.departure_date_time = journey3.arrival_date_time - journey3.duration

    scenario = default.Scenario()
    eq_(scenario._find_max_duration(response.journeys, Instance(), False), 580)
    scenario._delete_too_long_journey(response.journeys, Instance(), False)
    eq_(len(response.journeys), 2)
    eq_(response.journeys[0], journey2)
    eq_(response.journeys[1], journey3)
Пример #3
0
def previous_journey_test():
    """ In the default scenario, the previous journey is one minute before the first 'rapid' if we get one"""
    builder = ResponseBuilder(default_date=datetime.date(2016, 10, 10))\
        .journey(type='rapid', departure='T1200', arrival='T1500')\
        .journey(type='fastest', departure='T1100', arrival='T1700')\
        .journey(type='non_pt_walk', departure='T1000', arrival='T1534')\
        .journey(type='car', departure='T1300', arrival='T1534')

    scenario = default.Scenario()
    eq_(scenario.previous_journey_datetime(builder.get_journeys()), str_to_time_stamp('20161010T145900'))
Пример #4
0
def previous_journey_test_no_rapid():
    """ In the default scenario, if we don't get a rapid,
    the previous journey is one minute before the tardiest journey
    """
    builder = ResponseBuilder(default_date=datetime.date(2016, 10, 10))\
        .journey(type='fastest', departure='T1100', arrival='T1700')\
        .journey(type='non_pt_walk', departure='T1000', arrival='T1534')\
        .journey(type='car', departure='T2000', arrival='T1534')

    scenario = default.Scenario()
    eq_(scenario.previous_journey_datetime(builder.get_journeys()), str_to_time_stamp('20161010T165900'))
Пример #5
0
def next_journey_test():
    """ In the default scenario, the next journey is one minute after the first 'rapid' if we get one"""
    builder = ResponseBuilder(default_date=datetime.date(2016, 10, 10))\
        .journey(type='rapid', departure='T1200', arrival='T1500')\
        .journey(type='fastest', departure='T1100', arrival='T1700')\
        .journey(type='non_pt_walk', departure='T1000', arrival='T1534')\
        .journey(type='car', departure='T1300', arrival='T1534')

    scenario = default.Scenario()
    assert scenario.next_journey_datetime(
        builder.get_journeys(),
        clockwise=True) == str_to_time_stamp('20161010T120100')
Пример #6
0
def find_max_duration_clockwise_no_walk_test():
    """
    we don't have a journey with walking so max_duration is None, and we keep all journeys
    """
    resp_builder = (ResponseBuilder().journey(
        uri='best',
        sections=[
            {
                'mode': 'Bike',
                'duration': 240
            },
            {
                'type': 'PT',
                'duration': 300
            },
            {
                'mode': 'Walking',
                'duration': 120
            },
        ],
        type='best',
        arrival='T1534',
    ).journey(
        uri='rapid',
        sections=[
            {
                'mode': 'Walking',
                'duration': 120
            },
            {
                'type': 'PT',
                'duration': 300
            },
            {
                'mode': 'Bike',
                'duration': 120
            },
        ],
        type='rapid',
        arrival='T1534',
    ))
    response = resp_builder.response

    scenario = default.Scenario()
    assert scenario._find_max_duration(response.journeys, Instance(),
                                       True) == None
    scenario._delete_too_long_journey(response, Instance(), True)
    assert len(response.journeys) == 2
    assert response.journeys[0] == resp_builder.get_journey('best')
    assert response.journeys[1] == resp_builder.get_journey('rapid')
Пример #7
0
def delete_non_optimal_journey_simple_test():
    response = response_pb2.Response()
    journey1 = response.journeys.add()

    journey1.type = "best"
    section = journey1.sections.add()
    section.type = response_pb2.STREET_NETWORK
    section.street_network.mode = response_pb2.Walking
    section.duration = 120
    section = journey1.sections.add()
    section.type = response_pb2.PUBLIC_TRANSPORT
    section.duration = 300
    section = journey1.sections.add()
    section.type = response_pb2.STREET_NETWORK
    section.street_network.mode = response_pb2.Walking
    section.duration = 120
    journey1.duration = sum(
        [section.duration for section in journey1.sections])

    journey2 = response.journeys.add()
    journey2.type = "rapid"
    section = journey2.sections.add()
    section.type = response_pb2.STREET_NETWORK
    section.street_network.mode = response_pb2.Walking
    section.duration = 180
    section = journey2.sections.add()
    section.type = response_pb2.PUBLIC_TRANSPORT
    section.duration = 300
    section = journey2.sections.add()
    section.type = response_pb2.STREET_NETWORK
    section.street_network.mode = response_pb2.Walking
    section.duration = 220
    journey2.duration = sum(
        [section.duration for section in journey2.sections])

    journey3 = response.journeys.add()
    journey3.type = "non_pt_walk"
    section = journey3.sections.add()
    section.type = response_pb2.STREET_NETWORK
    section.street_network.mode = response_pb2.Walking
    section.duration = 250
    journey3.duration = sum(
        [section.duration for section in journey3.sections])

    scenario = default.Scenario()
    scenario._delete_non_optimal_journey(response.journeys)
    eq_(len(response.journeys), 2)
    eq_(response.journeys[0], journey1)
    eq_(response.journeys[1], journey3)
Пример #8
0
def find_max_duration_clockwise_test():
    """
    we don't have a journey with walking so max_duration is None, and we keep all journeys
    """
    response = response_pb2.Response()
    journey1 = response.journeys.add()

    journey1.type = "best"
    section = journey1.sections.add()
    section.type = response_pb2.STREET_NETWORK
    section.street_network.mode = response_pb2.Bike
    section.duration = 240
    section = journey1.sections.add()
    section.type = response_pb2.PUBLIC_TRANSPORT
    section.duration = 300
    section = journey1.sections.add()
    section.type = response_pb2.STREET_NETWORK
    section.street_network.mode = response_pb2.Walking
    section.duration = 120
    journey1.duration = sum(
        [section.duration for section in journey1.sections])
    journey1.arrival_date_time = 1418222071
    journey1.departure_date_time = journey1.arrival_date_time - journey1.duration

    journey2 = response.journeys.add()
    journey2.type = "rapid"
    section = journey2.sections.add()
    section.type = response_pb2.STREET_NETWORK
    section.street_network.mode = response_pb2.Walking
    section.duration = 120
    section = journey2.sections.add()
    section.type = response_pb2.PUBLIC_TRANSPORT
    section.duration = 300
    section = journey2.sections.add()
    section.type = response_pb2.STREET_NETWORK
    section.street_network.mode = response_pb2.Bike
    section.duration = 120
    journey2.duration = sum(
        [section.duration for section in journey2.sections])
    journey2.arrival_date_time = 1418220071
    journey2.departure_date_time = journey2.arrival_date_time - journey2.duration

    scenario = default.Scenario()
    eq_(scenario._find_max_duration(response.journeys, Instance(), True), None)
    scenario._delete_too_long_journey(response.journeys, Instance(), True)
    eq_(len(response.journeys), 2)
    eq_(response.journeys[0], journey1)
    eq_(response.journeys[1], journey2)
Пример #9
0
def next_journey_test_no_rapid_test():
    """ In the default scenario, if we don't get a rapid,
    the next journey is one minute after the earliest journey
    """
    builder = (ResponseBuilder(
        default_date=datetime.date(2016, 10, 10)).journey(
            type='fastest', departure='T1100',
            arrival='T1700').journey(type='non_pt_walk',
                                     departure='T1000',
                                     arrival='T1534').journey(
                                         type='car',
                                         departure='T2000',
                                         arrival='T1534'))

    scenario = default.Scenario()
    assert scenario.next_journey_datetime(
        builder.get_journeys(),
        clockwise=True) == str_to_time_stamp('20161010T100100')
Пример #10
0
def find_max_duration_clockwise_test_no_walk():
    """
    we don't have a journey with walking so max_duration is None, and we keep all journeys
    """
    resp_builder = ResponseBuilder()\
        .journey(uri='best', sections=[
            {'mode': 'Bike', 'duration': 240},
            {'type': 'PT', 'duration': 300},
            {'mode': 'Walking', 'duration': 120},
        ], type='best', arrival='T1534')\
        .journey(uri='rapid', sections=[
            {'mode': 'Walking', 'duration': 120},
            {'type': 'PT', 'duration': 300},
            {'mode': 'Bike', 'duration': 120},
        ], type='rapid', arrival='T1534')
    response = resp_builder.response

    scenario = default.Scenario()
    eq_(scenario._find_max_duration(response.journeys, Instance(), True), None)
    scenario._delete_too_long_journey(response, Instance(), True)
    eq_(len(response.journeys), 2)
    eq_(response.journeys[0], resp_builder.get_journey('best'))
    eq_(response.journeys[1], resp_builder.get_journey('rapid'))
Пример #11
0
def delete_non_optimal_journey_no_action_test():
    response = response_pb2.Response()
    journey = response.journeys.add()

    journey.type = "best"
    section = journey.sections.add()
    section.type = response_pb2.STREET_NETWORK
    section.street_network.mode = response_pb2.Walking
    section.duration = 120
    section = journey.sections.add()
    section.type = response_pb2.PUBLIC_TRANSPORT
    section.duration = 300
    section = journey.sections.add()
    section.type = response_pb2.STREET_NETWORK
    section.street_network.mode = response_pb2.Walking
    section.duration = 120
    journey.duration = sum([section.duration for section in journey.sections])

    journey2 = response.journeys.add()
    journey2.type = "rapid"
    section = journey2.sections.add()
    section.type = response_pb2.STREET_NETWORK
    section.street_network.mode = response_pb2.Walking
    section.duration = 120
    section = journey2.sections.add()
    section.type = response_pb2.PUBLIC_TRANSPORT
    section.duration = 300
    section = journey2.sections.add()
    section.type = response_pb2.STREET_NETWORK
    section.street_network.mode = response_pb2.Walking
    section.duration = 120
    journey2.duration = sum(
        [section.duration for section in journey2.sections])

    scenario = default.Scenario()
    scenario._delete_non_optimal_journey(response.journeys)
    eq_(len(response.journeys), 2)
Пример #12
0
def find_max_duration_clockwise_test():
    resp_builder = ResponseBuilder()\
        .journey(sections=[
            {'mode': 'Walking', 'duration': 240},
            {'type': 'PT', 'duration': 300},
            {'mode': 'Walking', 'duration': 120},
        ], type='best', arrival='T1501')\
        .journey(uri='rapid', sections=[
            {'mode': 'Walking', 'duration': 120},
            {'type': 'PT', 'duration': 300},
            {'mode': 'Walking', 'duration': 120},
        ], type='rapid', arrival='T1501')\
        .journey(uri='non pt', sections=[
            {'mode': 'Walking', 'duration': 130},
        ], type='non_pt_walk', arrival='T1231')

    response = resp_builder.response

    scenario = default.Scenario()
    eq_(scenario._find_max_duration(response.journeys, Instance(), True), 580)
    scenario._delete_too_long_journey(response, Instance(), True)
    eq_(len(response.journeys), 2)
    eq_(response.journeys[0], resp_builder.get_journey('rapid'))
    eq_(response.journeys[1], resp_builder.get_journey('non pt'))