Beispiel #1
0
        public QueueFixture(
            IItemWaitProvider<Item> itemWaitProvider
            )
        {
            if (itemWaitProvider == null)
            {
                throw new ArgumentNullException("itemWaitProvider");
            }

            _itemWaitProvider = itemWaitProvider;
        }
Beispiel #2
0
        public void AggregationTest()
        {
            var random = new Random(
                int.Parse(Guid.NewGuid().ToString().Replace("-", "").Substring(0, 7), NumberStyles.HexNumber)
                );

            //параметры теста
            var threadCount = Environment.ProcessorCount + 2;
            var itemCount = 100000;
            var maxValue = 100;

            //подготовка данных
            var correctAccumulator = 0L;

            _datas = new Item[threadCount][];
            for (var di = 0; di < threadCount; di++)
            {
                _datas[di] = new Item[itemCount];

                for (var ii = 0; ii < itemCount; ii++)
                {
                    var v = random.Next(maxValue) + 1;
                    
                    _datas[di][ii] = new Item(v);

                    correctAccumulator += v;
                }
            }

            var threads = new Thread[threadCount * 2];
            for (var ti = 0; ti < threads.Length; ti++)
            {
                threads[ti] = new Thread(WorkThread);
            }

            //готовим тестируемый класс
            _itemWaitProvider = new SingleItemWaitProvider<Item>(
                new OptimisticDisposer()
                );

            for (var ti = 0; ti < threads.Length; ti++)
            {
                threads[ti].Start(ti);
            }

            _threadWorkEvent.Set();

            var before = DateTime.Now;

            //все заеблось!

            for (var ti = 0; ti < threads.Length; ti++)
            {
                threads[ti].Join();
            }

            var after = DateTime.Now;
            Debug.WriteLine("Time taken {0}", after - before);

            Assert.AreEqual(correctAccumulator, _accumulator);
        }