migration_test.go 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. package gago
  2. import "testing"
  3. func TestMigSizes(t *testing.T) {
  4. var (
  5. rng = newRandomNumberGenerator()
  6. migrators = []Migrator{
  7. MigRing{
  8. NMigrants: 5,
  9. },
  10. }
  11. )
  12. for _, migrator := range migrators {
  13. for _, nbrPops := range []int{2, 3, 10} {
  14. var fitnessMeans = make([]float64, nbrPops)
  15. for _, nbrIndis := range []int{6, 10, 30} {
  16. // Instantiate populations
  17. var pops = make([]Population, nbrPops)
  18. for i := range pops {
  19. pops[i] = newPopulation(nbrIndis, NewVector, randString(3, rng))
  20. pops[i].Individuals.Evaluate()
  21. fitnessMeans[i] = pops[i].Individuals.FitAvg()
  22. }
  23. migrator.Apply(pops, rng)
  24. // Check the Population sizes haven't changed
  25. for _, pop := range pops {
  26. if len(pop.Individuals) != nbrIndis {
  27. t.Error("Migration changed the Population sizes")
  28. }
  29. }
  30. // Check the average fitnesses have changed
  31. for i, pop := range pops {
  32. if pop.Individuals.FitAvg() == fitnessMeans[i] {
  33. t.Error("Average fitnesses didn't change")
  34. }
  35. }
  36. }
  37. }
  38. }
  39. }
  40. func TestMigRingValidate(t *testing.T) {
  41. var mig = MigRing{1}
  42. if err := mig.Validate(); err != nil {
  43. t.Error("Validation should not have raised error")
  44. }
  45. // Set NMigrants lower than 1
  46. mig.NMigrants = 0
  47. if err := mig.Validate(); err == nil {
  48. t.Error("Validation should raised error")
  49. }
  50. }