/// <summary>
        /// Given a list of points, return the points, each with an orderId.
        /// </summary>
        /// <param name="points"></param>
        /// <returns></returns>
        private IEnumerable <OrderPoint> GetOrderPoints(IEnumerable <Point> points)
        {
            if (points.Count() > MaxClusterSize)
            {
                return(points.Select((p, i) => new OrderPoint()
                {
                    PointId = p.PointId,
                    Name = p.Name,
                    HorizontalDisplacement = p.HorizontalDisplacement,
                    VerticalDisplacement = p.VerticalDisplacement,
                    OrderId = i
                }));
            }
            var vertices = TourBridge.GetVertices(points);
            var matrix   = TourBridge.GetMatrix(points);

            var tourProvider   = new TourProvider(vertices, matrix);
            var solvedVertices = tourProvider.Solve();
            var orderedPoints  = TourBridge.GetPoints(points, solvedVertices);

            return(orderedPoints.Select((p, i) => new OrderPoint()
            {
                PointId = p.PointId,
                Name = p.Name,
                HorizontalDisplacement = p.HorizontalDisplacement,
                VerticalDisplacement = p.VerticalDisplacement,
                OrderId = i
            }));
        }
        public void GetPointsTest()
        {
            var unorderedPoints = new List <Point>
            {
                new Point
                {
                    PointId = 1,
                    HorizontalDisplacement = 1,
                    VerticalDisplacement   = 1
                },
                new Point
                {
                    PointId = 2,
                    HorizontalDisplacement = 2,
                    VerticalDisplacement   = 2
                }
            };
            var vertices = new List <int> {
                1, 0
            };
            var expectedPoints = new List <Point> {
                unorderedPoints[1], unorderedPoints[0]
            };
            var points = TourBridge.GetPoints(unorderedPoints, vertices);

            Assert.AreEqual(expectedPoints, points);
        }