ORCA-C/Tests/Conformance/C4.5.3.3.CC
Stephen Heumann da6898214f Fix several tests affected by our new handling of floating-point constants.
These had implicitly assumed that floating-point constants had only double precision, rather than extended.
2021-09-03 18:54:01 -05:00

130 lines
4.3 KiB
C++

/* Conformance Test 4.5.3.3: Verfication of local array declarations: arrays */
/* of pointers */
#include <math.h>
main ()
{
int i, j, k, n; /* loop indices */
long L; /* l-values */
float f;
double d;
extended e;
comp cmp;
unsigned int ui;
unsigned long ul;
char ch;
int *i1 [50]; /* all basic types */
long *L1 [9];
comp *c1 [3];
char *ch1 [10];
float *f1 [3];
double *d1 [8];
extended *e1 [9];
unsigned int ui3 [4] [5] [1], *ui1 [7];
unsigned long ul2 [5] [3], *ul1 [1];
/* conglomerate types */
struct s { int a;
float f; } *s1 [10], S;
enum colors { red, black, green } *en [6], C;
union longOrShort { int first;
long second; } *u1 [12], U;
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;
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;
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;
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;
ul1 [0] = &ul; /* assign & check singly-dimensioned */
ul = 4294967295ul; /* array of ptrs to long unsigned int*/
if (*(ul1 [0]) != 0xffffffff)
goto Fail;
for (i = 0; i < 3; i++) /* assign & check singly-dimensioned */
c1 [i] = &cmp; /* array of pointers to comp */
cmp = 4;
for (j = 2; j >= 0; j--)
if (*(c1 [j]) != 4)
goto Fail;
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 (fabs(*(f1 [k]) - 32.8) > 0.00001)
goto Fail;
for (i = 0; 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 (fabs(*(d1 [k]) - (double)0.123E53) > 0.00001)
goto Fail;
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;
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) || (fabs(s1 [i]->f - 6.4) > 0.00001))
goto Fail;
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;
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;
U.second = 32770;
for (n = 11; n >= 0; n--)
if (u1 [n]->second != 32770)
goto Fail;
printf ("Passed Conformance Test 4.5.3.3\n");
return;
Fail:
printf ("Failed Conformance Test 4.5.3.3\n");
}