Mercurial > pub > ImplabNet
diff 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 |
line wrap: on
line diff
--- a/Implab.Test/AsyncTests.cs Mon Jan 12 18:19:41 2015 +0300 +++ b/Implab.Test/AsyncTests.cs Mon Jan 12 22:20:45 2015 +0300 @@ -430,6 +430,82 @@ } [TestMethod] + public void AsyncQueueChunkDequeueTest() { + var queue = new AsyncQueue<int>(); + + const int wBatch = 31; + const int wCount = 200000; + const int total = wBatch * wCount * 3; + const int summ = wBatch * wCount * 6; + + int r1 = 0, r2 = 0; + const int rBatch = 1024; + int read = 0; + + var t1 = Environment.TickCount; + + AsyncPool.RunThread( + () => { + var buffer = new int[wBatch]; + for(int i = 0; i<wBatch; i++) + buffer[i] = 1; + + for(int i =0; i < wCount; i++) + queue.EnqueueRange(buffer,0,wBatch); + Console.WriteLine("done writer #1: {0} ms", Environment.TickCount - t1); + }, + () => { + var buffer = new int[wBatch]; + for(int i = 0; i<wBatch; i++) + buffer[i] = 2; + + for(int i =0; i < wCount; i++) + queue.EnqueueRange(buffer,0,wBatch); + Console.WriteLine("done writer #2: {0} ms", Environment.TickCount - t1); + }, + () => { + var buffer = new int[wBatch]; + for(int i = 0; i<wBatch; i++) + buffer[i] = 3; + + for(int i =0; i < wCount; i++) + queue.EnqueueRange(buffer,0,wBatch); + Console.WriteLine("done writer #3: {0} ms", Environment.TickCount - t1); + }, + () => { + var buffer = new int[rBatch]; + int count = 1; + double avgchunk = 0; + while(read < total) { + int actual; + if (queue.TryDequeueChunk(buffer,0,rBatch,out actual)) { + for(int i=0; i< actual; i++) + r2 += buffer[i]; + Interlocked.Add(ref read, actual); + avgchunk = avgchunk*(count-1)/count + actual/(double)count; + count ++; + } + } + + Console.WriteLine("done reader #2: {0} ms, avg chunk size: {1}", Environment.TickCount - t1, avgchunk); + } + ) + .Combine() + .Join(); + + Assert.AreEqual(summ , r1 + r2); + + Console.WriteLine( + "done: {0} ms, summ#1: {1}, summ#2: {2}, total: {3}, count: {4}", + Environment.TickCount - t1, + r1, + r2, + r1 + r2, + total + ); + } + + [TestMethod] public void ParallelMapTest() { const int count = 100000;