genetic_algorithms 2.2.0

Library for solving genetic algorithm problems
Documentation
use genetic_algorithms::chromosomes::Range;
use genetic_algorithms::genotypes::Range as RangeGenotype;
use genetic_algorithms::traits::ChromosomeT;

#[test]
fn test_new_range() {
    let chromosome = Range::<i32>::new();
    assert_eq!(chromosome.dna.len(), 0);
    assert!(
        chromosome.fitness.is_nan(),
        "New chromosome fitness should be NaN (uninitialized)"
    );
    assert_eq!(chromosome.age, 0);
}

#[test]
fn test_phenotype() {
    let mut chromosome = Range::<i32>::new();
    chromosome.dna.push(RangeGenotype {
        id: 10,
        ranges: vec![(0, 10)],
        value: 5,
    });
    let phenotype = chromosome.phenotype();
    assert_eq!(phenotype, "5");
}

#[test]
fn test_set_dna() {
    let mut chromosome = Range::<i32>::new();
    let dna = vec![
        RangeGenotype {
            id: 10,
            ranges: vec![(0, 10)],
            value: 5,
        },
        RangeGenotype {
            id: 20,
            ranges: vec![(10, 20)],
            value: 15,
        },
    ];
    use std::borrow::Cow;
    chromosome.set_dna(Cow::Borrowed(&dna));
    assert_eq!(chromosome.dna(), &dna[..]);
}

#[test]
fn test_set_fitness_fn() {
    let mut chromosome = Range::<i32>::new();
    chromosome.set_fitness_fn(|dna| dna.len() as f64);
    chromosome.calculate_fitness();
    assert_eq!(chromosome.fitness(), 0.0);

    let dna = vec![RangeGenotype::new(0, vec![(0, 10)], 0)];
    use std::borrow::Cow;
    chromosome.set_dna(Cow::Borrowed(dna.as_slice()));
    chromosome.calculate_fitness();
    assert_eq!(chromosome.fitness(), 1.0);
}

#[test]
fn test_set_fitness() {
    let mut chromosome = Range::<i32>::new();
    chromosome.set_fitness(42.0);
    assert_eq!(chromosome.fitness(), 42.0);
}

#[test]
fn test_set_age() {
    let mut chromosome = Range::<i32>::new();
    chromosome.set_age(5);
    assert_eq!(chromosome.age(), 5);
}