public void TestPriorityQueueIndexOfKey() { // SortedList<int, List<SearchTreeNode.NPuzzleNode<int[],int,int> > > frontier = GetPriorityQueue(); Search.PriorityQueue <int, SearchTreeNode.Node <NPuzzleState <int[]>, int, int> > f = GetPriorityQueue(); SortedList <int, List <SearchTreeNode.Node <NPuzzleState <int[]>, int, int> > > frontier = f.GetPriorityQueue(); //! there should be keys of 0, 1, 2, 4, 5, 6, 8, and 12. Assert.AreEqual(frontier.IndexOfKey(3), 3); Assert.AreEqual(frontier.IndexOfKey(8), 7); Assert.AreEqual(frontier.IndexOfKey(12), 8); Assert.True(frontier.Remove(0)); Assert.AreEqual(frontier.IndexOfKey(3), 2); Assert.AreEqual(frontier.IndexOfKey(8), 6); Assert.AreEqual(frontier.IndexOfKey(12), 7); }
public void TestPriorityQueueContainsKey() { Search.PriorityQueue <int, SearchTreeNode.Node <NPuzzleState <int[]>, int, int> > f = GetPriorityQueue(); SortedList <int, List <SearchTreeNode.Node <NPuzzleState <int[]>, int, int> > > frontier = f.GetPriorityQueue(); Assert.True(frontier.ContainsKey(0)); Assert.True(frontier.ContainsKey(1)); Assert.True(frontier.ContainsKey(2)); Assert.True(frontier.ContainsKey(3)); Assert.True(frontier.ContainsKey(4)); Assert.True(frontier.ContainsKey(5)); Assert.True(frontier.ContainsKey(6)); Assert.True(frontier.ContainsKey(8)); Assert.True(frontier.ContainsKey(12)); //Assert.False(frontier.ContainsKey(13)); //Assert.False(frontier.ContainsKey(7)); frontier.Remove(0); Assert.AreEqual(frontier[1].Count, 2); frontier[1].RemoveAt(0); Assert.AreEqual(frontier[1].Count, 1); frontier.Remove(1); Assert.False(frontier.ContainsKey(0)); Assert.False(frontier.ContainsKey(1)); }
public void TestPriorityQueueCount() { Search.PriorityQueue <int, SearchTreeNode.Node <NPuzzleState <int[]>, int, int> > f = GetPriorityQueue(); SortedList <int, List <SearchTreeNode.Node <NPuzzleState <int[]>, int, int> > > frontier = f.GetPriorityQueue(); Assert.AreEqual(frontier.Count, 9); Assert.AreEqual(frontier[0].Count, 1); Assert.AreEqual(frontier[1].Count, 2); Assert.AreEqual(frontier[12].Count, 1); frontier[12].RemoveAt(0); Assert.AreEqual(frontier[12].Count, 0); frontier.Remove(12); Assert.AreEqual(frontier.Count, 8); }
public void TestAppendToo() { Heuristics.Heurfun <int, SearchTreeNode.Node <NPuzzleState <int[]>, int, int> > handler = Heuristics.NPuzzleHeuristics.ManhattanDistance; Search.PriorityQueue <int, SearchTreeNode.Node <NPuzzleState <int[]>, int, int> > frontier = new Search.PriorityQueue <int, SearchTreeNode.Node <NPuzzleState <int[]>, int, int> >(handler); int size = 9; SearchTreeNode.Node <NPuzzleState <int[]>, int, int>[] nodeArray = new SearchTreeNode.Node <NPuzzleState <int[]>, int, int> [100]; SearchTreeNode.Node <NPuzzleState <int[]>, int, int> node; for (int i = 0; i < 100; i++) { NPuzzleState <int[]> istate = NPuzzleUtils.GenerateInitState(size); node = new SearchTreeNode.Node <NPuzzleState <int[]>, int, int>(istate); nodeArray[i] = node; //int heur = NPuzzleHeuristics.ManhattanDistance(node); frontier.Append(node); } for (int i = 0; i < 100; i++) { int heur = NPuzzleHeuristics.ManhattanDistance(nodeArray[i]); Assert.True(frontier.InPriorityQueue(nodeArray[i])); } int j = 0; int[] heurArray = new int[100]; while (frontier.Count() > 0) { node = frontier.Pop(); heurArray[j] = NPuzzleHeuristics.ManhattanDistance(node); j++; } for (j = 0; j < 99; j++) { Assert.True(heurArray[j] <= heurArray[j + 1]); } }
public void RemoveIncumbent() { Heuristics.Heurfun <int, SearchTreeNode.Node <NPuzzleState <int[]>, int, int> > handler = Heuristics.NPuzzleHeuristics.ManhattanDistance; Search.PriorityQueue <int, SearchTreeNode.Node <NPuzzleState <int[]>, int, int> > frontier = new Search.PriorityQueue <int, SearchTreeNode.Node <NPuzzleState <int[]>, int, int> >(handler); int size = 9; SearchTreeNode.Node <NPuzzleState <int[]>, int, int>[] nodeArray = new SearchTreeNode.Node <NPuzzleState <int[]>, int, int> [100]; SearchTreeNode.Node <NPuzzleState <int[]>, int, int> node; for (int i = 0; i < 100; i++) { NPuzzleState <int[]> istate = NPuzzleUtils.GenerateInitState(size); node = new SearchTreeNode.Node <NPuzzleState <int[]>, int, int>(istate); nodeArray[i] = node; int heur = NPuzzleHeuristics.ManhattanDistance(node); frontier.Append(node); } for (int i = 0; i < 100; i++) { frontier.RemoveIncumbent(nodeArray[i]); Assert.False(frontier.InPriorityQueue(nodeArray[i])); } }
private Search.PriorityQueue <int, SearchTreeNode.Node <NPuzzleState <int[]>, int, int> > GetPriorityQueueToo() { Heuristics.Heurfun <int, SearchTreeNode.Node <NPuzzleState <int[]>, int, int> > handler = Heuristics.NPuzzleHeuristics.ManhattanDistance; Search.PriorityQueue <int, SearchTreeNode.Node <NPuzzleState <int[]>, int, int> > frontier = new Search.PriorityQueue <int, SearchTreeNode.Node <NPuzzleState <int[]>, int, int> >(handler); int size = 9; SearchTreeNode.Node <NPuzzleState <int[]>, int, int>[] nodeArray = new SearchTreeNode.Node <NPuzzleState <int[]>, int, int> [100]; SearchTreeNode.Node <NPuzzleState <int[]>, int, int> node; for (int i = 0; i < 100; i++) { NPuzzleState <int[]> istate = NPuzzleUtils.GenerateInitState(size); node = new SearchTreeNode.Node <NPuzzleState <int[]>, int, int>(istate); nodeArray[i] = node; //int heur = NPuzzleHeuristics.ManhattanDistance(node); frontier.Append(node); } return(frontier); }
public void TestPop() { Search.PriorityQueue <int, SearchTreeNode.Node <NPuzzleState <int[]>, int, int> > f = GetPriorityQueue(); int c = f.Count(); int i = 0; int[] heurs = new int[f.Count()]; SearchTreeNode.Node <NPuzzleState <int[]>, int, int> node; while (f.Count() > 0) { node = f.Pop(); heurs[i] = NPuzzleHeuristics.ManhattanDistance(node); i++; } for (int j = 0; j < i - 1; j++) { Assert.True(heurs[j] <= heurs[j + 1]); } Assert.AreEqual(i, c); Assert.IsNull(f.Pop()); }
private Search.PriorityQueue <int, SearchTreeNode.Node <NPuzzleState <int[]>, int, int> > GetPriorityQueue() { // Heuristics.HeuristicFunction<NPuzzleState<int[]>,int,int> handler = Heuristics.NPuzzleHeuristics.ManhattanDistance; Heuristics.Heurfun <int, SearchTreeNode.Node <NPuzzleState <int[]>, int, int> > handler = Heuristics.NPuzzleHeuristics.ManhattanDistance; Search.PriorityQueue <int, SearchTreeNode.Node <NPuzzleState <int[]>, int, int> > frontier = new Search.PriorityQueue <int, SearchTreeNode.Node <NPuzzleState <int[]>, int, int> >(handler); //SortedList<int, List<SearchTreeNode.NPuzzleNode<int[],int,int> > > frontier = new SortedList<int, List<SearchTreeNode.NPuzzleNode<int[],int,int> > >(); List <SearchTreeNode.Node <NPuzzleState <int[]>, int, int> > nodes = TestNode.CreateNodesForTesting(); //! md = 12 int[] s7 = { 6, 4, 3, 1, 9, 5, 8, 7, 2 }; NPuzzleState <int[]> s7State = new NPuzzleState <int[]>(s7); SearchTreeNode.Node <NPuzzleState <int[]>, int, int> node7 = new SearchTreeNode.Node <NPuzzleState <int[]>, int, int> (s7State); nodes.Add(node7); //! 2 + 2 + 1 + 1 + 2 = 8 int[] s8 = { 1, 6, 3, 8, 4, 5, 7, 2, 9 }; NPuzzleState <int[]> s8State = new NPuzzleState <int[]>(s8); SearchTreeNode.Node <NPuzzleState <int[]>, int, int> node8 = new SearchTreeNode.Node <NPuzzleState <int[]>, int, int> (s8State); nodes.Add(node8); foreach (var node in nodes) { //int md = handler(node); frontier.Append(node); } return(frontier); }
/*! Test removing elements from the frontier */ public void TestCount() { Search.PriorityQueue <int, SearchTreeNode.Node <NPuzzleState <int[]>, int, int> > f = GetPriorityQueue(); SortedList <int, List <SearchTreeNode.Node <NPuzzleState <int[]>, int, int> > > frontier = f.GetPriorityQueue(); Assert.AreEqual(f.Count(), 10); SearchTreeNode.Node <NPuzzleState <int[]>, int, int> node = f.Pop(); int[] s = { 1, 2, 3, 4, 5, 6, 7, 8, 9 }; Assert.AreEqual(node.state, s); Assert.AreEqual(f.Count(), 9); int[] s1 = { 1, 2, 3, 4, 5, 6, 7, 9, 8 }; //! md = 1 int[] s7 = { 1, 2, 3, 4, 5, 9, 7, 8, 6 }; //! 2, md = 2 int[] s2 = { 1, 2, 3, 4, 9, 6, 7, 5, 8 }; node = f.Pop(); Assert.AreEqual(node.state, s1); Assert.AreEqual(f.Count(), 8); node = f.Pop(); Assert.AreEqual(node.state, s7); Assert.AreEqual(f.Count(), 7); node = f.Pop(); Assert.AreEqual(node.state, s2); Assert.AreEqual(f.Count(), 6); node = f.Pop(); Assert.AreEqual(f.Count(), 5); node = f.Pop(); Assert.AreEqual(f.Count(), 4); node = f.Pop(); Assert.AreEqual(f.Count(), 3); node = f.Pop(); Assert.AreEqual(f.Count(), 2); node = f.Pop(); Assert.AreEqual(f.Count(), 1); node = f.Pop(); Assert.AreEqual(f.Count(), 0); }
public void TestPriorityQueueKeys() { Search.PriorityQueue <int, SearchTreeNode.Node <NPuzzleState <int[]>, int, int> > f = GetPriorityQueue(); SortedList <int, List <SearchTreeNode.Node <NPuzzleState <int[]>, int, int> > > frontier = f.GetPriorityQueue(); // SortedList<int, List<SearchTreeNode.NPuzzleNode<int[],int,int> > > frontier = GetPriorityQueue(); IList <int> keys = frontier.Keys; Assert.AreEqual(keys[0], 0); frontier.Remove(0); Assert.AreEqual(keys[0], 1); frontier.Remove(1); Assert.AreEqual(keys[0], 2); }