public void CtorGivenNegativeInitialPheromoneShouldThrowArgumentOutOfRangeException()
        {
            // arrange
              var problem = new MockProblem();
              var distances = problem.Distances;

              // assert
              // ReSharper disable once ObjectCreationAsStatement
              Assert.Throws<ArgumentOutOfRangeException>(() => new StandardProblemData(problem.NodeProvider.CountNodes(), -1, distances));
        }
        public void InitialPheromoneGivenMockProblemAndStartNode7ShouldReturn0Point5()
        {
            // arrange
              var problem = new MockProblem();
              var random = Substitute.For<Random>();
              random.Next(0, 9).Returns(7); // force start node to be 7

              // act
              var result = new Parameters(problem.NodeProvider.CountNodes(), problem.GetNearestNeighbourTourLength(random));

              // assert
              Assert.AreEqual(0.5, result.InitialPheromone);
        }
        public void ProblemGetNearestNeighbourTourLengthGivenMockProblemAndStartNode7ShouldReturn20()
        {
            // arrange
              var problem = new MockProblem();
              var random = Substitute.For<Random>();
              random.Next(0, 9).Returns(7); // force start node to be 7

              // act
              var result = problem.GetNearestNeighbourTourLength(random);

              // assert
              Assert.AreEqual(20, result);
        }
        public void NearestNeighbourTourLengthGivenTspLib95ItemFromMockProblemShouldBeSetCorrectly()
        {
            // arrange
              var random = Substitute.For<Random>();
              random.Next(0, 9).Returns(7); // force start node to be 7

              var problem = new MockProblem();
              var expected = problem.GetNearestNeighbourTourLength(random);

              var infoProvider = CreateInfoProviderFromMockProblem();

              // act
              var result = infoProvider.NearestNeighbourTourLength;

              // assert
              Assert.AreEqual(expected, result);
        }
        private static SymmetricTspItemInfoProvider CreateInfoProviderFromMockProblem()
        {
            var problem = new MockProblem();

              const int optimalTourLength = 34534;
              var optimalTourNodes = new List<int> { 1, 2, 3 };
              var optimalTour = Substitute.For<ITour>();
              optimalTour.Nodes.Returns(optimalTourNodes);

              var tspLibItem = new TspLib95Item(problem, optimalTour, optimalTourLength);
              return new SymmetricTspItemInfoProvider(tspLibItem);
        }
        public void TspNodesGivenTspLib95ItemFromMockProblemShouldReturnListofTspNodesOrderedById()
        {
            // arrange
              var problem = new MockProblem();
              var infoProvider = CreateInfoProviderFromMockProblem();
              var expected = problem.NodeProvider.GetNodes()
                                         .OfType<Node2D>()
                                         .Select(n => new TspNode(n.Id, n.X, n.Y))
                                         .OrderBy(n => n.Id)
                                         .ToList();

              // assert
              CollectionAssert.AreEqual(expected, infoProvider.TspNodes);
        }
        private static StandardProblemData CreateDefaultDataStructuresFromMockProblem()
        {
            const int nodeCount = 10;

              var problem = new MockProblem();
              var distances = problem.Distances;

              var data = new StandardProblemData(nodeCount, InitialPheromoneDensity, distances);
              return data;
        }