github.com/yaricom/goNEAT@v0.0.0-20210507221059-e2110b885482/neat/genetics/organism_test.go (about) 1 package genetics 2 3 import ( 4 "testing" 5 "math/rand" 6 "sort" 7 "math" 8 "bytes" 9 "encoding/gob" 10 ) 11 12 // tests organisms sorting 13 func TestOrganisms(t *testing.T) { 14 gnome := buildTestGenome(1) 15 count := 100 16 orgs := make(Organisms, count) 17 var err error 18 for i := 0; i < count; i++ { 19 orgs[i], err = NewOrganism(rand.Float64(), gnome, 1) 20 if err != nil { 21 t.Error(err) 22 return 23 } 24 } 25 26 // sort ascending 27 sort.Sort(orgs) 28 fit := 0.0 29 for _, o := range orgs { 30 if o.Fitness < fit { 31 t.Error("Wrong ascending sort order") 32 } 33 fit = o.Fitness 34 } 35 36 // sort descending 37 for i := 0; i < count; i++ { 38 orgs[i], err = NewOrganism(rand.Float64(), gnome, 1) 39 if err != nil { 40 t.Error(err) 41 return 42 } 43 } 44 sort.Sort(sort.Reverse(orgs)) 45 fit = math.MaxFloat64 46 for _, o := range orgs { 47 if o.Fitness > fit { 48 t.Error("Wrong ascending sort order") 49 } 50 fit = o.Fitness 51 } 52 } 53 54 func TestOrganism_MarshalBinary(t *testing.T) { 55 gnome := buildTestGenome(1) 56 org, err := NewOrganism(rand.Float64(), gnome, 1) 57 if err != nil { 58 t.Error(err) 59 return 60 } 61 62 // Marshal to binary 63 var buf bytes.Buffer 64 enc := gob.NewEncoder(&buf) 65 err = enc.Encode(org) 66 if err != nil { 67 t.Error(err) 68 return 69 } 70 71 // Unmarshal and check if the same 72 dec := gob.NewDecoder(&buf) 73 dec_org := Organism{} 74 err = dec.Decode(&dec_org) 75 if err != nil { 76 t.Error(err) 77 return 78 } 79 80 // check results 81 if org.Fitness != dec_org.Fitness { 82 t.Error("org.Fitness != dec_org.Fitness") 83 } 84 85 dec_gnome := dec_org.Genotype 86 if gnome.Id != dec_gnome.Id { 87 t.Error("gnome.Id != dec_gnome.Id") 88 } 89 90 91 equals, err := gnome.IsEqual(dec_gnome) 92 if !equals { 93 t.Error(err) 94 } 95 }