public void TestCompressionWithConfig(ExternalCompressorConfig externalCompressorConfig, bool checkReduction) { var catCompressionConfig = externalCompressorConfig; var strategy = new ExternalCompressionStrategy(catCompressionConfig); var data = new byte[TestBlockSize]; for (int i = 0; i < TestBlockSize; i++) { data[i] = (byte)(i * 5); } var memStream = new MemoryStream(); var compressingStream = new BruteCompressingStream(new BinaryWriter(memStream), 65000, strategy); compressingStream.Write(data, 0, TestBlockSize); compressingStream.Flush(); if (checkReduction) { Assert.Less(memStream.Position, TestBlockSize); Console.WriteLine("Compressed {0} to {1} ({2}%)", TestBlockSize, memStream.Position, memStream.Position * 100 / TestBlockSize); } memStream.Seek(0, SeekOrigin.Begin); var decompressingStream = new BruteUncompressingStream(new BinaryReader(memStream)); var decompressingReader = new BinaryReader(decompressingStream); var readBlock = decompressingReader.ReadBytes(TestBlockSize); Assert.AreEqual(data, readBlock); }
public void TestCompressionWithConfig(int size) { var strategy = new ArithmeticCodingStrategy(size); var data = new byte[TestBlockSize]; for (int i = 0; i < TestBlockSize; i++) { data[i] = (byte)(i * 128 + 1); } var memStream = new MemoryStream(); var compressingStream = new BruteCompressingStream(new BinaryWriter(memStream), TestBlockSize, strategy); compressingStream.Write(data, 0, TestBlockSize); compressingStream.Flush(); memStream.Seek(0, SeekOrigin.Begin); var decompressingStream = new BruteUncompressingStream(new BinaryReader(memStream)); var decompressingReader = new BinaryReader(decompressingStream); var readBlock = decompressingReader.ReadBytes(TestBlockSize); Assert.AreEqual(data, readBlock); }
public void TestSelectionStrategy() { var data = new byte[TestSize]; for (int i = 0; i < TestSize; i++) { data[i] = (byte)i; } var compressors = new ICompressionStrategy[TestSize]; for (int i = 0; i < TestSize; i++) { compressors[i] = new MockStrategy((byte)i); } var strategy = new BruteCompressionStrategy(compressors); var memStream = new MemoryStream(); var compressingStream = new BruteCompressingStream(new BinaryWriter(memStream), 1, strategy); compressingStream.Write(data, 0, TestSize); compressingStream.Flush(); Assert.AreEqual(memStream.Position, TestSize * 4); Console.WriteLine("Compressed {0} to {1} ({2}%)", TestSize, memStream.Position, memStream.Position * 100 / TestSize); }
public static void Main(string[] args) { var brutePackMain = new BrutePackMain(); if (!Parser.Default.ParseArguments(args, brutePackMain)) { return; } var inputFile = brutePackMain.InputFile; var outputFile = brutePackMain.OutputFile; var decompress = brutePackMain.Decompress; if (outputFile == "") { GenerateOutputFilename(inputFile, decompress, out outputFile); } if (!decompress) { if (brutePackMain.ConfigFile.NullOrEmpty() && brutePackMain.ConfigString.NullOrEmpty()) { Console.WriteLine("You must specify -c or -f for compression"); return; } } var inputStream = new FileStream(inputFile, FileMode.Open); var outputStream = new FileStream(outputFile, FileMode.CreateNew); if (decompress) { using (var uncompressStream = new BruteUncompressingStream(new BinaryReader(inputStream))) uncompressStream.CopyTo(outputStream); outputStream.Flush(); outputStream.Close(); } else { var configString = brutePackMain.ConfigFile.NullOrEmpty() ? brutePackMain.ConfigString : File.ReadAllText(brutePackMain.ConfigFile); var parsedConfig = StrategyConfigParser.ParseConfig(configString) .Concat(Enumerable.Repeat <ICompressionStrategy>(new DumbCompressionStrategy(), 1)); var compressingStream = new BruteCompressingStream(new BinaryWriter(outputStream), brutePackMain.MaxBufferSize, new BruteCompressionStrategy(parsedConfig)); inputStream.CopyTo(compressingStream); compressingStream.Flush(); compressingStream.Close(); } }