示例#1
0
        public void New_TryPop_Push_x32_TryPop_x32_TryPop_Count()
        {
            object value;
            var    q = new WorkStealingDeque <object>();

            Assert.AreEqual(0, q.Count);

            q.TryPop(out value);
            Assert.AreEqual(0, q.Count);

            for (int i = 0; i < 32; ++i)
            {
                q.Push(100 - i);
            }
            Assert.AreEqual(32, q.Count);

            for (int i = 31; i >= 0; --i)
            {
                q.TryPop(out value);
                Assert.AreEqual(100 - i, value);
            }
            Assert.AreEqual(0, q.Count);

            q.TryPop(out value);
            Assert.AreEqual(0, q.Count);
        }
示例#2
0
        public void New_TryPop_Push_x33_TryPop_x33_TryPop_Count()
        {
            int value;
            var q = new WorkStealingDeque <int>();

            Assert.AreEqual(0, q.Count);

            q.TryPop(out value);
            Assert.AreEqual(0, q.Count);

            for (int i = 0; i < 33; ++i)
            {
                q.Push(100 - i);
            }
            Assert.AreEqual(33, q.Count);

            for (int i = 32; i >= 0; --i)
            {
                q.TryPop(out value);
                Assert.AreEqual(100 - i, value);
            }
            Assert.AreEqual(0, q.Count);

            q.TryPop(out value);
            Assert.AreEqual(0, q.Count);
        }
示例#3
0
        public void New_TryPop_TryPop_Count()
        {
            int value;
            var q = new WorkStealingDeque <int>();

            Assert.AreEqual(0, q.Count);

            q.TryPop(out value);
            Assert.AreEqual(0, q.Count);

            q.TryPop(out value);
            Assert.AreEqual(0, q.Count);
        }
示例#4
0
        public void EvictWorkItems()
        {
            // clear CurrentThread to avoid having the evicted items being immediately added back again to the thread (i.e. infinite loop)
            CurrentThread = null;
            try {
                Action item;

                // remove up to 100 items from the current threads work queue
                for (int i = 0; (i < 100) && _inbox.TryPop(out item); ++i)
                {
                    _queue.QueueWorkItem(item);
                }
            } finally {
                // restore CurrentThread before we exit
                CurrentThread = this;
            }
        }
示例#5
0
        public void New_TryPop_Push_TryPop_Count()
        {
            object value;
            var    q = new WorkStealingDeque <object>();

            Assert.AreEqual(0, q.Count);

            q.TryPop(out value);
            Assert.AreEqual(0, q.Count);

            q.TryPop(out value);
            Assert.AreEqual(0, q.Count);

            q.Push(42);
            Assert.AreEqual(1, q.Count);

            q.TryPop(out value);
            Assert.AreEqual(42, value);
            Assert.AreEqual(0, q.Count);
        }
示例#6
0
        public void New_Push_TryPop_Count()
        {
            int value;
            var q = new WorkStealingDeque<int>();
            Assert.AreEqual(0, q.Count);

            q.Push(42);
            Assert.AreEqual(1, q.Count);

            q.TryPop(out value);
            Assert.AreEqual(42, value);
            Assert.AreEqual(0, q.Count);
        }
示例#7
0
        public void New_Push_x50_Count()
        {
            int value;
            var q = new WorkStealingDeque<int>();
            Assert.AreEqual(0, q.Count);

            for(int i = 0; i < 50; ++i) {
                q.Push(100 - i);
            }
            Assert.AreEqual(50, q.Count);

            for(int i = 49; i >= 0; --i) {
                q.TryPop(out value);
                Assert.AreEqual(100 - i, value);
            }
            Assert.AreEqual(0, q.Count);
        }
示例#8
0
        public void New_Push_x50_TryPop_x50_Count()
        {
            int value;
            var q = new WorkStealingDeque <int>();

            Assert.AreEqual(0, q.Count);

            for (int i = 0; i < 50; ++i)
            {
                q.Push(100 - i);
            }
            Assert.AreEqual(50, q.Count);

            for (int i = 49; i >= 0; --i)
            {
                q.TryPop(out value);
                Assert.AreEqual(100 - i, value);
            }
            Assert.AreEqual(0, q.Count);
        }
示例#9
0
        public void New_TryPop_Push_x33_TryPop_x33_TryPop_Count()
        {
            int value;
            var q = new WorkStealingDeque<int>();
            Assert.AreEqual(0, q.Count);

            q.TryPop(out value);
            Assert.AreEqual(0, q.Count);

            for(int i = 0; i < 33; ++i) {
                q.Push(100 - i);
            }
            Assert.AreEqual(33, q.Count);

            for(int i = 32; i >= 0; --i) {
                q.TryPop(out value);
                Assert.AreEqual(100 - i, value);
            }
            Assert.AreEqual(0, q.Count);

            q.TryPop(out value);
            Assert.AreEqual(0, q.Count);
        }
示例#10
0
        public void New_TryPop_TryPop_Count()
        {
            object value;
            var q = new WorkStealingDeque<object>();
            Assert.AreEqual(0, q.Count);

            q.TryPop(out value);
            Assert.AreEqual(0, q.Count);

            q.TryPop(out value);
            Assert.AreEqual(0, q.Count);
        }
示例#11
0
        public void New_TryPop_Push_x32_TryPop_x32_TryPop_Count()
        {
            object value;
            var q = new WorkStealingDeque<object>();
            Assert.AreEqual(0, q.Count);

            q.TryPop(out value);
            Assert.AreEqual(0, q.Count);

            for(int i = 0; i < 32; ++i) {
                q.Push(100 - i);
            }
            Assert.AreEqual(32, q.Count);

            for(int i = 31; i >= 0; --i) {
                q.TryPop(out value);
                Assert.AreEqual(100 - i, value);
            }
            Assert.AreEqual(0, q.Count);

            q.TryPop(out value);
            Assert.AreEqual(0, q.Count);
        }