#include <stdio.h>

#include "wnlib.h"
#include "wnasrt.h"

#include "wncmp.h"


local void test_cmp()
{
  fprintf(stderr,"testing cmp...\n");

  wn_assert(wn_intcmp(1,1) == 0);
  wn_assert(wn_intcmp(1,0) > 0);
  wn_assert(wn_intcmp(0,1) < 0);
  wn_assert(wn_intcmp(-7,-7) == 0);
  wn_assert(wn_intcmp(-7,-4) < 0);
  wn_assert(wn_intcmp(-7,-401) > 0);
  wn_assert(wn_intcmp(-18,31) < 0);
  wn_assert(wn_intcmp(-18,31) < 0);

  {
    char *p1="foo1",*p2="foo2";
    bool success;

    wn_assert(wn_ptrcmp(p1,p1) == 0);
    wn_assert(wn_ptrcmp(p2,p2) == 0);
    wn_assert(wn_ptrcmp(p1,p2) != 0);

    wn_assert(wn_ptrNULLcmp(&success,NULL,NULL) == 0);
    wn_assert(success);

    wn_assert(wn_ptrNULLcmp(&success,NULL,p1) < 0);
    wn_assert(success);

    wn_assert(wn_ptrNULLcmp(&success,p1,NULL) > 0);
    wn_assert(success);

    wn_assert(wn_ptrNULLcmp(&success,p1,p1) == 0);
    wn_assert(success);

    wn_assert(wn_ptrNULLcmp(&success,p1,p2) == 0);
    wn_assert(!success);
  }

  wn_assert(wn_boolcmp(TRUE,TRUE) == 0);
  wn_assert(wn_boolcmp(FALSE,TRUE) < 0);
  wn_assert(wn_boolcmp(TRUE,FALSE) > 0);
  wn_assert(wn_boolcmp(FALSE,FALSE) == 0);
  wn_assert(wn_boolcmp((bool)1,(bool)2) == 0);
  wn_assert(wn_boolcmp((bool)(-1),FALSE) > 0);

  wn_assert(wn_doublecmp(1.2,1.2) == 0);
  wn_assert(wn_doublecmp(1.3,1.2) > 0);
  wn_assert(wn_doublecmp(1.3,1.4) < 0);
  wn_assert(wn_doublecmp(-1.3,-1.4) > 0);
  wn_assert(wn_doublecmp(-1.3,0.4) < 0);

  wn_assert(numstrcmp("wow1","wow1") == 0);
  wn_assert(numstrcmp("wow2","wow1") > 0);
  wn_assert(numstrcmp("wow1","wow2") < 0);
  wn_assert(numstrcmp("wow10","wow2") > 0);
  wn_assert(numstrcmp("wow2","wow10") < 0);

  fprintf(stderr,"  ok!!!!!!\n");
}


void main(void)
{
  test_cmp();
}
