void test_streamWriteBit_2time_given_input_1_0_byteToWrite_should_contain_01_and_increment_bitIndex_to_2() { OutStream *out = initOutStream(); TEST_ASSERT_EQUAL(0,out->byteToWrite); TEST_ASSERT_EQUAL(0,out->bitIndex); streamWriteBit(out,1); TEST_ASSERT_EQUAL(1,out->byteToWrite); TEST_ASSERT_EQUAL(1,out->bitIndex); streamWriteBit(out,0); TEST_ASSERT_EQUAL(1,out->byteToWrite); TEST_ASSERT_EQUAL(2,out->bitIndex); freeOutStream(out); }
void test_streamWriteBit_1time_given_input_1_should_write_1_to_byteToWrite_and_increment_bitIndex_to_1() { OutStream *out = initOutStream(); TEST_ASSERT_EQUAL(0,out->byteToWrite); TEST_ASSERT_EQUAL(0,out->bitIndex); streamWriteBit(out,1); TEST_ASSERT_EQUAL(1,out->byteToWrite); TEST_ASSERT_EQUAL(1,out->bitIndex); freeOutStream(out); }
HuffmanNode *huffmanCompress(InStream *in, OutStream *out){ HuffmanNode *returnedNewNode; HuffmanNode *NodeForCase = NULL; root = adaptiveHuffmanTreeInit(); root->order = Symbol; uint32 Symb = 0; HuffmanNode *arraySymbol[Symbol]; clearArraySymbol(arraySymbol); fflush(stdout); while(!feof(in->file)){ Symb = streamReadBits(in); if(!arraySymbol[Symb]){ if (!Symb){ //EOF, object file break; } if(!NodeForCase){ // First Unseen Symbol returnedNewNode = buildAndAddNewHuffmanTree(out,root,arraySymbol,Symb); fflush(out->file); NodeForCase = returnedNewNode; } else{ // Following Unseen Symbol returnedNewNode = buildAndAddNewHuffmanTree(out,returnedNewNode,arraySymbol,Symb); fflush(out->file); } } else{ // Symbol Seen before emitPathCode(out,arraySymbol[Symb]); huffmanUpdateAndRestructure(arraySymbol[Symb]); fflush(out->file); } } while (streamOut.bitIndex != 7){ //fill remaining with 0 streamWriteBit(out , 0); fflush(out->file); } clearArraySymbol(arraySymbol); fflush(stdout); fflush(out->file); fflush(in->file); return returnedNewNode; freeNodes(root); root = NULL; }