def test_potential_hof_members(mocker, one_island):
    island_a = mocker.Mock(hall_of_fame=['a'])
    island_b = mocker.Mock(hall_of_fame=['b'])
    island_c = mocker.Mock(hall_of_fame=['c'])
    archipelago = SerialArchipelago(one_island, num_islands=3)
    archipelago._islands = [island_a, island_b, island_c]
    assert archipelago._get_potential_hof_members() == ['a', 'b', 'c']
def test_archipelago_runs(one_island, two_island, three_island):
    max_generations = 100
    min_generations = 20
    error_tol = 0
    generation_step_report = 10
    archipelago = SerialArchipelago(one_island, num_islands=4)
    archipelago._islands = [one_island, two_island, three_island, three_island]
    result = archipelago.evolve_until_convergence(max_generations, error_tol,
                                                  generation_step_report,
                                                  min_generations)
    assert result.success
def test_island_migration(one_island, island_list):
    archipelago = SerialArchipelago(one_island, num_islands=4)
    archipelago._islands = island_list

    archipelago._coordinate_migration_between_islands()

    migration_count = 0
    for i, island in enumerate(archipelago._islands):
        initial_individual_values = [i] * VALUE_LIST_SIZE
        for individual in island.population:
            if initial_individual_values != individual.values:
                migration_count += 1
                break
    assert len(island_list) == migration_count
def test_convergence_of_archipelago(one_island, island_list):
    archipelago = SerialArchipelago(one_island, num_islands=4)
    archipelago._islands = island_list

    assert archipelago.get_best_fitness() <= 0