Ejemplo n.º 1
0
def test_conflicts_between_multiple(aircraft_on_collision):
    for i in range(2):
        pos, trk, gs, alt, vs, callsign, active, index, ac = copy.deepcopy(
            aircraft_on_collision)
        flow = Flow(pos, trk, gs, alt, vs, callsign, active)
        if i == 1:
            flow.deactivate('ac4')
        for step, t_lookahead in zip(
            [0.0, 0.35, 0.1, 0.05, 0.16, 0.0],
            [5 / 60, .36, 5 / 60, 5 / 60, 5 / 60, 0.]):
            individual_conflicts = np.array([[
                conflict_between(flow.aircraft[i], flow.aircraft[j],
                                 t_lookahead) for i in flow.index
            ] for j in flow.index])
            combined_conflicts = conflicts_between_multiple(
                flow, t_lookahead=t_lookahead)
            assert np.alltrue(
                conflicts_between_multiple(flow, t_lookahead=t_lookahead) ==
                conflicts_between_multiple(
                    flow, copy.deepcopy(flow), t_lookahead=t_lookahead))
            flow.t_lookahead = t_lookahead
            flow._update_collisions_and_conflicts()
            assert np.alltrue(combined_conflicts == individual_conflicts)
            assert np.alltrue(flow.conflicts == combined_conflicts)
            flow.step(step)
Ejemplo n.º 2
0
def test_flow_collision(aircraft_on_collision):

    pos, trk, gs, alt, vs, callsign, active, index, ac = copy.deepcopy(
        aircraft_on_collision)
    flow = Flow(pos,
                trk,
                gs,
                alt,
                vs,
                callsign,
                active,
                calculate_collisions=True)
    assert ~np.any(flow.collisions)
    flow.step(1.9 / 15)
    assert ~np.any(flow.collisions)
    flow.step(0.2 / 15)
    assert flow.collisions[2, 3] and flow.collisions[3, 2]
    flow.deactivate('ac4')
    assert ~np.any(flow.collisions)
    pos, trk, gs, alt, vs, callsign, active, index, ac = copy.deepcopy(
        aircraft_on_collision)
    active[3] = False
    flow = Flow(pos,
                trk,
                gs,
                alt,
                vs,
                callsign,
                active,
                calculate_collisions=True)
    flow.step(0.5)
    assert flow.collisions[0, 1] and flow.collisions[1, 0]
    assert np.sum(flow.collisions) == 2
    flow.step(0.1)
    assert np.sum(flow.collisions) == 0
Ejemplo n.º 3
0
def test_flow(caplog, aircraft_in_flow_list):
    pos, trk, gs, alt, vs, callsign, active, index, ac = aircraft_in_flow_list

    flow = Flow(pos, trk, gs, alt, vs, callsign, active)
    assert flow.position.shape == (3, 2)
    assert flow.v.shape == (3, 2)
    assert flow.alt.shape == (3, )
    assert flow.vs_fph.shape == (3, )
    assert flow.active.shape == (3, )

    assert flow.active == approx(np.array([True, True, False]))

    flow.step(1)
    v_expected = [[0, 100], [50, 0], [-150, 0]]
    pos_expected = [[0, 100], [51, 2], [10, 20]]
    alt_expected = [6000, 2000, 3000]
    for i in index:
        assert flow.v[i] == approx(v_expected[i])
        assert flow.alt[i] == approx(alt_expected[i])
        assert flow.position[i:i + 1] == approx(np.atleast_2d(pos_expected[i]))

        assert ac[i].position == approx(pos[i:i + 1])
        assert ac[i].trk == approx(trk[i])
        assert ac[i].gs == approx(gs[i])
        assert ac[i].alt == approx(alt[i])
        assert ac[i].vs == approx(vs[i])
        assert ac[i].callsign == callsign[i]
        assert ac[i].active == active[i]

    flow.activate('ac1')
    assert 'ac1 was already active' in caplog.text
    flow.activate('ac1', deactivate=True)

    flow.deactivate('ac3')
    assert 'ac3 was already inactive' in caplog.text
    flow.activate('ac3')

    flow.step(1)
    assert flow.position == approx(np.array([[0, 100], [101, 2], [-140, 20]]))
Ejemplo n.º 4
0
def test_conflict_between(aircraft_on_collision):
    pos, trk, gs, alt, vs, callsign, active, index, ac = copy.deepcopy(
        aircraft_on_collision)
    flow = Flow(pos, trk, gs, alt, vs, callsign, active)

    flow.deactivate('ac4')
    assert not conflict_between(
        flow.aircraft[2], flow.aircraft[3], t_lookahead=1)
    flow.activate('ac4')
    assert conflict_between(flow.aircraft[2], flow.aircraft[3], t_lookahead=1)

    assert not conflict_between(flow.aircraft[0], flow.aircraft[1])
    assert conflict_between(flow.aircraft[0],
                            flow.aircraft[1],
                            t_lookahead=.36)
    assert not conflict_between(flow.aircraft[2], flow.aircraft[3])
    flow.step(0.35)
    assert conflict_between(flow.aircraft[0], flow.aircraft[1])
    flow.step(0.10)
    assert conflict_between(flow.aircraft[2], flow.aircraft[3])
    flow.step(0.05)
    assert conflict_between(flow.aircraft[0], flow.aircraft[1])
    flow.step(0.16)
    assert not conflict_between(flow.aircraft[0], flow.aircraft[1])