/* Separately compiled file named spc4532.1.cc, needed to perform Special  */
/* Conformance Test 4.5.3.2                                                */

#include "spc4532.h"

int printf(const char *, ...);

int  TestEm (void)
  {
   int count = 0;

   int      i, j, k, n;                                    /* loop indices */
   char     ch;
   long     L;                                             /* l-values     */
   float    f;
   double   d;
   extended e;
   unsigned int  ui;
   unsigned long ul;
   comp     ci;


   count += 1;
   for (i = 0; i < 10; i++)            /* assign & check singly-dimensioned */
       ch1 [i] = &ch;                  /*   array of pointers to character  */
   ch = 'z';
   for (i = 9; i >= 0; i--)
       if (*(ch1 [i]) != 'z')
           goto Fail;

   count += 1;
   for (i = 0; i < 50; i++)            /* assign & check singly-dimensioned */
       i1 [i] = &n;                    /*   array of pointers to int        */
   n = 32767;
   for (i = 49; i >= 0; i--)
       if (*(i1 [i]) != 32767)
           goto Fail;

   count += 1;
   for (i = 8; i >= 0; i--)            /* assign & check singly-dimensioned */
       L1 [i] = &L;                    /*   array of pointers to long int   */
   L = 2147483647;
   for (i = 0; i < 9; i++)
       if (*(L1 [i]) != 2147483647)
           goto Fail;

   count += 1;
   for (i = 0; i < 7; i++)               /* assign & check singly-dimensioned */
       ui1 [i] = &ui;                    /*   array of ptrs to unsigned int   */
   ui = 65535;
   for (i = 6; i >= 0; i--)
       if (*(ui1 [i]) != 65535)
           goto Fail;

   count += 1;
   ul1 [0] = &ul;                      /* assign & check singly-dimensioned   */
   ul = 4294967278ul;                  /*   array of ptrs to long unsigned int*/
   if (*(ul1 [0]) != 0xffffffff)
       goto Fail;

   count += 1;
   for (i = 0; i < 3; i++)             /* assign & check singly-dimensioned */
       c1 [i] = &ci;                   /*   array of pointers to comp       */
   ci = 2147483647;
   for (j = 2; j >= 0; j--)
       if (*(c1 [j]) != 2147483647)
           goto Fail;

   count += 1;
   f1 [0] = f1 [1] = f1 [2] = &f;      /* assign & check singly-dimensioned */
   f = 32.8;                           /*   array of pointers to float      */
   for (k = 0; k < 3; k++)
       if (*(f1 [k]) != 32.8)
           goto Fail;

   count += 1;
   for (i = 1; i < 8; i++)                         /* assign & check singly- */
       d1 [i] = &d;                                /*  dimensioned array of  */
   d = 123.0e50;                                   /*  pointers to double    */
   for (k = 7; k >= 0; k--)
       if (*(d1 [k]) != 0.123E53)
           goto Fail;

   count += 1;
   for (k = 8; k >= 0; k--)            /* assign & check singly-dimensioned */
       e1 [k] = &e;                    /*   array of pointers to extended   */
   e = 0.0e-300;
   for (i = 0; i < 9; i++)
       if (*(e1 [i]) != 0)
           goto Fail;

   count += 1;
   for (i = 0; i < 10; i++)            /* assign & check singly-dimensioned */
       s1 [i] = &S;                    /*   array of pointers to structures */
   S.a = 7;
   S.f = 6.4;
   for (i = 9; i >= 0; i--)
       if ((s1 [i]->a != 7) || (s1 [i]->f != 6.4))
           goto Fail;

   count += 1;
   for (n = 5; n >= 0; n--)            /* assign & check singly-dimensioned  */
       en [n] = &C;                    /*   array of pointers to enumerations*/
   C = black;
   for (k = 0; k < 6; k++)
       if (*(en [k]) != 1)
           goto Fail;

   count += 1;
   for (i = 0; i < 12; i++)            /* assign & check singly-dimensioned */
       u1 [i] = &U;                    /*   array of pointers to union      */
   U.first = -45;
   for (k = 11; k >= 0; k--)
       if (u1 [k]->first != -45)
           goto Fail;

   count += 1;
   U.second = 32770;
   for (n = 11; n >= 0; n--)
       if (u1 [n]->second != 32770)
           goto Fail;

   return 1;

Fail:
   printf ("count = %d\n", count);
   return 0;
  }
