Example #1
0
int main() {
  // Example taken from "Cormen, Leiserson - Introduction to Algorithms"
  // Chapter 16.3
  // Added another g with count 0, that we want to support
  // As such it shouldn't change other results
  huffman_entity test[TESTSIZE];
  test[0].data = "a";
  test[0].count = 45;
  test[1].data = "b";
  test[1].count = 13;
  test[2].data = "c";
  test[2].count = 12;
  test[3].data = "d";
  test[3].count = 16;
  test[4].data = "e";
  test[4].count = 9;
  test[5].data = "f";
  test[5].count = 5;
  test[6].data = "g";
  test[6].count = 0;

  huffman_encode(test, TESTSIZE);

  for(int i = 0; i < TESTSIZE; i++) {
    printf("%s %2lu -> mask = "BYTE_TO_BINARY_PATTERN", value = "
      BYTE_TO_BINARY_PATTERN", bits = %d\n",
      (char *)test[i].data, test[i].count,
      BYTE_TO_BINARY(test[i].bitmask), BYTE_TO_BINARY(test[i].bitvalue),
      test[i].bitcount);
  }

  int error =
    (test[0].bitmask != 128) ||
    (test[0].bitvalue != 0) ||
    (test[0].bitcount != 1) ||
    (test[1].bitmask != 224) ||
    (test[1].bitvalue != 160) ||
    (test[1].bitcount != 3) ||
    (test[2].bitmask != 224) ||
    (test[2].bitvalue != 128) ||
    (test[2].bitcount != 3) ||
    (test[3].bitmask != 224) ||
    (test[3].bitvalue != 224) ||
    (test[3].bitcount != 3) ||
    (test[4].bitmask != 240) ||
    (test[4].bitvalue != 208) ||
    (test[4].bitcount != 4) ||
    (test[5].bitmask != 240) ||
    (test[5].bitvalue != 192) ||
    (test[5].bitcount != 4) ||
    (test[6].bitmask != 0) ||
    (test[6].bitvalue != 1) ||
    (test[6].bitcount != 0);

  if(error) {
    printf("Unexpected results!\n");
    return 1;
  } else
    return 0;
}
void print_bin(char x) {
    printf("bin: "BYTE_TO_BINARY_PATTERN"\n", BYTE_TO_BINARY(x));
    //printf("hex: %#x\n", x);
    //printf("dec: %d\n", x);
    printf("\n");
}