Пример #1
0
        private bool TestCompressInMemory(byte[] input, string xzFilename)
        {
            var data1 = XZUtils.CompressBytes(input, 0, input.Length);
            var data2 = File.ReadAllBytes(xzFilename);

            return(BytesEqual(data1, data2));
        }
Пример #2
0
        private static void PerfCompare()
        {
            // generate a big file
            var filename = "data.txt";

            using (var writer = new StreamWriter(filename))
            {
                for (int i = 0; i < 1000000; i++)
                {
                    writer.WriteLine($"{i}: generate random numbers {rnd.NextDouble()}, {rnd.NextDouble()}, {rnd.NextDouble()}");
                }
            }

            for (int i = 0; i <= 9; i++)
            {
                var t = Stopwatch.StartNew();
                XZUtils.CompressFile(filename, $@"{filename}.L{i}.xz", FileMode.Create, 6, i);
                Console.WriteLine($"compress level={i}, time={t.Elapsed}");
            }
            for (int i = 0; i <= 9; i++)
            {
                var t = Stopwatch.StartNew();
                XZUtils.DecompressFile($@"{filename}.L{i}.xz", $@"restore_L{i}_{filename}");
                Console.WriteLine($"decompress level={i}, time={t.Elapsed}");
            }
        }
Пример #3
0
        private void RunTests()
        {
            Check(TestCompressFile("0byte.bin", "0byte.bin.xz"), "compress 0byte");
            Check(TestCompressFile("1byte.0.bin", "1byte.0.bin.xz"), "compress 1byte[0x00]");
            Check(TestCompressFile("1byte.1.bin", "1byte.1.bin.xz"), "compress 1byte[0x01]");
            Check(TestCompressInMemory(new byte[0], "0byte.bin.xz"), "compress 0byte in memory");
            Check(TestCompressInMemory(new byte[1] {
                0
            }, "1byte.0.bin.xz"), "compress 1byte[0x00] in memory");
            Check(TestCompressInMemory(new byte[1] {
                1
            }, "1byte.1.bin.xz"), "compress 1byte[0x00] in memory");

            Check(TestDecompressFile("0byte.bin.xz", "0byte.bin"), "decompress 0byte");
            Check(TestDecompressFile("1byte.0.bin.xz", "1byte.0.bin"), "decompress 1byte[0x00]");
            Check(TestDecompressFile("1byte.1.bin.xz", "1byte.1.bin"), "decompress 1byte[0x01]");
            Check(TestDecompressInMemory(XZUtils.CompressBytes(new byte[0], 0, 0), "0byte.bin"),
                  "decompress 0byte in memory");
            Check(TestDecompressInMemory(XZUtils.CompressBytes(new byte[1] {
                0
            }, 0, 1), "1byte.0.bin"),
                  "decompress 1byte[0x00] in memory");
            Check(TestDecompressInMemory(XZUtils.CompressBytes(new byte[1] {
                1
            }, 0, 1), "1byte.1.bin"),
                  "decompress 1byte[0x00] in memory");

            TestMemoryLeak();

            TestDispose();

            Console.WriteLine("test finished");
            Console.ReadLine();
        }
Пример #4
0
        private bool TestDecompressInMemory(byte[] input, string binFilename)
        {
            var data1 = XZUtils.DecompressBytes(input, 0, input.Length);
            var data2 = File.ReadAllBytes(binFilename);

            return(CompareBytes(data1, data2));
        }
Пример #5
0
        private bool TestCompressFile(string srcFilename, string xzFilename)
        {
            var tmpfile = Path.GetTempFileName();

            XZUtils.CompressFile(srcFilename, tmpfile, FileMode.Append);
            var isSame = CompareFile(xzFilename, tmpfile);

            File.Delete(tmpfile);
            return(isSame);
        }
Пример #6
0
        private bool TestDecompressFile(string xzFilename, string binFilename)
        {
            var tmpfile = Path.GetTempFileName();

            File.Delete(tmpfile);
            XZUtils.DecompressFile(xzFilename, tmpfile);
            var isSame = CompareFile(binFilename, tmpfile);

            File.Delete(tmpfile);
            return(isSame);
        }
Пример #7
0
        private static void CompressInMemory()
        {
            var sb = new StringBuilder();

            for (int i = 0; i < 1000; i++)
            {
                sb.AppendLine($"{i}: a random number {rnd.NextDouble()}");
            }
            var str        = sb.ToString();
            var bytes      = Encoding.UTF8.GetBytes(str);
            var compressed = XZUtils.CompressBytes(bytes, 0, bytes.Length);
            var bytes2     = XZUtils.DecompressBytes(compressed, 0, compressed.Length);
            var str2       = Encoding.UTF8.GetString(bytes2);

            Console.WriteLine($"identical = {str == str2}");
        }
Пример #8
0
        private void TestMemoryLeak()
        {
            var rnd = new Random();
            var m0  = Process.GetCurrentProcess().PrivateMemorySize64;
            var N   = 5000;

            for (int i = 0; i < N; i++)
            {
                var raw = new byte[64];
                rnd.NextBytes(raw);
                var compressed   = XZUtils.CompressBytes(raw, 0, raw.Length);
                var decompressed = XZUtils.DecompressBytes(compressed, 0, compressed.Length);
                if (!BytesEqual(raw, decompressed))
                {
                    Console.WriteLine("error");
                }
                if (i % 1000 == 0 || i == N - 1)
                {
                    var m1 = Process.GetCurrentProcess().PrivateMemorySize64;
                    Console.WriteLine($"{i}  {m0:N0} --> {m1:N0}, r={m1 * 1.0 / m0:F2}");
                }
            }
        }