/*
  !!DESCRIPTION!! test compare
  !!ORIGIN!!      SDCC regression tests
  !!LICENCE!!     GPL, read COPYING.GPL
*/

#include <stdio.h>
#include <limits.h>

/*
   compare.c
*/

#ifdef SUPPORT_BIT_TYPES
bit bit0 = 0;
bit bit1 = 0;
#endif

unsigned char success = 0;
unsigned char failures = 0;
unsigned char dummy = 0;

unsigned char achar0 = 0;
unsigned char achar1 = 0;
unsigned int aint0 = 0;
unsigned int aint1 = 0;

char schar0 = 0;
char schar1 = 0;

void
done ()
{
  dummy++;
}

/* achar0 should be zero */

void
compare_char_to_lits1 (void)
{
  if (achar0)
    failures++;

  if (achar0 == 1)
    failures++;

  if (achar0 == 7)
    failures++;

  if (achar0 != 0)
    failures++;
}

/* achar0 should be '5' */
void
compare_char_to_lits2 (void)
{
  if (!achar0)
    failures++;

  if (achar0 == 1)
    failures++;

  if (achar0 == 7)
    failures++;

  if (achar0 != 5)
    failures++;
}

/* achar0 should equal achar1 */
void
compare_char_to_char1 (void)
{
  if (achar0 != achar1)
    failures++;

  if (schar0 != schar1)
    failures++;
}

/* achar0 should be different than achar1 */
void
compare_char_to_char2 (void)
{
  if (achar0 == achar1)
    failures++;
}

/* aint0 should be zero */

void
compare_int_to_lits1 (void)
{
  if (aint0)
    failures++;

  if (aint0 == 1)
    failures++;

  if (aint0 == 7)
    failures++;

  if (aint0 != 0)
    failures++;
}

/* aint0 should be '5' */
void
compare_int_to_lits2 (void)
{
  if (!aint0)
    failures++;

  if (aint0 == 1)
    failures++;

  if (aint0 == 7)
    failures++;

  if (aint0 != 5)
    failures++;
}

/* aint0 should be '0x1234' */
void
compare_int_to_lits3 (void)
{
  if (!aint0)
    failures++;

  if (aint0 == 1)
    failures++;

  if (aint0 == 7)
    failures++;

  if (aint0 != 0x1234)
    failures++;
}

/* aint0 should equal aint1 */
void
compare_int_to_int1 (void)
{
  if (aint0 != aint1)
    failures++;
}

/* aint0 should be different than aint1 */
void
compare_int_to_int2 (void)
{
  if (aint0 == aint1)
    failures++;
}

int
main (void)
{
  compare_char_to_lits1 ();
  compare_char_to_char1 ();
  achar0 = 5;
  compare_char_to_lits2 ();
  compare_char_to_char2 ();

  compare_int_to_lits1 ();
  aint0 = 5;
  compare_int_to_lits2 ();
  aint0 = 0x1234;
  compare_int_to_lits3 ();
  compare_int_to_int2 ();
  aint0 = 0;
  compare_int_to_int1 ();

  success = failures;
  done ();

  printf("failures: %d\n",failures);

  return failures;
}