mirror of
https://github.com/byteworksinc/ORCA-C.git
synced 2024-11-17 05:06:10 +00:00
91d33b586d
The main changes made to most tests are: *Declarations always include explicit types, not relying on implicit int. The declaration of main in most test programs is changed to be "int main (void) {...}", adding an explicit return type and a prototype. (There are still some non-prototyped functions, though.) *Functions are always declared before use, either by including a header or by providing a declaration for the specific function. The latter approach is usually used for printf, to avoid requiring ORCA/C to process stdio.h when compiling every test case (which might make test runs noticeably slower). *Make all return statements in non-void functions (e.g. main) return a value. *Avoid some instances of undefined behavior and type errors in printf and scanf calls. Several miscellaneous bugs are also fixed. There are still a couple test cases that intentionally rely on the C89 behavior, to ensure it still works.
54 lines
1.2 KiB
C++
54 lines
1.2 KiB
C++
/* Conformance Test 3.3.2.1: Verification of macros with parameters */
|
|
|
|
int printf(const char *, ...);
|
|
|
|
#define subtract(x,y) x - y
|
|
#define noParmsPass() printf ("Passed Conformance Test 3.3.2.1\n");
|
|
#define noParmsFail() printf ("Failed Conformance Test 3.3.2.1\n");
|
|
#define many_parms(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z) \
|
|
a+b+c+d+e+f+g+h+i+j+k+l+m+n+o+p+q+r+s+t+u+v+w+x+y+z
|
|
#define real float
|
|
|
|
int main (void)
|
|
{
|
|
double f1(), g1();
|
|
int i;
|
|
long j;
|
|
real x, y;
|
|
|
|
i = subtract (3, 5);
|
|
if (i != -2)
|
|
goto Fail;
|
|
|
|
x = 3.5e4;
|
|
y = 2.8e0;
|
|
j = subtract (((long) f1(x)), ((int) g1(y)));
|
|
if (j != 69995)
|
|
goto Fail;
|
|
|
|
i = many_parms (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
|
|
17, 18, 19, 20, 21, 22, 23, 24, 25, 26);
|
|
if (i != 351)
|
|
goto Fail;
|
|
|
|
noParmsPass ()
|
|
return 0;
|
|
|
|
Fail:
|
|
noParmsFail ()
|
|
}
|
|
|
|
/**************************************************************************/
|
|
double f1 ( y )
|
|
real y;
|
|
{
|
|
return (y * 2.0);
|
|
}
|
|
|
|
/**************************************************************************/
|
|
double g1 ( x )
|
|
real x;
|
|
{
|
|
return (x / 0.5e+0);
|
|
}
|