/* Basic test of runtime relational comparisons using simple values that
   are not affected by rounding.  */

#include <stdlib.h>

static int failcnt;

#define PASTE2(A,B) A ## B
#define PASTE(A,B) PASTE2(A,B)

#ifdef DBG
#include <stdio.h>
#define FAILURE(OP,KIND) \
  { printf ("failed at line %d: %s for %s values\n", __LINE__, OP, KIND); \
    failcnt++; }
#else
#define FAILURE(OP,KIND) abort ();
#endif

#ifndef WIDTH
#error define WIDTH as decimal float size in bytes
#endif

#if WIDTH == 32
#define DTYPE _Decimal32
#define SUFFIX DF
#elif WIDTH == 64
#define DTYPE _Decimal64
#define SUFFIX DD
#elif WIDTH == 128
#define DTYPE _Decimal128
#define SUFFIX DL
#elif WIDTH == 0
/* This is for testing the test using a type known to work.  */
#define DTYPE double
#define SUFFIX
#else
#error invalid width for decimal float type
#endif

DTYPE m_two = PASTE(-2.0, SUFFIX);
DTYPE m_one = PASTE(-1.0, SUFFIX);
DTYPE zero  = PASTE(0.0, SUFFIX);
DTYPE one   = PASTE(1.0, SUFFIX);
DTYPE two   = PASTE(2.0, SUFFIX);

void
test_compares (void)
{
  DTYPE x = one;
  DTYPE y = zero;
  DTYPE z = m_one;

  /* Less than or equal to: comparisons against equal values.  */

  if (! (x <= one))   FAILURE ("<=", "equal")
  if (! (y <= zero))  FAILURE ("<=", "equal")
  if (! (z <= m_one)) FAILURE ("<=", "equal")

  /* Less than or equal to: comparisons against lesser values.  */

  if (x <= m_one)     FAILURE ("<=", "lesser")
  if (x <= zero)      FAILURE ("<=", "lesser")
  if (y <= m_one)     FAILURE ("<=", "lesser")
  if (z <= m_two)     FAILURE ("<=", "lesser")

  /* Less than or equal to: comparisons against greater values.  */

  if (! (x <= two))   FAILURE ("<=", "greater")
  if (! (y <= one))   FAILURE ("<=", "greater")
  if (! (z <= zero))  FAILURE ("<=", "greater")
  if (! (z <= one))   FAILURE ("<=", "greater")

  /* Less than: comparisons against equal values.  */

  if (x < one)        FAILURE ("<", "equal")
  if (y < zero)       FAILURE ("<", "equal")
  if (z < m_one)      FAILURE ("<", "equal")

  /* Less than: comparisons against lesser values.  */

  if (x < m_one)      FAILURE ("<", "lesser")
  if (x < zero)       FAILURE ("<", "lesser")
  if (y < m_one)      FAILURE ("<", "lesser")
  if (z < m_two)      FAILURE ("<", "lesser")

  /* Less than: comparisons against greater values.  */

  if (! (x < two))    FAILURE ("<", "greater")
  if (! (y < one))    FAILURE ("<", "greater")
  if (! (z < zero))   FAILURE ("<", "greater")
  if (! (z < one))    FAILURE ("<", "greater")

  /* Greater than or equal to: comparisons against equal values.  */

  if (! (x >= one))   FAILURE (">=", "equal")
  if (! (y >= zero))  FAILURE (">=", "equal")
  if (! (z >= m_one)) FAILURE (">=", "equal")

  /* Greater than or equal to: comparisons against lesser values.  */

  if (! (x >= m_one)) FAILURE (">=", "lesser")
  if (! (x >= zero))  FAILURE (">=", "lesser")
  if (! (y >= m_one)) FAILURE (">=", "lesser")
  if (! (z >= m_two)) FAILURE (">=", "lesser")

  /* Greater than or equal to: comparisons against greater values.  */

  if (x >= two)       FAILURE (">=", "greater")
  if (y >= one)       FAILURE (">=", "greater")
  if (z >= zero)      FAILURE (">=", "greater")
  if (z >= one)       FAILURE (">=", "greater")

  /* Greater than: comparisons against equal values.  */

  if (x > one)        FAILURE (">", "equal")
  if (y > zero)       FAILURE (">", "equal")
  if (z > m_one)      FAILURE (">", "equal")

  /* Greater than: comparisons against lesser values.  */

  if (! (x > m_one))  FAILURE (">", "lesser")
  if (! (x > zero))   FAILURE (">", "lesser")
  if (! (y > m_one))  FAILURE (">", "lesser")
  if (! (z > m_two))  FAILURE (">", "lesser")

  /* Greater than: comparisons against greater values.  */

  if (x > two)        FAILURE (">", "greater")
  if (y > one)        FAILURE (">", "greater")
  if (z > zero)       FAILURE (">", "greater")
  if (z > one)        FAILURE (">", "greater")

  if (failcnt)
    abort ();
}
