def test_monkey_encoding_with_malus_action():
    agent = new_ape()
    agent.last_action = action_remove_malus()
    perception = [agent]
    encoded_perception = encode_perception(perception=perception)
    expected_length = _encoding_length(
        properties_to_encode=properties_to_encode)
    assert (encoded_perception.shape[0] == expected_length)
    assert_approx_equal(encoded_perception[0], agent.health)
    assert_approx_equal(encoded_perception[1], agent.malus)
    assert_approx_equal(encoded_perception[2], agent.max_speed)
    assert_approx_equal(encoded_perception[3], agent.position[0])
    assert_approx_equal(encoded_perception[4], agent.position[1])
    assert_approx_equal(encoded_perception[5], agent.strength)
    assert_approx_equal(encoded_perception[6],
                        _encode_type_properties(agent.type_properties))

    assert_approx_equal(encoded_perception[8], agent.velocity[0])
    assert_approx_equal(encoded_perception[9], agent.velocity[1])
    assert_approx_equal(encoded_perception[10], agent.action_cooldown)

    # assert(encoded_perception[0] == agent.health)
    # assert(encoded_perception[1] == agent.malus)
    # assert(encoded_perception[2] == agent.max_speed)
    # assert(encoded_perception[3] == agent.position[0])
    # assert(encoded_perception[4] == agent.position[1])
    # assert(encoded_perception[5] == agent.strength)
    # assert(encoded_perception[6] == _encode_type_properties(agent.type_properties))
    # assert(encoded_perception[8] == agent.velocity[0])
    # assert(encoded_perception[9] == agent.velocity[1])
    # assert(encoded_perception[10] == agent.action_cooldown)
    assert (np.sum(encoded_perception[12:]) > 0.0)
def test_empty_encoding():
    perception = []
    encoded_perception = encode_perception(perception=perception,
                                           expected_number_perceptions=2)
    expected_length = _encoding_length(
        properties_to_encode=properties_to_encode)
    assert (encoded_perception.shape[0] == 2 * expected_length)
    assert (np.sum(encoded_perception) == 0.0)
def test_grass_encoding():
    thing = new_grass()
    perception = [thing]
    encoded_perception = encode_perception(perception=perception)
    expected_length = _encoding_length(
        properties_to_encode=properties_to_encode)
    assert (encoded_perception.shape[0] == expected_length)
    assert_approx_equal(encoded_perception[0], thing.health)
    assert_approx_equal(encoded_perception[1], thing.malus)
    assert_approx_equal(encoded_perception[2], thing.max_speed)
    assert_approx_equal(encoded_perception[3], thing.position[0])
    assert_approx_equal(encoded_perception[4], thing.position[1])
    assert_approx_equal(encoded_perception[5], thing.strength)
    assert_approx_equal(encoded_perception[6],
                        _encode_type_properties(thing.type_properties))

    assert_approx_equal(encoded_perception[8], thing.velocity[0])
    assert_approx_equal(encoded_perception[9], thing.velocity[1])

    assert_approx_equal(np.sum(encoded_perception[10:]), 0.0)
def test_monkey_encoding_padding():
    agent = new_monkey()
    perception = [agent]
    encoded_perception = encode_perception(perception=perception,
                                           expected_number_perceptions=5)
    expected_length = _encoding_length(
        properties_to_encode=properties_to_encode)
    assert (encoded_perception.shape[0] == 5 * expected_length)
    assert_approx_equal(encoded_perception[0], agent.health)
    assert_approx_equal(encoded_perception[1], agent.malus)
    assert_approx_equal(encoded_perception[2], agent.max_speed)
    assert_approx_equal(encoded_perception[3], agent.position[0])
    assert_approx_equal(encoded_perception[4], agent.position[1])
    assert_approx_equal(encoded_perception[5], agent.strength)
    assert_approx_equal(encoded_perception[6],
                        _encode_type_properties(agent.type_properties))

    assert_approx_equal(encoded_perception[8], agent.velocity[0])
    assert_approx_equal(encoded_perception[9], agent.velocity[1])
    assert_approx_equal(encoded_perception[10], agent.action_cooldown)
    assert_approx_equal(np.sum(encoded_perception[12:]), 0.0)
def test_wolf_encoding_with_accel_action():
    agent = new_wolf()
    agent.last_action = action_accelerate(direction=random_position())
    perception = [agent]
    encoded_perception = encode_perception(perception=perception)
    expected_length = _encoding_length(
        properties_to_encode=properties_to_encode)
    assert (encoded_perception.shape[0] == expected_length)
    assert_approx_equal(encoded_perception[0], agent.health)
    assert_approx_equal(encoded_perception[1], agent.malus)
    assert_approx_equal(encoded_perception[2], agent.max_speed)
    assert_approx_equal(encoded_perception[3], agent.position[0])
    assert_approx_equal(encoded_perception[4], agent.position[1])
    assert_approx_equal(encoded_perception[5], agent.strength)
    assert_approx_equal(encoded_perception[6],
                        _encode_type_properties(agent.type_properties))

    assert_approx_equal(encoded_perception[8], agent.velocity[0])
    assert_approx_equal(encoded_perception[9], agent.velocity[1])
    assert_approx_equal(encoded_perception[10], agent.action_cooldown)

    assert_approx_equal(encoded_perception[12], 1.0)
    assert_approx_equal(encoded_perception[15], 1.0)
def test_encoding_length():
    # this test is required, as the format is hardcoded
    expected_length = _encoding_length(
        properties_to_encode=properties_to_encode)
    assert (expected_length == 29)