/*
   Test a bunch of the functions, could porbably be made more comprehensive and
   descriptive, but oh well :)
*/

#include "datablk.h"
#include "flags.h"

int printlist(Datablk *ablk)
{
int i,j;
Datablk *myblk;

j = dblk_llength(ablk);
if (j > -1)
  {
    printf("{");
    for (i = 0; i <j; i++)
      {
	myblk = dblk_lindex(i,ablk);
	printf(" ");
	switch (dblk_typeof(myblk))
	  {
	  case DBLK_T_NUM:
	    printf("%f",dblk_getnum(myblk));
	    break;
	  case DBLK_T_STR:
	    printf("\"%s\"",dblk_getcstr(myblk));
	    break;
	  }
      }
    printf(" }");
  }
}

main()
{
  Datablk *myblk,*anotherblk,*yetanother, *w;
  int i;

  printf("We are libdatablks version %d.%d.%d.\n",DBLK_VERSION_MAJOR,DBLK_VERSION_MINOR,DBLK_VERSION_REV);

  myblk = dblk_mknum(2317);
  printf("makenum (myblk):    %d %f\n",*(int *)myblk->Data,dblk_getnum(myblk));

  dblk_setnum(1723,myblk);
  printf("setnum (myblk):     %d %f\n",*(int *)myblk->Data,dblk_getnum(myblk));

  dblk_setstr("My String is Red",myblk);
  printf("setstr (myblk):     %s\n",dblk_getcstr(myblk));

  anotherblk = dblk_mknum(1701);
  printf("mknum (anotherblk): %d %f\n",*(int *)anotherblk->Data,dblk_getnum(anotherblk));

  dblk_mkcopy(myblk,anotherblk);

  printf("mkcopy.. \n");
  printf("%s == %s\n",dblk_getcstr(myblk),dblk_getcstr(anotherblk));
  printf("%d != %d\n",(int)myblk->Data,(int)anotherblk->Data);

  yetanother = dblk_mkclone(myblk);

  printf("mkclone.. \n");
  printf("%s == %s\n",dblk_getcstr(myblk),dblk_getcstr(yetanother));
  printf("%d != %d\n",(int)myblk->Data,(int)yetanother->Data);

  dblk_setstr("Foobar",yetanother);

  w = dblk_mkpacklist(myblk,yetanother,anotherblk,0);
  printf("%d\n",dblk_llength(w));

  printlist(w);
  printf("\n");

  dblk_mkrcopy(w,myblk);

  printf("%d\n",dblk_llength(myblk));

  printlist(myblk);
  printf("\n");

  dblk_setstr("My Fish, brown he is.",dblk_lindex(0,w));

  printlist(w);
  printf("\n");

  dblk_setnum(5,anotherblk);

  printf("%f\n",dblk_getnum(anotherblk));

  dblk_lpush(w,dblk_mknum(5));
  printlist(w);
  printf("\n");

  dblk_lunshift(myblk,(Datablk *)(w->Data));

  printf("%d\n",dblk_llength(myblk));

  printlist(myblk);
  printf("\n");

  dblk_destroy(dblk_lremove(1,myblk));
  printlist(myblk);
  printf("\n");
}


