Beispiel #1
0
        public void NativeLZ4()
        {
            byte[] buffer = _srcFileBytesDict[DecompMethod.NativeLZ4];

            using (MemoryStream decompMs = new MemoryStream((int)_magicFileLen))
                using (MemoryStream compMs = new MemoryStream(buffer))
                {
                    using (LZ4FrameStream ls = new LZ4FrameStream(compMs, new LZ4FrameDecompressOptions()))
                    {
                        ls.CopyTo(decompMs);
                    }
                }
        }
Beispiel #2
0
        private static void DecompressTemplate(string lz4FileName, string originFileName, bool useSpan)
        {
            byte[] decompDigest;
            byte[] originDigest;

            LZ4FrameDecompressOptions decompOpts = new LZ4FrameDecompressOptions();

            string lz4File    = Path.Combine(TestSetup.SampleDir, lz4FileName);
            string originFile = Path.Combine(TestSetup.SampleDir, originFileName);

            using (MemoryStream decompMs = new MemoryStream())
            {
                using (FileStream compFs = new FileStream(lz4File, FileMode.Open, FileAccess.Read, FileShare.Read))
                    using (LZ4FrameStream lzs = new LZ4FrameStream(compFs, decompOpts))
                    {
#if !NETFRAMEWORK
                        if (useSpan)
                        {
                            byte[] buffer = new byte[64 * 1024];

                            int bytesRead;
                            do
                            {
                                bytesRead = lzs.Read(buffer.AsSpan());
                                decompMs.Write(buffer.AsSpan(0, bytesRead));
                            } while (0 < bytesRead);
                        }
                        else
#endif
                        {
                            lzs.CopyTo(decompMs);
                        }

                        decompMs.Flush();

                        Assert.AreEqual(compFs.Length, lzs.TotalIn);
                        Assert.AreEqual(decompMs.Length, lzs.TotalOut);
                    }
                decompMs.Position = 0;

                decompDigest = TestHelper.SHA256Digest(decompMs);
            }

            using (FileStream originFs = new FileStream(originFile, FileMode.Open, FileAccess.Read, FileShare.Read))
            {
                originDigest = TestHelper.SHA256Digest(originFs);
            }

            Assert.IsTrue(decompDigest.SequenceEqual(originDigest));
        }
Beispiel #3
0
        private static void CompressTemplate(string sampleFileName, LZ4CompLevel compLevel, bool autoFlush, bool enableContentSize, bool useSpan)
        {
            if (sampleFileName == null)
            {
                throw new ArgumentNullException(nameof(sampleFileName));
            }

            string destDir = Path.GetTempFileName();

            File.Delete(destDir);
            Directory.CreateDirectory(destDir);
            try
            {
                string tempDecompFile = Path.Combine(destDir, Path.GetFileName(sampleFileName));
                string tempLz4File    = tempDecompFile + ".lz4";

                string sampleFile = Path.Combine(TestSetup.SampleDir, sampleFileName);
                using (FileStream sampleFs = new FileStream(sampleFile, FileMode.Open, FileAccess.Read, FileShare.Read))
                {
                    LZ4FrameCompressOptions compOpts = new LZ4FrameCompressOptions()
                    {
                        Level     = compLevel,
                        AutoFlush = autoFlush,
                        LeaveOpen = true,
                    };
                    if (enableContentSize)
                    {
                        compOpts.ContentSize = (ulong)sampleFs.Length;
                    }

                    using (FileStream lz4CompFs = new FileStream(tempLz4File, FileMode.Create, FileAccess.Write, FileShare.None))
                        using (LZ4FrameStream lzs = new LZ4FrameStream(lz4CompFs, compOpts))
                        {
#if !NETFRAMEWORK
                            if (useSpan)
                            {
                                byte[] buffer = new byte[64 * 1024];

                                int bytesRead;
                                do
                                {
                                    bytesRead = sampleFs.Read(buffer.AsSpan());
                                    lzs.Write(buffer.AsSpan(0, bytesRead));
                                } while (0 < bytesRead);
                            }
                            else
#endif
                            {
                                sampleFs.CopyTo(lzs);
                            }

                            lzs.Flush();

                            Assert.AreEqual(sampleFs.Length, lzs.TotalIn);
                            Assert.AreEqual(lz4CompFs.Length, lzs.TotalOut);
                        }
                }


                Assert.IsTrue(TestHelper.RunLZ4(tempLz4File, tempDecompFile) == 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 (Directory.Exists(destDir))
                {
                    Directory.Delete(destDir, true);
                }
            }
        }