public Statistics Encode(string inputFilePath, string outputFilePath, HuffmanEncodeModel huffmanEncodeModel) { Statistics statiscs; IHuffmanCoderInterface huffmanCoderInterface; IStatisticsBuilder statisticsBuilder = new StatisticsBuilder(); using (IInputReader input = new InputReader(inputFilePath)) { ICoderOutputWriter output = new CoderOutputWriter(new ByteCreator(), new HeaderCreator()); if (huffmanEncodeModel == HuffmanEncodeModel.Standard) { huffmanCoderInterface = new StandardHuffmanCoderInterface(input, output); } else if (huffmanEncodeModel == HuffmanEncodeModel.Block) { huffmanCoderInterface = new PairHuffmanCoderInterface(input, output); } else { huffmanCoderInterface = new MarkowHuffmanCoderInterface(input, output); } huffmanCoderInterface.Encode(); System.IO.File.WriteAllBytes(outputFilePath, output.FileBytes); statiscs = statisticsBuilder.BuildStatistics(output.SymbolMap, output.Header, input.Size, output.Size); if (huffmanEncodeModel == HuffmanEncodeModel.Standard) { IHistogramBuilder histogramBuilder = new HistogramBuilder(); histogramBuilder.BuildHistogram(output.SymbolMap, outputFilePath); } } return(statiscs); }
public void OneBitWritten() { var mockByteCreator = new Mock <IByteCreator>(); var mockHeaderCreator = new Mock <IHeaderCreator>(); var coderOutputWriter = new CoderOutputWriter(mockByteCreator.Object, mockHeaderCreator.Object); mockHeaderCreator.Setup(headerCreator => headerCreator.Create(HuffmanEncodeModel.Standard, false, new Dictionary <string, OutputValues>())).Returns(new Header { Content = new byte[0] }); mockByteCreator.SetupGet(byteCreator => byteCreator.IsReady).Returns(false); coderOutputWriter.Write(true); mockByteCreator.SetupGet(byteCreator => byteCreator.IsEmpty).Returns(false); coderOutputWriter.CreateFileBytes(HuffmanEncodeModel.Standard, false, new Dictionary <string, OutputValues>()); Assert.AreEqual(1, coderOutputWriter.FileBytes.Length); }