/* dynStateTest.c */

#include "dynState.c"


void printCurrentHeapAddr() {
  char * addr;

  addr = (char *)malloc(sizeof(char *));
  // No testing if memory could be allocated.

  printf("Next available memory address on the heap: %p\n", addr);
  free(addr);
  addr = NULL;            // just to be safe
}



int main() {
  int i;
  State *pRed, *pGreen, *pYellow, *pBlue;
  int stateIndices[] = {0, 0, 1, 1, 0, 1, 0, 0, 0};
  int size = sizeof stateIndices / sizeof(int);

  printf("Before allocating any memory:\n  ");
  printCurrentHeapAddr();

  pRed = newState("red");
  pGreen = newState("green");
  pYellow = newState("yellow");
  pBlue = newState("blue");

  connectStates(pYellow, pRed);
  connectStates(pYellow, pBlue);
  connectStates(pRed, pYellow);
  connectStates(pGreen, pYellow);
  connectStates(pBlue, pGreen);
  connectStates(pBlue, pRed);

  visitStates(pYellow, stateIndices, size, printStateName);
  visitStates(pYellow, stateIndices, size, printStateNameBetweenStars);

  deleteState(pRed);
  pRed = NULL;
  deleteState(pGreen);
  pGreen = NULL;
  deleteState(pYellow);
  pYellow = NULL;
  deleteState(pBlue);
  pBlue = NULL;

  printf("After having freed all memory:\n  ");
  printCurrentHeapAddr();

  return 0;
}
