Mercurial > pub > ImplabNet
comparison Implab.Test/AsyncTests.cs @ 122:0c8685c8b56b v2
minor fixes and improvements of AsyncQueue, additional tests
author | cin |
---|---|
date | Mon, 12 Jan 2015 22:20:45 +0300 |
parents | 62d2f1e98c4e |
children | a336cb13c6a9 |
comparison
equal
deleted
inserted
replaced
121:62d2f1e98c4e | 122:0c8685c8b56b |
---|---|
410 Interlocked.Add(ref read, actual); | 410 Interlocked.Add(ref read, actual); |
411 } | 411 } |
412 } | 412 } |
413 | 413 |
414 Console.WriteLine("done reader #2: {0} ms", Environment.TickCount - t1); | 414 Console.WriteLine("done reader #2: {0} ms", Environment.TickCount - t1); |
415 } | |
416 ) | |
417 .Combine() | |
418 .Join(); | |
419 | |
420 Assert.AreEqual(summ , r1 + r2); | |
421 | |
422 Console.WriteLine( | |
423 "done: {0} ms, summ#1: {1}, summ#2: {2}, total: {3}, count: {4}", | |
424 Environment.TickCount - t1, | |
425 r1, | |
426 r2, | |
427 r1 + r2, | |
428 total | |
429 ); | |
430 } | |
431 | |
432 [TestMethod] | |
433 public void AsyncQueueChunkDequeueTest() { | |
434 var queue = new AsyncQueue<int>(); | |
435 | |
436 const int wBatch = 31; | |
437 const int wCount = 200000; | |
438 const int total = wBatch * wCount * 3; | |
439 const int summ = wBatch * wCount * 6; | |
440 | |
441 int r1 = 0, r2 = 0; | |
442 const int rBatch = 1024; | |
443 int read = 0; | |
444 | |
445 var t1 = Environment.TickCount; | |
446 | |
447 AsyncPool.RunThread( | |
448 () => { | |
449 var buffer = new int[wBatch]; | |
450 for(int i = 0; i<wBatch; i++) | |
451 buffer[i] = 1; | |
452 | |
453 for(int i =0; i < wCount; i++) | |
454 queue.EnqueueRange(buffer,0,wBatch); | |
455 Console.WriteLine("done writer #1: {0} ms", Environment.TickCount - t1); | |
456 }, | |
457 () => { | |
458 var buffer = new int[wBatch]; | |
459 for(int i = 0; i<wBatch; i++) | |
460 buffer[i] = 2; | |
461 | |
462 for(int i =0; i < wCount; i++) | |
463 queue.EnqueueRange(buffer,0,wBatch); | |
464 Console.WriteLine("done writer #2: {0} ms", Environment.TickCount - t1); | |
465 }, | |
466 () => { | |
467 var buffer = new int[wBatch]; | |
468 for(int i = 0; i<wBatch; i++) | |
469 buffer[i] = 3; | |
470 | |
471 for(int i =0; i < wCount; i++) | |
472 queue.EnqueueRange(buffer,0,wBatch); | |
473 Console.WriteLine("done writer #3: {0} ms", Environment.TickCount - t1); | |
474 }, | |
475 () => { | |
476 var buffer = new int[rBatch]; | |
477 int count = 1; | |
478 double avgchunk = 0; | |
479 while(read < total) { | |
480 int actual; | |
481 if (queue.TryDequeueChunk(buffer,0,rBatch,out actual)) { | |
482 for(int i=0; i< actual; i++) | |
483 r2 += buffer[i]; | |
484 Interlocked.Add(ref read, actual); | |
485 avgchunk = avgchunk*(count-1)/count + actual/(double)count; | |
486 count ++; | |
487 } | |
488 } | |
489 | |
490 Console.WriteLine("done reader #2: {0} ms, avg chunk size: {1}", Environment.TickCount - t1, avgchunk); | |
415 } | 491 } |
416 ) | 492 ) |
417 .Combine() | 493 .Combine() |
418 .Join(); | 494 .Join(); |
419 | 495 |