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);
        }
예제 #2
0
        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());
        }