/* stringHistoryTest.c */

#include <stdio.h>
#include "stringHistory.c"


/*
 * Send message out of memory.
 */
void onErrorOutOfMemory() {
  puts("onErrorOutOfMemory");
}



/*
 * Send message NULL pointer.
 */
void onNullPointer() {
  puts("onNullPointer");
  exit(1);
}



/*
 * Test StringHistory.
 */
int main() {
  char *str;
  StringHistory *strHist = NULL;
  StringHistory *cloneHist = NULL;

  puts("STRING HISTORY TESTS");
  puts("====================");

  printf("strHist: %s\n", strHist);
  printf("cloneHist: %s\n", cloneHist);

  puts("\nCreate a string history:");
  //      ========================
  strHist = createStringHistory(4);
  puts("strHist:");
  printStringHistory(strHist);


  puts("Add strings into string history:");
  //    ================================
  addStringHistory(strHist, "O Sole Mio");
  puts("strHist:");
  printStringHistory(strHist);

  addStringHistory(strHist, "Der Hirt auf dem Felsen");
  puts("strHist:");
  printStringHistory(strHist);

  addStringHistory(strHist, "Obladi, Oblada");
  puts("strHist:");
  printStringHistory(strHist);

  str = "Ich hab\' Dein Knie gesehn...";
  addStringHistory(strHist, str);
  printStringHistory(strHist);

  str = "I hob Dei Fuess gsehn...";
  addStringHistory(strHist, str);
  puts("strHist:");
  printStringHistory(strHist);

  addStringHistory(strHist, "Non, je ne regrette rien");
  puts("strHist:");
  printStringHistory(strHist);


  puts("Clone strHist to cloneHist:");
  //    ===========================
  cloneHist = cloneStringHistory(strHist);
  puts("cloneHist:");
  printStringHistory(cloneHist);

  addStringHistory(cloneHist, "Mellow Moods");
  puts("cloneHist:");
  printStringHistory(cloneHist);

  puts("strHist:");
  printStringHistory(strHist);

  addStringHistory(cloneHist, "Linda vida");
  puts("cloneHist:");
  printStringHistory(cloneHist);


  puts("Change maxStringCount of cloneHist:");
  //    ===================================
  setStringCount(cloneHist, 6);
  puts("cloneHist:");
  printStringHistory(cloneHist);

  addStringHistory(cloneHist, "In einem Baechlein helle");
  puts("cloneHist:");
  printStringHistory(cloneHist);

  addStringHistory(cloneHist, "Skandal um Rosie");
  puts("cloneHist:");
  printStringHistory(cloneHist);

  addStringHistory(cloneHist, "Imagine");
  puts("cloneHist:");
  printStringHistory(cloneHist);


  puts("Change maxStringCount of cloneHist:");
  //    ===================================
  setStringCount(cloneHist, 3);
  puts("cloneHist:");
  printStringHistory(cloneHist);


  puts("Change maxStringCount of cloneHist:");
  //    ===================================
  setStringCount(cloneHist, 7);
  puts("cloneHist:");
  printStringHistory(cloneHist);


  puts("Change maxStringCount of cloneHist:");
  //    ===================================
  setStringCount(cloneHist, 5);
  puts("cloneHist:");
  printStringHistory(cloneHist);


  puts("Empty history:");
  //    ==============
  clearStringHistory(strHist);
  puts("strHist:");
  printStringHistory(strHist);


  puts("Destroy histories:");
  //    ==================
  deleteStringHistory(strHist);
  strHist = NULL;
  printf("strHist: %s\n", strHist);

  deleteStringHistory(cloneHist);
  cloneHist = NULL;
  printf("cloneHist: %s\n", cloneHist);

  return 0;
}
