private static void CompressTemplate(string sampleFileName, ZLibCompLevel level, bool useSpan) { string filePath = Path.Combine(TestSetup.SampleDir, sampleFileName); ZLibCompressOptions compOpts = new ZLibCompressOptions() { Level = level, LeaveOpen = true, }; using (FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.Read)) using (MemoryStream compMs = new MemoryStream()) using (MemoryStream decompMs = new MemoryStream()) { using (DeflateStream zs = new DeflateStream(compMs, compOpts)) { #if !NETFRAMEWORK if (useSpan) { byte[] buffer = new byte[64 * 1024]; int bytesRead; do { bytesRead = fs.Read(buffer.AsSpan()); zs.Write(buffer.AsSpan(0, bytesRead)); } while (0 < bytesRead); } else #endif { fs.CopyTo(zs); } } fs.Position = 0; compMs.Position = 0; // Decompress compMs with BCL DeflateStream using (System.IO.Compression.DeflateStream zs = new System.IO.Compression.DeflateStream(compMs, CompressionMode.Decompress, true)) { zs.CopyTo(decompMs); } decompMs.Position = 0; // Compare SHA256 Digest byte[] decompDigest = TestHelper.SHA256Digest(decompMs); byte[] fileDigest = TestHelper.SHA256Digest(fs); Assert.IsTrue(decompDigest.SequenceEqual(fileDigest)); } }
private static void CompressTemplate(string sampleFileName, ZLibCompLevel level, bool useSpan) { string tempDecompFile = Path.Combine(Path.GetTempPath(), Path.GetRandomFileName()); string tempArchiveFile = tempDecompFile + ".zz"; try { ZLibCompressOptions compOpts = new ZLibCompressOptions() { Level = level, LeaveOpen = true, }; string sampleFile = Path.Combine(TestSetup.SampleDir, sampleFileName); using (FileStream sampleFs = new FileStream(sampleFile, FileMode.Open, FileAccess.Read, FileShare.Read)) using (FileStream archiveFs = new FileStream(tempArchiveFile, FileMode.Create, FileAccess.Write, FileShare.None)) using (ZLibStream zs = new ZLibStream(archiveFs, compOpts)) { #if !NETFRAMEWORK if (useSpan) { byte[] buffer = new byte[64 * 1024]; int bytesRead; do { bytesRead = sampleFs.Read(buffer.AsSpan()); zs.Write(buffer.AsSpan(0, bytesRead)); } while (0 < bytesRead); } else #endif { sampleFs.CopyTo(zs); } zs.Flush(); Assert.AreEqual(sampleFs.Length, zs.TotalIn); Assert.AreEqual(archiveFs.Length, zs.TotalOut); } int ret = TestHelper.RunPigz(tempArchiveFile); Assert.IsTrue(ret == 0); byte[] decompDigest; byte[] originDigest; using (FileStream fs = new FileStream(sampleFile, FileMode.Open, FileAccess.Read, FileShare.Read)) { originDigest = TestHelper.SHA256Digest(fs); } using (FileStream fs = new FileStream(tempDecompFile, FileMode.Open, FileAccess.Read, FileShare.Read)) { decompDigest = TestHelper.SHA256Digest(fs); } Assert.IsTrue(originDigest.SequenceEqual(decompDigest)); } finally { if (File.Exists(tempArchiveFile)) { File.Delete(tempArchiveFile); } if (File.Exists(tempDecompFile)) { File.Delete(tempDecompFile); } } }