public void SearchHelperMethods_AddsToOpenSetInOrder()
 {
     var t = new BestFirst_Accessor();
     var state1 = new List<int>(new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, Node.SPACE, 15 });
     var node1 = new Node()
     {
         State = state1,
         FValue = HeuristicFunctions.number_of_tiles_out_of_place(state1)
     };
     var state2 = new List<int>(new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, Node.SPACE, 14, 15 });
     var node2 = new Node()
     {
         State = state2,
         FValue = HeuristicFunctions.number_of_tiles_out_of_place(state2)
     };
     var state3 = new List<int>(new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 12, Node.SPACE, 14, 15 });
     var node3 = new Node()
     {
         State = state3,
         FValue = HeuristicFunctions.number_of_tiles_out_of_place(state3)
     };
     var param = new LinkedList<Node>();
     param.AddFirst(node1);
     param.AddFirst(node2);
     param.AddFirst(node3);
     t.AddToOpenSet(param);
     Assert.AreEqual(node1.FValue, t.OpenSet.First.Value.FValue);
     Assert.AreEqual(node3.FValue, t.OpenSet.Last.Value.FValue);
 }
 public void SearchHelperMethods_FindGoalWhenGoalExists_ReturnsGoal()
 {
     var t = new BestFirst_Accessor();
     var state1 = new List<int>(new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, Node.SPACE });
     var node1 = new Node() { State = state1 };
     var nodes = new LinkedList<Node>();
     nodes.AddFirst(node1);
     var result = t.FindGoal(nodes);
     Assert.IsTrue(node1.State.SequenceEqual(result.State));
 }
 public void SearchHelperMethods_FindGoalWhenGoalNotExists_ReturnsNull()
 {
     var t = new BestFirst_Accessor();
     var state1 = new List<int>(new int[] { 1, 2, Node.SPACE, 3, 6, 7, 11, 4, 5, 9, 12, 8, 13, 10, 14, 15 });
     var node1 = new Node()
     {
         State = state1,
         FValue = HeuristicFunctions.number_of_tiles_out_of_place(state1)
     };
     var nodes = new LinkedList<Node>();
     nodes.AddFirst(node1);
     Assert.IsNull(t.FindGoal(nodes));
 }
 public void SearchHelperMethods_GenerateSuccessorsCorrectly()
 {
     var t = new BestFirst_Accessor();
     t.Heuristic = HeuristicFunctions.number_of_tiles_out_of_place;
     var state1 = new List<int>(new int[] { 1, 2, Node.SPACE, 3, 6, 7, 11, 4, 5, 9, 12, 8, 13, 10, 14, 15 });
     var node1 = new Node()
     {
         State = state1,
         FValue = HeuristicFunctions.number_of_tiles_out_of_place(state1)
     };
     var successors = t.GenerateSuccessors(node1);
     var length = (int)Math.Sqrt(successors.First.Value.State.Count);
     Assert.AreEqual(3, successors.Count);
     Assert.IsTrue(BestFirst.IsMovePossible(2, successors.First.Value.State.TakeWhile(value => value != Node.SPACE).Count(), length));
     Assert.IsTrue(BestFirst.IsMovePossible(2, successors.Last.Value.State.TakeWhile(value => value != Node.SPACE).Count(), length));
 }
 public void SearchHelperMethods_IsDuplicateWithANonDuplicate_ReturnsFalse()
 {
     var t = new BestFirst_Accessor();
     var state1 = new List<int>(new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, Node.SPACE });
     var node = new Node() { State = state1 };
     t.OpenSet.AddFirst(node);
     var state2 = new List<int>(new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, Node.SPACE, 15 });
     node = new Node() { State = state2 };
     Assert.IsFalse(t.IsDuplicate(node));
 }