public void VerifyCompression_LargeCorpus() { var stream = new MemoryStream(); var writer = new BitStreamWriter(stream, true); var reader = new BitStreamReader(stream, true); string input = TestResources.RFC5_Text; var state = new TreeStateStore(); var compressor = new StaticHuffman<char>(CharacterFrequencies(input)); compressor.WriteTable(state.WriteSymbol, state.WriteUInt32); foreach (char ch in input) { compressor.WriteCode(ch, writer.Write); } writer.Flush(); state.Reset(); var decompressor = new StaticHuffman<char>(state.ReadSymbol, state.ReadUInt32); stream.Position = 0; foreach (char ch in input) { Assert.AreEqual(ch, decompressor.GetSymbol(reader.ReadBoolean)); } }
public void VerifyBulkUpdateIncrease() { string originalInput = "astrachan________"; var originalCompressor = new DynamicHuffman<char>(OriginalNYT); var originalTreeState = new TreeStateStore(); for (int i = 0; i < originalInput.Length; ++i) { originalCompressor.WriteCode(originalInput[i], (bit) => { }, (symbol) => { }); } originalCompressor.WriteTable(originalTreeState.WriteSymbol, originalTreeState.WriteUInt32, originalTreeState.WriteNotYetTransmitted); string partialInput = "astrachan"; var bulkCompressor = new DynamicHuffman<char>(OriginalNYT); for (int i = 0; i < partialInput.Length; ++i) { bulkCompressor.WriteCode(partialInput[i], (bit) => { }, (symbol) => { }); } bulkCompressor.UpdateSymbol('_', 8); var bulkTreeState = new TreeStateStore(); bulkCompressor.WriteTable(bulkTreeState.WriteSymbol, bulkTreeState.WriteUInt32, bulkTreeState.WriteNotYetTransmitted); CollectionAssert.AreEqual(originalTreeState, bulkTreeState); }