public void FillRemoveMixTest() { var queue = new MyPriorityQueue(10); queue.Push("Max"); Assert.Equal(0.1, queue.PercentageFilled); queue.Push("Susi"); Assert.Equal(0.2, queue.PercentageFilled); Assert.Equal("Max", queue.Pop()); Assert.Equal(0.1, queue.PercentageFilled); queue.Push("Muster"); Assert.Equal(0.2, queue.PercentageFilled); Assert.Equal("Susi", queue.Pop()); Assert.Equal("Muster", queue.Pop()); // Assert.Equal(0.0, queue.PercentageFilled); Assert.Throws <InvalidOperationException>(() => queue.Pop()); queue.Push("Axl"); Assert.Equal(0.1, queue.PercentageFilled); for (int i = 1; i < queue.Size; i++) { queue.Push(i.ToString()); } Assert.Throws <InvalidOperationException>(() => queue.Push("Already full not possible")); Assert.Equal(1.0, queue.PercentageFilled); }
public void EmptyPopTest() { var queue = new MyPriorityQueue(2); // Can't pop on empty queue Assert.Throws <InvalidOperationException>(() => queue.Pop()); queue.Push("Wolfi"); Assert.Equal(0.5, queue.PercentageFilled); Assert.Equal("Wolfi", queue.Pop()); Assert.Throws <InvalidOperationException>(() => queue.Pop()); }
public void PopTwoValues() { MyPriorityQueue <int> sut = new MyPriorityQueue <int>(); sut.Add(8); sut.Add(2); sut.Pop(); sut.Pop(); int actual = sut.Count(); Assert.AreEqual(0, actual); }
/// <summary> /// <para> /// Replacement for list.OrderBy(?).Take(n) /// </para> /// <para> /// 1- Low Memory usage (since this method requires only ~"2*n" elements be in memory) /// </para> /// 2- Speed up by an order of magnitude especially when the input is large. /// </summary> public static IEnumerable <T> TakeOrdered <T, TKey>(this IEnumerable <T> list, int n, Func <T, TKey> keySelector, bool ascending = true) where TKey : IComparable <TKey> { var pq = new MyPriorityQueue <T>(n, ascending ? (Func <T, T, bool>)((a, b) => keySelector(a).CompareTo(keySelector(b)) >= 0) : (Func <T, T, bool>)((a, b) => keySelector(a).CompareTo(keySelector(b)) < 0) ); Stack <T> stack = new Stack <T>(); int count = 0; foreach (T item in list) { pq.InsertWithOverflow(item); count++; } int min = Math.Min(count, n); for (int i = 0; i < min; i++) { stack.Push(pq.Pop()); } for (int i = 0; i < min; i++) { yield return(stack.Pop()); } }
public void PopOneValue() { MyPriorityQueue <int> sut = new MyPriorityQueue <int>(); sut.Add(8); sut.Add(2); sut.Pop(); int actual = sut.Peek(); Assert.AreEqual(8, actual); }
public void AddLoadsOfLettersBigAndSmallAndPop() { MyPriorityQueue <string> sut = new MyPriorityQueue <string>(); sut.Add("y"); sut.Add("Y"); sut.Add("a"); sut.Add("A"); sut.Add("j"); sut.Add("L"); sut.Add("R"); sut.Add("r"); sut.Add("B"); sut.Pop(); sut.Pop(); sut.Pop(); string actual = sut.Peek(); Assert.AreEqual("j", actual); }
public void NormalQueueTest() { // First fill then remove string[] data = { "Max", "Muster", "Müller", "Susi", "Mosi", "Gucki", "Hucki" }; var queue = new MyPriorityQueue(data.Length); // Fill it foreach (var item in data) { queue.Push(item); } // Pop It for (int i = 0; i < data.Length; i++) { Assert.Equal(data[i], queue.Pop()); } }
public void PriorityPushTests() { var queue = new MyPriorityQueue(10); queue.Push("Susi"); queue.Push("VIP MAX", PersonTypes.Vip); Assert.Equal("VIP MAX", queue.Pop()); Assert.Equal("Susi", queue.Pop()); queue.Push("Normal1"); queue.Push("Normal2"); queue.Push("VIP1", PersonTypes.Vip); queue.Push("VIP2", PersonTypes.Vip); queue.Push("Normal3"); queue.Push("VIP3", PersonTypes.Vip); Assert.Equal("VIP1", queue.Pop()); Assert.Equal("VIP2", queue.Pop()); Assert.Equal("VIP3", queue.Pop()); Assert.Equal("Normal1", queue.Pop()); Assert.Equal("Normal2", queue.Pop()); Assert.Equal("Normal3", queue.Pop()); }