public QueueFixture( IItemWaitProvider<Item> itemWaitProvider ) { if (itemWaitProvider == null) { throw new ArgumentNullException("itemWaitProvider"); } _itemWaitProvider = itemWaitProvider; }
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); }