public void CurrentNodeShouldReturnCorrectIndex()
        {
            // arrange
              const int currentNode = 3;

              var data = ProblemData();
              var roulette = Substitute.For<INodeSelector>();
              var ant = new Ant(0, data, roulette);

              roulette.SelectNextNode(ant).Returns(currentNode);

              // act
              ant.Initialise(7);
              ant.Step(1);

              // assert
              Assert.AreEqual(currentNode, ant.CurrentNode);
        }
        public void StepShouldBuildCorrectTourLength()
        {
            // arrange
              var expectedTour = new[] { 7, 3, 8, 2, 7 };
              var roulette = Substitute.For<INodeSelector>();
              var data = ProblemData();
              var ant = new Ant(0, data, roulette);

              // act
              ant.Initialise(7);
              for (var i = 1; i < expectedTour.Length; i++)
              {
            roulette.SelectNextNode(ant).Returns(expectedTour[i]);
            ant.Step(i);
              }

              // assert
              Assert.AreEqual(8, ant.TourLength);
              Assert.AreEqual(expectedTour, ant.Tour);
        }
        public void VisitedShouldReturnCorrectFlagsForAllAllNodes()
        {
            var visited = new[] { false, false, false, true, false, false, false, true, true, false };
              var tourSoFar = new[] { 7, 3, 8 };

              var roulette = Substitute.For<INodeSelector>();
              var data = ProblemData();
              var ant = new Ant(0, data, roulette);

              // act
              ant.Initialise(7);
              for (var i = 1; i < tourSoFar.Length; i++)
              {
            roulette.SelectNextNode(ant).Returns(tourSoFar[i]);
            ant.Step(i);
              }

              Assert.AreEqual(visited, ant.Visited);
        }