private static void TestEncoder(string original, int chunkSize, LZ4Settings settings) { original = Tools.FindFile(original); var encoded = Path.GetTempFileName(); var decoded = Path.GetTempFileName(); try { TestedLZ4.Encode(original, encoded, chunkSize, settings); ReferenceLZ4.Decode(encoded, decoded); Tools.SameFiles(original, decoded); } finally { File.Delete(encoded); File.Delete(decoded); } }
private void TestEncoding(string original, int chunkSize, string options, string contentType = "??") { original = Tools.FindFile(original); var encoded = Path.GetTempFileName(); var decoded = Path.GetTempFileName(); LZ4Settings settings = Tools.ParseSettings(options); try { var stopwatch = Stopwatch.StartNew(); TestedLZ4.Encode(original, encoded, chunkSize, settings); stopwatch.Stop(); var testedEncodeTime = stopwatch.Elapsed; stopwatch.Restart(); TestedLZ4.Decode(encoded, decoded, chunkSize); stopwatch.Stop(); var testedDecodeTime = stopwatch.Elapsed; long testedEncodeSize = new FileInfo(encoded).Length; long testedOriginalSize = new FileInfo(original).Length; double testedCompress = (double)testedEncodeSize / (double)testedOriginalSize * 100; stopwatch.Restart(); ReferenceLZ4.Encode(options, original, encoded); stopwatch.Stop(); var refEncodeTime = stopwatch.Elapsed; stopwatch.Restart(); ReferenceLZ4.Decode(encoded, decoded); stopwatch.Stop(); var refDecodeTime = stopwatch.Elapsed; string encoderWinner = null; if (testedEncodeTime > refEncodeTime) { encoderWinner = string.Format("Native wins by {0}", (testedEncodeTime - refEncodeTime)); } else if (refEncodeTime > testedEncodeTime) { encoderWinner = string.Format("Implement wins by {0}", (refEncodeTime - testedEncodeTime)); } else { encoderWinner = "Tied!"; } string decoderWinner = null; if (testedDecodeTime > refDecodeTime) { decoderWinner = string.Format("Native wins by {0}", (testedDecodeTime - refDecodeTime)); } else if (refDecodeTime > testedDecodeTime) { decoderWinner = string.Format("Implement wins by {0}", (refDecodeTime - testedDecodeTime)); } else { decoderWinner = "Tied!"; } string settingsFormatted = string.Format("Level = {0}, BlockSize = {1}, Chaining = {2}", settings.Level, settings.BlockSize, settings.Chaining); string report = string.Format("Encoding payload '{0}' ({1}) implement vs native performance results: \n", original, contentType); report += string.Format("*** {0} ***\n", settingsFormatted); report += string.Format("- Encoder: {0} vs {1}\n", testedEncodeTime, refEncodeTime); report += " => " + encoderWinner + "\n"; report += string.Format("- Decoder: {0} vs {1}\n", testedDecodeTime, refDecodeTime); report += " => " + decoderWinner + "\n"; report += string.Format("- Reduced size from {0} to {1} => {2}% of original size\n", testedOriginalSize, testedEncodeSize, testedCompress); output.WriteLine("[TOUT/PERF] " + report); } finally { File.Delete(encoded); File.Delete(decoded); } }