|
4 | 4 | using ICSharpCode.SharpZipLib.Tests.TestSupport; |
5 | 5 | using NUnit.Framework; |
6 | 6 | using System.Threading; |
| 7 | +using System.Diagnostics; |
7 | 8 |
|
8 | 9 | namespace ICSharpCode.SharpZipLib.Tests.GZip |
9 | 10 | { |
@@ -280,90 +281,32 @@ public void TrailingGarbage() |
280 | 281 |
|
281 | 282 | [Test] |
282 | 283 | [Category("GZip")] |
| 284 | + [Category("Performance")] |
283 | 285 | [Category("Long Running")] |
284 | | - [Ignore("TODO : Fix this")] |
285 | | - public void BigStream() |
| 286 | + [Explicit("Long Running")] |
| 287 | + public void WriteThroughput() |
286 | 288 | { |
287 | | - window_ = new WindowedStream(0x3ffff); |
288 | | - outStream_ = new GZipOutputStream(window_); |
289 | | - inStream_ = new GZipInputStream(window_); |
| 289 | + PerformanceTesting.TestWrite( |
| 290 | + size: TestDataSize.Large, |
| 291 | + output: w => new GZipOutputStream(w) |
| 292 | + ); |
290 | 293 |
|
291 | | - long target = 0x10000000; |
292 | | - readTarget_ = writeTarget_ = target; |
293 | | - |
294 | | - Thread reader = new Thread(Reader); |
295 | | - reader.Name = "Reader"; |
296 | | - reader.Start(); |
297 | | - |
298 | | - Thread writer = new Thread(Writer); |
299 | | - writer.Name = "Writer"; |
300 | | - |
301 | | - DateTime startTime = DateTime.Now; |
302 | | - writer.Start(); |
303 | | - |
304 | | - writer.Join(); |
305 | | - reader.Join(); |
306 | | - |
307 | | - DateTime endTime = DateTime.Now; |
308 | | - |
309 | | - TimeSpan span = endTime - startTime; |
310 | | - Console.WriteLine("Time {0} processes {1} KB/Sec", span, (target / 1024) / span.TotalSeconds); |
311 | 294 | } |
312 | 295 |
|
313 | | - void Reader() |
| 296 | + [Test] |
| 297 | + [Category("GZip")] |
| 298 | + [Category("Performance")] |
| 299 | + [Explicit("Long Running")] |
| 300 | + public void ReadWriteThroughput() |
314 | 301 | { |
315 | | - const int Size = 8192; |
316 | | - int readBytes = 1; |
317 | | - byte[] buffer = new byte[Size]; |
318 | | - |
319 | | - long passifierLevel = readTarget_ - 0x10000000; |
320 | | - |
321 | | - while ((readTarget_ > 0) && (readBytes > 0)) { |
322 | | - int count = Size; |
323 | | - if (count > readTarget_) { |
324 | | - count = (int)readTarget_; |
325 | | - } |
326 | | - |
327 | | - readBytes = inStream_.Read(buffer, 0, count); |
328 | | - readTarget_ -= readBytes; |
| 302 | + PerformanceTesting.TestReadWrite( |
| 303 | + size: TestDataSize.Large, |
| 304 | + input: w => new GZipInputStream(w), |
| 305 | + output: w => new GZipOutputStream(w) |
| 306 | + ); |
329 | 307 |
|
330 | | - if (readTarget_ <= passifierLevel) { |
331 | | - Console.WriteLine("Reader {0} bytes remaining", readTarget_); |
332 | | - passifierLevel = readTarget_ - 0x10000000; |
333 | | - } |
334 | | - } |
335 | | - |
336 | | - Assert.IsTrue(window_.IsClosed, "Window should be closed"); |
337 | | - |
338 | | - // This shouldnt read any data but should read the footer |
339 | | - readBytes = inStream_.Read(buffer, 0, 1); |
340 | | - Assert.AreEqual(0, readBytes, "Stream should be empty"); |
341 | | - Assert.AreEqual(0, window_.Length, "Window should be closed"); |
342 | | - inStream_.Close(); |
343 | 308 | } |
344 | 309 |
|
345 | | - void Writer() |
346 | | - { |
347 | | - const int Size = 8192; |
348 | | - |
349 | | - byte[] buffer = new byte[Size]; |
350 | | - |
351 | | - while (writeTarget_ > 0) { |
352 | | - int thisTime = Size; |
353 | | - if (thisTime > writeTarget_) { |
354 | | - thisTime = (int)writeTarget_; |
355 | | - } |
356 | | - |
357 | | - outStream_.Write(buffer, 0, thisTime); |
358 | | - writeTarget_ -= thisTime; |
359 | | - } |
360 | | - outStream_.Close(); |
361 | | - } |
362 | 310 |
|
363 | | - WindowedStream window_; |
364 | | - GZipOutputStream outStream_; |
365 | | - GZipInputStream inStream_; |
366 | | - long readTarget_; |
367 | | - long writeTarget_; |
368 | 311 | } |
369 | 312 | } |
0 commit comments