예제 #1
0
        public void TestCompleteItemsConcurrent()
        {
            var items = new CompleteItems <int>(5000);

            var addAction = new Action(() =>
            {
                for (int i = 0; i < 2499; i++)
                {
                    items.Add(i);
                }
            });

            var t1 = new Task(addAction);
            var t2 = new Task(addAction);

            t1.Start();
            t2.Start();
            System.Threading.Thread.Sleep(1);
            Assert.AreEqual(0, items.First());
            t1.Wait();
            t2.Wait();
            Assert.AreEqual(2498, items.Last());

            Assert.AreEqual(2499 * 2, items.Count);
        }
예제 #2
0
        private void LimitTest(int limit)
        {
            ICompleteItems <int> items = new CompleteItems <int>(limit);

            Assert.AreEqual(0, items.Count);
            items.Add(7);
            Assert.AreEqual(1, items.Count);
            Assert.AreEqual(7, items.First());

            for (int i = 2; i < limit; i++)
            {
                items.Add(i);
                Assert.AreEqual(i, items.Count);
            }
            if (limit > 1)
            {
                Assert.AreEqual(limit - 1, items.Count);
            }
            items.Add(0);
            Assert.AreEqual(limit, items.Count);
            items.Add(0);
            Assert.AreEqual(limit, items.Count);

            var sw = new Stopwatch();

            sw.Start();
            items.Add(0);
            sw.Stop();
            Assert.IsTrue(sw.Elapsed < TimeSpan.FromMilliseconds(1));

            sw.Restart();
            int a = items.First();

            sw.Stop();
            Assert.IsTrue(sw.Elapsed < TimeSpan.FromMilliseconds(1));
        }