genevo 0.7.1

genevo provides building blocks to run simulations of optimization and search problems using genetic algorithms (GA). Execute genetic algorithm (GA) simulations in a customizable and extensible way.
Documentation
#[macro_use]
extern crate criterion;

use criterion::Criterion;

#[derive(Debug, PartialEq)]
struct Gene {
    order: Vec<usize>,
}

struct Fixture {
    data: Vec<Gene>,
}

impl Fixture {
    fn index_of_gene_functional(&self, gene: &Gene) -> Option<usize> {
        self.data.iter().position(|g| *g == *gene)
    }

    fn index_of_gene_for_loop_over_index(&self, gene: &Gene) -> Option<usize> {
        let mut index_of_gene = None;
        for i in 0..self.data.len() {
            if *gene == self.data[i] {
                index_of_gene = Some(i);
                break;
            }
        }
        index_of_gene
    }
}

fn fixture(member: usize, size: usize) -> Fixture {
    Fixture {
        data: (0..member)
            .map(|i| Gene {
                order: (i..i + size).collect(),
            })
            .collect(),
    }
}

fn index_of_gene_in_vector_the_functional_way_200_member(c: &mut Criterion) {
    let fixture = fixture(200, 11);
    c.bench_function(
        "index of gene in vector of 200 members the functional way",
        move |b| {
            b.iter(|| {
                for i in 0..fixture.data.len() {
                    let gene = &fixture.data[i];
                    fixture.index_of_gene_functional(gene);
                }
            })
        },
    );
}

fn index_of_gene_in_vector_for_loop_over_index_200_member(c: &mut Criterion) {
    let fixture = fixture(200, 11);
    c.bench_function(
        "index of gene in vector of 200 members using for loop",
        move |b| {
            b.iter(|| {
                for i in 0..fixture.data.len() {
                    let gene = &fixture.data[i];
                    fixture.index_of_gene_for_loop_over_index(gene);
                }
            })
        },
    );
}

fn index_of_gene_in_vector_the_functional_way_20_member(c: &mut Criterion) {
    let fixture = fixture(20, 200);
    c.bench_function(
        "index of gene in vector of 20 members the functional way",
        move |b| {
            b.iter(|| {
                for i in 0..fixture.data.len() {
                    let gene = &fixture.data[i];
                    fixture.index_of_gene_functional(gene);
                }
            })
        },
    );
}

fn index_of_gene_in_vector_for_loop_over_index_20_member(c: &mut Criterion) {
    let fixture = fixture(20, 200);
    c.bench_function(
        "index of gene in vector of 20 members using for loop",
        move |b| {
            b.iter(|| {
                for i in 0..fixture.data.len() {
                    let gene = &fixture.data[i];
                    fixture.index_of_gene_for_loop_over_index(gene);
                }
            })
        },
    );
}

fn index_of_gene_in_vector_the_functional_way_2000_member(c: &mut Criterion) {
    let fixture = fixture(2000, 11);
    c.bench_function(
        "index of gene in vector of 2000 members the functional way",
        move |b| {
            b.iter(|| {
                for i in 0..fixture.data.len() {
                    let gene = &fixture.data[i];
                    fixture.index_of_gene_functional(gene);
                }
            })
        },
    );
}

fn index_of_gene_in_vector_for_loop_over_index_2000_member(c: &mut Criterion) {
    let fixture = fixture(2000, 11);
    c.bench_function(
        "index of gene in vector of 2000 members using for loop",
        move |b| {
            b.iter(|| {
                for i in 0..fixture.data.len() {
                    let gene = &fixture.data[i];
                    fixture.index_of_gene_for_loop_over_index(gene);
                }
            })
        },
    );
}

criterion_group!(
    benches,
    index_of_gene_in_vector_the_functional_way_200_member,
    index_of_gene_in_vector_for_loop_over_index_200_member,
    index_of_gene_in_vector_the_functional_way_20_member,
    index_of_gene_in_vector_for_loop_over_index_20_member,
    index_of_gene_in_vector_the_functional_way_2000_member,
    index_of_gene_in_vector_for_loop_over_index_2000_member,
);
criterion_main!(benches);