Пример #1
0
        public void TestFindPathTo()
        {
            /*
             * Тестовый город дает нам несколько дорог и, соответственно, построек.
             * Тип построек подбирается случайным образом, но так как мы задаем конкретный сид рандома
             * (в функции GenerateTestCityGraph), то первой постройкой (и соответственно вершиной в графе),
             * будет являться госпиталь.
             *
             * В первую очередь нужно убедиться в том, что выполняется условие «стартовая точка не может
             * оказаться конечной». Для этого пытаемся найти путь до точки того же типа, что и стартовая.
             */
            Graph    graph    = DataGenerator.GenerateTestCityGraph();
            PathInfo pathInfo = Finder.FindPathTo(graph, graph.Vertices.First(), InstitutionType.Hospital);

            Assert.IsFalse(pathInfo.IsEmptyPath());

            // Проверяем ситуацию, когда весь город состоит из искомых объектов.
            City  cityWithSameInstitutes  = DataGenerator.GenerateTestCity(new PostOfficeBuilder());
            Graph graphWithSameInstitutes = Finder.ConvertCityToGraph(cityWithSameInstitutes);

            pathInfo = Finder.FindPathTo(graphWithSameInstitutes,
                                         graphWithSameInstitutes.Vertices.First(), InstitutionType.PostOffice);

            Assert.IsFalse(pathInfo.IsEmptyPath());

            // Проверяем ситуацию, когда в городе нет искомого объекта.
            pathInfo = Finder.FindPathTo(graphWithSameInstitutes,
                                         graphWithSameInstitutes.Vertices.First(), InstitutionType.Hospital);

            Assert.IsTrue(pathInfo.IsEmptyPath());
        }
Пример #2
0
        public void TestConvertCityToGraph()
        {
            City  testCity = DataGenerator.GenerateTestCity();
            Graph graph    = Finder.ConvertCityToGraph(testCity);

            /**
             * Так как мы создаем тестовый город, в котором изначально уже знаем количество
             * пересечений дорог, то можно проверить количество вершин и ребер.
             */

            List <int> validationValues = new List <int>()
            {
                2, 3, 2, 3, 3, 2, 3, 3, 2, 3, 3, 3, 4, 4, 4
            };

            Assert.AreEqual(15, graph.Vertices.Count);
            for (int i = 0; i < graph.Vertices.Count; i++)
            {
                Assert.AreEqual(validationValues[i], graph.Vertices[i].Edges.Count);
            }
        }
Пример #3
0
        /// <summary>
        /// Генерирует и возвращает граф, описывающий тестовый город из функции
        /// GenerateTestCity.
        /// </summary>
        /// <returns>Граф, описывающий тестовый город.</returns>
        public static Graph GenerateTestCityGraph()
        {
            City testCity = GenerateTestCity();

            return(Finder.ConvertCityToGraph(testCity));
        }