Esempio n. 1
0
class TestCarPositioner:
    def init(self):
        self.start_node = TraversableNode(node_id=1, lat=50.06238262767, long=19.92439693544)
        self.end_node = TraversableNode(node_id=2, lat=50.0622555, long=19.9237373)
        self.long_way = Way(1, self.start_node, self.end_node, lanes=1, intermediate_nodes=[])
        self.long_way.distance = 100
        self.way_dict = {1: self.long_way}
        self.car = Car(current_way=self.long_way, current_lane=0, directions_map={1: 1}, way_position=0, destination_node_id=123, v=0, v_max=10, acc=10)
        self.positioner = Positioner(self.way_dict)

    def test_position_doesnt_change_after_first_move(self):
        self.init()
        self.car.make_a_move(self.positioner)

        assert self.car.way_position == 0

    def test_v_changes_after_first_move(self):
        self.init()
        self.car.make_a_move(self.positioner)

        assert self.car.v == self.car.acc

    def test_position_changes_after_2nd_move(self):
        self.init()
        self.car.make_a_move(self.positioner)
        self.car.make_a_move(self.positioner)

        assert self.car.way_position == self.car.acc

    def test_v_grows_only_to_v_max_basic(self):
        self.init()
        self.car.make_a_move(self.positioner)
        self.car.make_a_move(self.positioner)

        assert self.car.v == self.car.v_max

        self.car.make_a_move(self.positioner)
        assert self.car.v == self.car.v_max

        self.car.make_a_move(self.positioner)
        assert self.car.v == self.car.v_max

    def test_v_grows_only_to_v_max_less_basic(self):
        self.init()
        self.car.v_max = 15

        self.car.make_a_move(self.positioner)
        self.car.make_a_move(self.positioner)

        assert self.car.v == 15

        self.car.make_a_move(self.positioner)
        assert self.car.v == 15

        self.car.make_a_move(self.positioner)
        assert self.car.v == 15
class TestCarPositioner:
    def init(self):
        self.first_node_start = TraversableNode(node_id=1, lat=50.06238262767, long=19.92439693544)
        self.first_node_end = TraversableNode(node_id=2, lat=50.0622555, long=19.9237373)
        self.first_way = Way(1, self.first_node_start, self.first_node_end, lanes=1, intermediate_nodes=[])
        self.first_node_start.add_outgoing_way(self.first_way)
        self.first_way.distance = 10
        self.second_node_end = TraversableNode(node_id=3, lat=50.06238262767, long=19.92439693544)
        self.second_way = Way(2, self.first_node_end, self.second_node_end, lanes=1, intermediate_nodes=[])
        self.first_node_end.add_outgoing_way(self.second_way)
        self.second_way.distance = 2
        self.third_node_end = TraversableNode(node_id=4, lat=50.0622555, long=19.9237373)
        self.third_way = Way(3, self.second_node_end, self.third_node_end, lanes=1, intermediate_nodes=[])
        self.second_node_end.add_outgoing_way(self.third_way)
        self.way_dict = {1: self.first_way, 2: self.second_way, 3: self.third_way}
        self.directions_map = {1: 2, 2: 3, 3: 3}
        self.car = Car(current_way=self.first_way, current_lane=0, directions_map=self.directions_map, way_position=0,
                       destination_node_id=123, v=0, v_max=10, acc=10)
        self.positioner = Positioner(self.way_dict)

    def test_doesnt_move_if_it_cannot_move(self):
        self.init()
        self.first_way.lane_occupations[0].occupations[1].occupied = True
        self.car.make_a_move(self.positioner)  # do the first move (it doesnt affect position)
        self.car.make_a_move(self.positioner)

        assert self.car.way_position == 0

        self.car.make_a_move(self.positioner)
        assert self.car.way_position == 0

        self.car.make_a_move(self.positioner)
        assert self.car.way_position == 0

        self.car.make_a_move(self.positioner)
        assert self.car.way_position == 0

    def test_moves_only_to_first_unoccupied_position(self):
        self.init()
        self.first_way.lane_occupations[0].occupations[3].occupied = True
        self.car.make_a_move(self.positioner)  # do the first move (it doesnt affect position)
        self.car.make_a_move(self.positioner)

        assert self.car.way_position == 2
        assert self.car.v == 2

    def test_respects_if_first_position_in_next_way_is_occupied(self):
        self.init()
        self.first_way.distance = 5
        self.second_way.lane_occupations[0].occupations[0].occupied = True
        self.car.make_a_move(self.positioner)  # do the first move (it doesnt affect position)
        self.car.make_a_move(self.positioner)

        assert self.car.current_way.way_id == 1
        assert self.car.way_position == 4
        assert self.car.v == 4

        self.car.make_a_move(self.positioner)
        assert self.car.current_way.way_id == 1
        assert self.car.way_position == 4

        self.car.make_a_move(self.positioner)
        assert self.car.current_way.way_id == 1
        assert self.car.way_position == 4

    def test_moves_only_to_first_unoccupied_position_in_next_lane(self):
        self.init()
        self.first_way.distance = 5
        self.second_way.lane_occupations[0].occupations[1].occupied = True
        self.car.make_a_move(self.positioner)  # do the first move (it doesnt affect position)
        self.car.make_a_move(self.positioner)

        assert self.car.current_way.way_id == 2
        assert self.car.way_position == 0
        assert self.car.v == 5

        self.car.make_a_move(self.positioner)
        assert self.car.current_way.way_id == 2
        assert self.car.way_position == 0

        self.car.make_a_move(self.positioner)
        assert self.car.current_way.way_id == 2
        assert self.car.way_position == 0
class TestCarPositioner:
    def init(self):
        self.first_node_start = TraversableNode(node_id=1,
                                                lat=50.06238262767,
                                                long=19.92439693544)
        self.first_node_end = TraversableNode(node_id=2,
                                              lat=50.0622555,
                                              long=19.9237373)
        self.first_way = Way(1,
                             self.first_node_start,
                             self.first_node_end,
                             lanes=1,
                             intermediate_nodes=[])
        self.first_node_start.add_outgoing_way(self.first_way)
        self.first_way.distance = 5
        self.second_node_end = TraversableNode(node_id=3,
                                               lat=50.06238262767,
                                               long=19.92439693544)
        self.second_way = Way(2,
                              self.first_node_end,
                              self.second_node_end,
                              lanes=1,
                              intermediate_nodes=[])
        self.first_node_end.add_outgoing_way(self.second_way)
        self.second_way.distance = 2
        self.third_node_end = TraversableNode(node_id=4,
                                              lat=50.0622555,
                                              long=19.9237373)
        self.third_way = Way(3,
                             self.second_node_end,
                             self.third_node_end,
                             lanes=1,
                             intermediate_nodes=[])
        self.second_node_end.add_outgoing_way(self.third_way)
        self.way_dict = {
            1: self.first_way,
            2: self.second_way,
            3: self.third_way
        }
        self.directions_map = {1: 2, 2: 3, 3: 3}
        self.car = Car(current_way=self.first_way,
                       current_lane=0,
                       directions_map=self.directions_map,
                       way_position=0,
                       destination_node_id=123,
                       v=0,
                       v_max=10,
                       acc=10)
        self.positioner = Positioner(self.way_dict)

    def test_moves_trough_one_way(self):
        self.init()
        self.car.acc = 6
        self.car.make_a_move(
            self.positioner)  # do the first move (it doesnt affect position)
        self.car.make_a_move(self.positioner)

        assert self.car.current_way.way_id == self.second_way.way_id

    def test_moves_trough_one_way_and_has_correct_position(self):
        self.init()
        self.car.acc = 6
        self.car.make_a_move(
            self.positioner)  # do the first move (it doesnt affect position)
        self.car.make_a_move(self.positioner)

        assert self.car.current_way.way_id == self.second_way.way_id
        assert self.car.way_position == 1

    def test_moves_trough_two_ways(self):
        self.init()
        self.car.make_a_move(
            self.positioner)  # do the first move (it doesnt affect position)
        self.car.make_a_move(self.positioner)

        assert self.car.current_way.way_id == self.third_way.way_id

    def test_moves_trough_two_ways_and_has_correct_position(self):
        self.init()
        self.car.make_a_move(
            self.positioner)  # do the first move (it doesnt affect position)
        self.car.make_a_move(self.positioner)

        assert self.car.current_way.way_id == self.third_way.way_id
        assert self.car.way_position == 3

    def test_moves_trough_two_ways_and_reaches_destination(self):
        self.init()
        self.car.directions_map = {1: 2}
        self.car.make_a_move(
            self.positioner)  # do the first move (it doesnt affect position)

        self.car.make_a_move(self.positioner)
        assert self.car.current_way.way_id == self.second_way.way_id
        assert self.car.way_position == 1

        self.car.make_a_move(self.positioner)
        assert self.car.current_way.way_id == self.second_way.way_id
        assert self.car.way_position == 1