public void Run_ShortGraph_PathFound() { // ARRAGE var expectedPath = new List <IGraphNode>(); var map = new GraphMap(); map.AddNode(new HexNode(0, 0)); map.AddNode(new HexNode(1, 0)); map.AddNode(new HexNode(0, 1)); var nodesArray = map.Nodes.ToArray(); map.AddEdge(nodesArray[0], nodesArray[2]); map.AddEdge(nodesArray[2], nodesArray[1]); expectedPath.Add(nodesArray[0]); expectedPath.Add(nodesArray[2]); expectedPath.Add(nodesArray[1]); var context = CreatePathFindingContext(map); var astar = new AStar(context, expectedPath.First(), expectedPath.Last()); // ACT var factState = astar.Run(); // ASSERT factState.Should().Be(State.GoalFound); var factPath = astar.GetPath(); factPath.Should().BeEquivalentTo(expectedPath); }
public void FindNonBlockedNode_RoomWithCorridor_ExitNotBlocked() { // ARRANGE var map = new GraphMap(); // В этом тесте можно использовать более простые реализации IMapNode // генерируем комнату var node00 = new HexNode(0, 0); map.AddNode(node00); var node10 = new HexNode(1, 0); map.AddNode(node10); var node01 = new HexNode(0, 1); map.AddNode(node01); var node11 = new HexNode(1, 1); map.AddNode(node11); map.AddEdge(node00, node10); map.AddEdge(node00, node01); map.AddEdge(node11, node10); map.AddEdge(node11, node01); var regionNodes = new IMapNode[] { node00, node01, node10, node11 }; // генерируем выход var corridorNode = new HexNode(2, 0); map.AddNode(corridorNode); map.AddEdge(corridorNode, node10); // ACT var node = MapRegionHelper.FindNonBlockedNode(node10, map, regionNodes); // ASSERT node.Should().NotBe(node10); node.Should().NotBe(corridorNode); }