def test_calc_fitness(mocked_init, mocked_raise_on):

    planner = GAPlanner(None, None, None)
    planner._logger = ru.Logger('dummy')
    planner._campaign = []
    planner._population = [[1, 3, 5, 6, -1, 2, 7, -1, 4, 8, 9],
                           [1, 5, 6, -1, 3, 2, 7, -1, 4, 8, 9]]
    planner._est_txs = [[10, 10, 10], [10, 10, 10], [10, 10, 10], [10, 10, 10],
                        [10, 10, 10], [10, 10, 10], [10, 10, 10], [10, 10, 10],
                        [10, 10, 10], [10, 10, 10]]
    planner._abs_fitness_term = 30
    planner._population_size = 2
    planner._fitness = []
    for i in range(9):
        workflow = {
            'description': 'W%s' % str(i + 1),
            'id': i + 1,
            'num_oper': 10,
            'requirements': None
        }
        planner._campaign.append(workflow)
    planner._resources = [{
        'id': 1,
        'performance': 1
    }, {
        'id': 2,
        'performance': 1
    }, {
        'id': 3,
        'performance': 1
    }]
    planner._calc_fitness()
    assert planner._fitness[1] == 1
    assert planner._fitness[0] == (1 / math.sqrt(200))
def test_selection(mocked_init, mocked_raise_on):

    planner = GAPlanner(None, None, None)
    planner._logger = ru.Logger('dummy')
    planner._campaign = {'campaign': []}
    planner._population = [[1, 3, 5, 6, -1, 2, 7, -1, 4, 8, 9],
                           [1, 5, 6, -1, 3, 2, 7, -1, 4, 8, 9]]
    planner._population_size = 2
    planner._fitness = [1, 0.5]

    parents = planner._selection()
    assert (parents[0] == [1, 3, 5, 6, -1, 2, 7, -1, 4, 8, 9]
            or parents[0] == [1, 5, 6, -1, 3, 2, 7, -1, 4, 8, 9])