123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231 |
- package gago
- import (
- "testing"
- )
- func sliceContainsInt(x int, ints []int) bool {
- for _, v := range ints {
- if v == x {
- return true
- }
- }
- return false
- }
- func sliceContainsFloat64(x float64, floats []float64) bool {
- for _, v := range floats {
- if v == x {
- return true
- }
- }
- return false
- }
- func sliceContainsString(x string, strings []string) bool {
- for _, v := range strings {
- if v == x {
- return true
- }
- }
- return false
- }
- func TestMutNormalFloat64All(t *testing.T) {
- var (
- rng = newRandomNumberGenerator()
- genome = []float64{1, 2, 3}
- mutated = make([]float64, len(genome))
- )
- copy(mutated, genome)
- MutNormalFloat64(mutated, 1, rng)
- for i, v := range mutated {
- if v == genome[i] {
- t.Error("Gene should have been modified but hasn't")
- }
- }
- }
- func TestMutNormalFloat64None(t *testing.T) {
- var (
- rng = newRandomNumberGenerator()
- genome = []float64{1, 2, 3}
- mutated = make([]float64, len(genome))
- )
- copy(mutated, genome)
- MutNormalFloat64(mutated, 0, rng)
- for i, v := range mutated {
- if v != genome[i] {
- t.Error("Gene has been modified but shouldn't have")
- }
- }
- }
- func TestMutUniformString(t *testing.T) {
- var (
- rng = newRandomNumberGenerator()
- genome = []string{"a", "b", "c"}
- corpus = []string{"d", "e", "f"}
- mutated = make([]string, len(genome))
- )
- copy(mutated, genome)
- MutUniformString(mutated, corpus, 3, rng)
- // Check the length of the mutated genome is consistent
- if len(mutated) != len(genome) {
- t.Error("Mutated genome has the wrong length")
- }
- // Check the new genes are present in the previous genome or in the corpus
- for _, v := range mutated {
- var inGenome = false
- for _, gene := range genome {
- if gene == v {
- inGenome = true
- }
- }
- var inCorpus = false
- for _, element := range corpus {
- if element == v {
- inCorpus = true
- }
- }
- if !inGenome && !inCorpus {
- t.Error("New genome is not present in previous genome or in corpus")
- }
- }
- }
- func TestMutPermuteSingleGene(t *testing.T) {
- var (
- rng = newRandomNumberGenerator()
- genome = []int{42}
- )
- MutPermuteInt(genome, 1, rng)
- // Check the length of the mutated genome
- if len(genome) != 1 {
- t.Error("Mutated genome has the wrong length")
- }
- // Check the value of the mutated genome
- for genome[0] != 42 {
- t.Error("Mutated genome has the wrong value")
- }
- }
- func TestMutPermuteInt(t *testing.T) {
- var (
- rng = newRandomNumberGenerator()
- genome = []int{1, 2, 3}
- mutated = make([]int, len(genome))
- )
- copy(mutated, genome)
- MutPermuteInt(mutated, 3, rng)
- // Check the length of the mutated genome is consistent
- if len(mutated) != len(genome) {
- t.Error("Mutated genome has the wrong length")
- }
- // Check the genes in the initial genome are still present
- for _, v := range genome {
- if !sliceContainsInt(v, mutated) {
- t.Error("Gene in initial genome has disappeared")
- }
- }
- }
- func TestMutPermuteFloat64(t *testing.T) {
- var (
- rng = newRandomNumberGenerator()
- genome = []float64{1, 2, 3}
- mutated = make([]float64, len(genome))
- )
- copy(mutated, genome)
- MutPermuteFloat64(mutated, 3, rng)
- // Check the length of the mutated genome is consistent
- if len(mutated) != len(genome) {
- t.Error("Mutated genome has the wrong length")
- }
- // Check the genes in the initial genome are still present
- for _, v := range genome {
- if !sliceContainsFloat64(v, mutated) {
- t.Error("Gene in initial genome has disappeared")
- }
- }
- }
- func TestMutPermuteString(t *testing.T) {
- var (
- rng = newRandomNumberGenerator()
- genome = []string{"a", "b", "c"}
- mutated = make([]string, len(genome))
- )
- copy(mutated, genome)
- MutPermuteString(mutated, 3, rng)
- // Check the length of the mutated genome is consistent
- if len(mutated) != len(genome) {
- t.Error("Mutated genome has the wrong length")
- }
- // Check the genes in the initial genome are still present
- for _, v := range genome {
- if !sliceContainsString(v, mutated) {
- t.Error("Gene in initial genome has disappeared")
- }
- }
- }
- func TestMutSpliceInt(t *testing.T) {
- var (
- rng = newRandomNumberGenerator()
- genome = []int{1, 2, 3}
- mutated = make([]int, len(genome))
- )
- copy(mutated, genome)
- MutSpliceInt(mutated, rng)
- // Check the length of the mutated genome is consistent
- if len(mutated) != len(genome) {
- t.Error("Mutated genome has the wrong length")
- }
- // Check the genes in the initial genome are still present
- for _, v := range genome {
- if !sliceContainsInt(v, mutated) {
- t.Error("Gene in initial genome has disappeared")
- }
- }
- }
- func TestMutSpliceFloat64(t *testing.T) {
- var (
- rng = newRandomNumberGenerator()
- genome = []float64{1, 2, 3}
- mutated = make([]float64, len(genome))
- )
- copy(mutated, genome)
- MutSpliceFloat64(mutated, rng)
- // Check the length of the mutated genome is consistent
- if len(mutated) != len(genome) {
- t.Error("Mutated genome has the wrong length")
- }
- // Check the genes in the initial genome are still present
- for _, v := range genome {
- if !sliceContainsFloat64(v, mutated) {
- t.Error("Gene in initial genome has disappeared")
- }
- }
- }
- func TestMutSpliceString(t *testing.T) {
- var (
- rng = newRandomNumberGenerator()
- genome = []string{"a", "b", "c"}
- mutated = make([]string, len(genome))
- )
- copy(mutated, genome)
- MutSpliceString(mutated, rng)
- // Check the length of the mutated genome is consistent
- if len(mutated) != len(genome) {
- t.Error("Mutated genome has the wrong length")
- }
- // Check the genes in the initial genome are still present
- for _, v := range genome {
- if !sliceContainsString(v, mutated) {
- t.Error("Gene in initial genome has disappeared")
- }
- }
- }
|