ORCA-C/Tests/Spec.Conform/SPC4.3.0.1.CC

94 lines
3.3 KiB
C++

/*****************************************************************************/
/* */
/* Special Conformance Test 4.3.0.1: Ensure static variables and functions */
/* are not passed to the linker, and that */
/* extern variables and functions are */
/* passed to the linker */
/* */
/* Other files needed: spc4301.h - header file for separate compilation */
/* spc4301.1.cc - separately compiled file */
/* spc4301.2.cc - separately compiled file */
/* spc4301.exec - controls compilation and linking */
/* {workDisk}/spc4301.symt - linker's global symbol */
/* table for spc4.3.0.1.cc */
/* */
/* Special instructions: Use the EXEC file spc4301.exec to separately */
/* compile and link the three files. A symbol table */
/* is produced in the output file {workDisk}/ */
/* spc4301.symt. The tester should use the linker's */
/* symbol table to verify that only the extern */
/* functions and variables are in the global symbol */
/* table. In addition, the EXEC file will try to */
/* execute the program. If all is well, a Pass/Fail */
/* message will be written to standard out. */
/* */
/* The global functions are: ChangeChar, L0 */
/* The global variables are: real, i, longNum */
/* */
/*****************************************************************************/
#include <math.h>
#include <string.h>
#include "spc4301.h"
int printf(const char *, ...);
int main (void)
{
int count = 0;
static extended E1 (double x, float y);
static char ch;
char *chPtr;
extern int i;
extern long L0 (int *j);
count++;
i = 0;
while (chArray [i] != '\0')
{
ChangeChar (&chArray [i]);
++i;
}
chPtr = chArray;
if ((strcmp (chPtr, "bcde")) != 0)
goto Fail;
count++;
real = E1 (2.1, 1.5);
if ( (fabs (real - 3.15)) > 0.1 )
goto Fail;
count++;
ch = F1 (2.3, 'a');
if (ch != 'c')
goto Fail;
count++;
longNum = L0 ((int *) chArray);
if (longNum != 25442)
goto Fail;
printf ("Passed Special Conformance Test spc4.3.0.1\n");
return 0;
Fail:
printf ("Failed Special Conformance Test spc4.3.0.1: count = %d\n", count);
return 0;
}
/*****************************************************************************/
static extended E1 (double x, float y)
{
return (x * y);
}
/*****************************************************************************/
static int F1 (float a, char ch)
{
return ((long) a) + ((long) ch);
}