public void generateScoresArrayTest()
 {
     Genetics genetics = new Genetics(20, 20, 19);
     genetics.createBoard();
     genetics.generatePopulation(10);
     genetics.generateScores();
     Assert.AreEqual(10, genetics.individualsSortedByScore.Count);
 }
 public void generatePopulationBinaryChromosomesTest()
 {
     Genetics genetics = new Genetics(20, 20, 19);
     genetics.generatePopulation(10);
     Assert.AreEqual(5, genetics.numOfBinaryDigitsForStartCells);
     Assert.AreEqual(2*19, genetics.numOfBinaryDigitsForSteps);
     Assert.AreEqual(10, genetics.population.Length);
     Assert.IsTrue(genetics.population[0][0] < 2, "Encoding of individuals must be binary and 1st digit was: "+ genetics.population[0][0]);
 }
 public void calculatePathOfIndividualOutOfBoundsTest()
 {
     Genetics genetics = new Genetics(5, 5, 4);
     genetics.generatePopulation(10);
     int[] individual = { 1, 0, 0,
                          0, 0,
                          0, 0,
                          1, 1,
                          1, 0};
     Tuple<int, int>[] individualPath = genetics.calculatePathOfIndividual(individual);
     Tuple<int, int>[] expectedPath = { new Tuple<int, int>(0, 4), new Tuple<int, int>(1, 4), new Tuple<int, int>(2, 4),
                                        new Tuple<int, int>(2, 5), new Tuple<int, int>(3, 5)};
     Assert.AreEqual(expectedPath[0], individualPath[0]);
     Assert.AreEqual(expectedPath[1], individualPath[1]);
     Assert.AreEqual(expectedPath[4], individualPath[4]);
 }
 public void generateScoresAndSortIndividualsTest()
 {
     Genetics genetics = new Genetics(3, 3, 2);
     genetics.mapHelpers.matrix = new Genetics.Actions[3, 3];
     genetics.mapHelpers.matrix[0, 0] = Genetics.Actions.Circus;
     genetics.mapHelpers.matrix[0, 1] = Genetics.Actions.Team;
     genetics.mapHelpers.matrix[0, 2] = Genetics.Actions.Advisor;
     genetics.mapHelpers.matrix[1, 0] = Genetics.Actions.Sales;
     genetics.mapHelpers.matrix[1, 1] = Genetics.Actions.Investor;
     genetics.mapHelpers.matrix[1, 2] = Genetics.Actions.Circus;
     genetics.mapHelpers.matrix[2, 0] = Genetics.Actions.None;
     genetics.mapHelpers.matrix[2, 1] = Genetics.Actions.None;
     genetics.mapHelpers.matrix[2, 2] = Genetics.Actions.BadNews;
     genetics.generatePopulation(3);
     genetics.population[0] = new int[] { 1, 0, 0, 1, 0, 1 }; // Starting 0,2; down; down
     genetics.population[1] = new int[] { 0, 1, 0, 0, 0, 1 }; // Starting 0,1; right; down
     genetics.population[2] = new int[] { 1, 0, 0, 0, 0, 0 }; // Starting 0,2; right; right
     genetics.generateScores();
     Assert.AreEqual(1, genetics.individualsSortedByScore[0].Key);
     Assert.AreEqual(0, genetics.individualsSortedByScore[1].Key);
     Assert.AreEqual(2, genetics.individualsSortedByScore[2].Key);
 }
 public void generateMap()
 {
     // In future maybe set the number of columns and rows like
     // http://stackoverflow.com/questions/15623461/adding-pictureboxes-to-tablelayoutpanel-is-very-slow
     Cursor.Current = Cursors.WaitCursor;
     this.genetics = new Genetics(this.numCols, this.numRows, this.numSteps);
     this.genetics.createBoard();
     for (int i = 0; i < this.tableLayoutPanel1.ColumnCount; i++)
     {
         for (int j = 0; j < this.tableLayoutPanel1.RowCount; j++)
         {
             this.tableCells[i, j].Image = this.genetics.getIconForPos(i, j);
             this.tableCells[i, j].SizeMode = PictureBoxSizeMode.StretchImage;
         }
     }
     Cursor.Current = Cursors.Default;
     this.button2.Enabled = true;
 }