private bool TestCompressInMemory(byte[] input, string xzFilename) { var data1 = XZUtils.CompressBytes(input, 0, input.Length); var data2 = File.ReadAllBytes(xzFilename); return(BytesEqual(data1, data2)); }
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}"); } }
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(); }
private bool TestDecompressInMemory(byte[] input, string binFilename) { var data1 = XZUtils.DecompressBytes(input, 0, input.Length); var data2 = File.ReadAllBytes(binFilename); return(CompareBytes(data1, data2)); }
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); }
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); }
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}"); }
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}"); } } }