コード例 #1
0
        public void PickOneTest(int threadCount)
        {
            Assert.Greater(threadCount, 1);

            var testBag = new ConcurrentBag <int>();
            var threads = new List <Thread>();

            for (var i = 0; i < threadCount; ++i)
            {
                // ReSharper disable once ObjectCreationAsStatement
                // explicit thread generation needed for proper thread safety check
                var thd = new Thread(() => { testBag.Add(PrimeNumberTable.PickOne()); });
                thd.Start();
                threads.Add(thd);
            }

            foreach (var thd in threads)
            {
                thd.Join();
            }

            int?itemBefore = null;

            Assert.Greater(testBag.Count, 1);

            while (!testBag.IsEmpty)
            {
                int tmp;
                if (itemBefore == null)
                {
                    if (testBag.TryTake(out tmp))
                    {
                        itemBefore = tmp;
                    }

                    Assert.NotNull(itemBefore);
                }

                int?itemNow = null;
                if (testBag.TryTake(out tmp))
                {
                    itemNow = tmp;
                }
                else
                {
                    return;
                }

                Assert.NotNull(itemNow);
                Assert.AreNotEqual(itemNow, itemBefore);

                itemBefore = itemNow;
            }
        }
コード例 #2
0
 public void IsPrime(int n)
 {
     Assert.AreEqual(true, PrimeNumberTable.IsPrime(n));
 }