public void PopAndPush_CallPushBeforePop_CorrectCounters()
        {
            ConcurentQueue<int> concurentQueue = new ConcurentQueue<int>(10000);

            ConcurrentBag<int> popResult = new ConcurrentBag<int>();
            ConcurrentBag<Exception> popResultEx = new ConcurrentBag<Exception>();
            ConcurrentBag<int> pushItems = new ConcurrentBag<int>();
            Parallel.For(0, 10, i =>
            {
                concurentQueue.Push(i);
            });

            Parallel.For(0, 10, i =>
            {
                pushItems.Add(i);
                try
                {
                    var temp = concurentQueue.Pop();
                    popResult.Add(temp);
                }
                catch (Exception Exp)
                {
                    popResultEx.Add(Exp);
                }
            });

            Assert.AreEqual(pushItems.Count, popResult.Count + popResultEx.Count + concurentQueue.Count);
        }
        public void PopAndPush_CallPopBeforePush_CorrectCouners()
        {
            ConcurentQueue<int> concurentQueue = new ConcurentQueue<int>(10000);

            ConcurrentBag<int> popResult = new ConcurrentBag<int>();
            ConcurrentBag<Exception> popResultEx = new ConcurrentBag<Exception>();
            ConcurrentBag<int> pushItems = new ConcurrentBag<int>();
            Parallel.For(0, 10, i =>
            {
                pushItems.Add(i);
                try
                {
                    var temp = concurentQueue.Pop();
                    popResult.Add(temp);
                }
                catch (Exception exp)
                {
                    popResultEx.Add(exp);
                }
                concurentQueue.Push(i);
            });

            Exception exception;
            popResultEx.TryPeek(out exception);
            Assert.IsInstanceOf(typeof(TimeoutException), exception);
            Assert.AreEqual(pushItems.Count, popResult.Count + popResultEx.Count);
        }
        public void Push_10strBy10threads_CorrectCounters()
        {
            ConcurentQueue<string> concurentQueue = new ConcurentQueue<string>();

            Parallel.For(0, 10, i => concurentQueue.Push(i.ToString()));

            Assert.AreEqual(10, concurentQueue.Count);
        }
        public void Push_10intBy10threads_CorrectCounters()
        {
            ConcurentQueue<int> concurentQueue = new ConcurentQueue<int>();

            Parallel.For(0, 10, i => concurentQueue.Push(i));

            Assert.AreEqual(10, concurentQueue.Count);
        }
        public void Pop_7strFromFilledQueue_CorrectCounters()
        {
            ConcurentQueue<String> concurentQueue = new ConcurentQueue<string>();
            Parallel.For(0, 10, i => concurentQueue.Push(i.ToString()));

            ConcurrentBag<string> popResult = new ConcurrentBag<string>();
            Parallel.For(0, 7, i => popResult.Add(concurentQueue.Pop()));

            Assert.AreEqual(3, concurentQueue.Count);
            Assert.AreEqual(7, popResult.Count);
        }
        public void Pop_ItemsFromEmptyQueue_CorrectCounters()
        {
            ConcurentQueue<int> concurentQueue = new ConcurentQueue<int>(5000);

            ConcurrentBag<Exception> popResult = new ConcurrentBag<Exception>();
            ConcurrentBag<int> pushItems = new ConcurrentBag<int>();
            Parallel.For(0, 10, i =>
            {
                pushItems.Add(i);
                try
                {
                    concurentQueue.Pop();
                }
                catch (Exception exp)
                {
                    popResult.Add(exp);
                }
            });

            Exception exception;
            popResult.TryPeek(out exception);
            Assert.IsInstanceOf(typeof(TimeoutException), exception);
            Assert.AreEqual(pushItems.Count, popResult.Count);
        }