public void OneReaderOneWriterThreads()
        {
            var q = new SpScQueue <int>();

            var writer = new Thread(() => {
                for (var i = 1; i <= 1000; i++)
                {
                    q.Enqueue(i);
                }
            });

            var reader = new Thread(() => {
                for (var i = 1; i <= 1000; i++)
                {
                    int item;
                    while (!q.TryDequeue(out item))
                    {
                    }

                    Assert.AreEqual(i, item);
                }
            });

            writer.Start();
            reader.Start();

            reader.Join();
            writer.Join();
        }
        public void SingleThreaded()
        {
            var q = new SpScQueue <int>();

            q.Enqueue(1);
            q.Enqueue(2);
            q.Enqueue(3);

            Assert.AreEqual(1, q.Dequeue());
            Assert.AreEqual(2, q.Dequeue());
            Assert.AreEqual(3, q.Dequeue());
            Assert.AreEqual(0, q.Dequeue());
        }
        public void PerformanceTest()
        {
            const int n = 10000000;

            var q = new SpScQueue <int>();

            // Warm up the queue
            for (var i = 0; i < 10000; i++)
            {
                q.Enqueue(0);
            }

            for (var i = 0; i < 10000; i++)
            {
                q.Dequeue();
            }

            var writer = new Thread(() => {
                for (var i = 1; i <= n; i++)
                {
                    q.Enqueue(i);
                }
            });

            var reader = new Thread(() => {
                for (var i = 1; i <= n; i++)
                {
                    int item;
                    while (!q.TryDequeue(out item))
                    {
                    }

                    Assert.AreEqual(i, item);
                }
            });

            var start = DateTime.Now;

            writer.Start();
            reader.Start();

            reader.Join();
            writer.Join();

            var end = DateTime.Now;

            Console.WriteLine(end - start);
        }
        public void PerformanceTest()
        {
            const int n = 10000000;

            var q = new SpScQueue<int>();

            // Warm up the queue
            for (var i = 0; i < 10000; i++)
                q.Enqueue(0);

            for (var i = 0; i < 10000; i++)
                q.Dequeue();

            var writer = new Thread(() => {
                for (var i = 1; i <= n; i++)
                    q.Enqueue(i);
            });

            var reader = new Thread(() => {
                for (var i = 1; i <= n; i++) {
                    int item;
                    while (!q.TryDequeue(out item)) { }

                    Assert.AreEqual(i, item);
                }
            });

            var start = DateTime.Now;

            writer.Start();
            reader.Start();

            reader.Join();
            writer.Join();

            var end = DateTime.Now;

            Console.WriteLine(end - start);
        }
        public void OneReaderOneWriterThreads()
        {
            var q = new SpScQueue<int>();

            var writer = new Thread(() => {
                for (var i = 1; i <= 1000; i++)
                    q.Enqueue(i);
            });

            var reader = new Thread(() => {
                for (var i = 1; i <= 1000; i++) {
                    int item;
                    while (!q.TryDequeue(out item)) { }

                    Assert.AreEqual(i, item);
                }
            });

            writer.Start();
            reader.Start();

            reader.Join();
            writer.Join();
        }
        public void SingleThreaded()
        {
            var q = new SpScQueue<int>();

            q.Enqueue(1);
            q.Enqueue(2);
            q.Enqueue(3);

            Assert.AreEqual(1, q.Dequeue());
            Assert.AreEqual(2, q.Dequeue());
            Assert.AreEqual(3, q.Dequeue());
            Assert.AreEqual(0, q.Dequeue());
        }