public void PerfTest() { var heap = RealTimeQueue <int> .Empty; for (var i = 0; i < Size; i++) { heap = RealTimeQueue <int> .Snoc(heap, i); } Console.WriteLine(DumpQueue(heap, true)); var count = 0; while (!RealTimeQueue <int> .IsEmpty(heap)) { var next = RealTimeQueue <int> .Head(heap); Assert.AreEqual(count, next); heap = RealTimeQueue <int> .Tail(heap); count++; } Assert.AreEqual(Size, count); }
public bool Dequeue(out T t) { t = default(T); lock (_lock) { while (!_token.IsCancellationRequested && RealTimeQueue <T> .IsEmpty(_queue)) { Monitor.Wait(_lock); } // We can exit, once the queue is empty. if (RealTimeQueue <T> .IsEmpty(_queue)) { return(false); } _count--; t = RealTimeQueue <T> .Head(_queue); _queue = RealTimeQueue <T> .Tail(_queue); Monitor.PulseAll(_lock); } return(true); }
public void EmptyTest() { var queue = RealTimeQueue <string> .Empty; Assert.IsTrue(RealTimeQueue <string> .IsEmpty(queue)); queue = RealTimeQueue <string> .Snoc(queue, "Item"); Assert.IsFalse(RealTimeQueue <string> .IsEmpty(queue)); queue = RealTimeQueue <string> .Tail(queue); Assert.IsTrue(RealTimeQueue <string> .IsEmpty(queue)); }
public void PushPopTest() { const string data = "One Two Three One Three"; var queue = data.Split().Aggregate(RealTimeQueue <string> .Empty, RealTimeQueue <string> .Snoc); foreach (var expected in data.Split()) { var head = RealTimeQueue <string> .Head(queue); Assert.AreEqual(expected, head); queue = RealTimeQueue <string> .Tail(queue); } Assert.IsTrue(RealTimeQueue <string> .IsEmpty(queue)); }
public static string DumpQueue <T>(RealTimeQueue <T> .Queue queue, bool expandUnCreated) { if (RealTimeQueue <T> .IsEmpty(queue)) { return(string.Empty); } var result = new StringBuilder(); result.Append("[{"); result.Append(StreamTests.DumpStream(queue.F, expandUnCreated)); result.Append("}, "); result.Append(queue.R?.ToReadableString() ?? "null"); result.Append(", {"); result.Append(StreamTests.DumpStream(queue.S, expandUnCreated)); result.Append("}]"); return(result.ToString()); }