Initial revision

This commit is contained in:
keie 1985-02-06 21:06:03 +00:00
parent 20986fd6ea
commit d7abe0e8b6
4 changed files with 183 additions and 0 deletions

43
lang/cem/ctest/READ_ME Normal file
View file

@ -0,0 +1,43 @@
The test are subdivided into several directories.
Only the directory ctgen contains more than one program, but it
is an exception anyhow.
All other directories contain one program, say test.c.
It is translated with a file test.cem as result.
This test is run, producing output on test.cem.r.
The 'expected' output is distributed on files named test.cem.g.
The run files in these directories use the makefile in this
directory to create the ...cem, ....cem.r files.
After creating the ....cem.r files a diff is run between the .r
and .g files. The output of these diffs is preceded by the line
comparing ....cem
Not all differences are caused by errors.
Part of the output in the subdirectory ctmargt is a printout
of the current environment variables. These will differ per
user.
The expected output in the directory ctconv is for a compiler
that considers char's as unsigned quantaties.
The expected output in all directories is generated using
16-bit arithmetic, using 32-bit arithmetic will cause several
discrepancies to occur with the expected output in the ...cem.g
files.
If any other differences with the expected output occur, the error
causing the diffence has to be rooted out by a person with some
experience with the kit. Most errors will be caused by the
backend programs, so looking at the assembly code generated by
such a backend from EM code is a good strategy when looking for
a cause.
The programs in the directory ctgen are structured somewhat
differently. This directory contains a file 'OPS' with a
prototype program. This prototype program performs all C
arithmetic operations on a few operands. The operands are
X, Y, S, Z1, Z2. X, Y and S can be arbitrary expressions,
but S is used as a shift count and must be less then 16 (32).
Z1 and Z2 must be lvalue's.
The name ISTART indicates global declarations and LSTART
indicates local declarations.
The files ....sed (e.g. test.sed) are used
to produce legal C programs from the OPS file, in which
the result of all expressions is printed.
The programs are run in the way described above.

View file

@ -0,0 +1,114 @@
/*
* (c) copyright 1983 by the Vrije Universiteit, Amsterdam, The Netherlands.
*
* This product is part of the Amsterdam Compiler Kit.
*
* Permission to use, sell, duplicate or disclose this software must be
* obtained in writing. Requests for such permissions may be sent to
*
* Dr. Andrew S. Tanenbaum
* Wiskundig Seminarium
* Vrije Universiteit
* Postbox 7161
* 1007 MC Amsterdam
* The Netherlands
*
*/
/* Author: E.G. Keizer */
main() {
t1() ;
return 0 ;
}
t1() {
char c ; int i ; long l ; unsigned u ; float f ;
/* test conversions */
/* first some conversions on constants */
printf("(int) '\\377' = %d\n",(int) '\377') ;
printf("(long) -1 = %ld\n",(long) -1 ) ;
printf("(float) 12 = %f\n",(float) 12 ) ;
printf("(int) 3.14 = %d\n",(int) 3.14 ) ;
printf("(int) 32767L = %d\n",(int) 32767L ) ;
printf("(int) -32768L = %d\n",(int) -32768L ) ;
printf("(char) 128L = %d\n",(char) 128L) ;
printf("(char) 0377 = %d\n",(char) 0377 ) ;
printf("(char) -1 = %d\n",(char) -1 ) ;
printf("(char) 10000 = %d\n",(char) 10000 ) ;
/* conversions from characters */
printf("From character\n") ;
c = 127 ;
i=c ;
l=c ;
u=c ;
f=c ;
printf("\tchar %5d, int %6d, unsigned %6o, long %11ld, float %f\n",c,i,u,l,f) ;
c = -1 ;
i=c ;
l=c ;
u=c ;
f=c ;
printf("\tchar %5d, int %6d, unsigned %6o, long %11ld, float %f\n",c,i,u,l,f) ;
c = 0377 ;
i=c ;
l=c ;
u=c ;
f=c ;
printf("\tchar %5d, int %6d, unsigned %6o, long %11ld, float %f\n",c,i,u,l,f) ;
/* from integer */
printf("From integer\n") ;
i= -64 ;
c=i ;
l=i ;
u=i ;
f=i ;
printf("\tchar %5d, int %6d, unsigned %6o, long %11ld, float %f\n",c,i,u,l,f) ;
/* from long */
printf("From long\n") ;
l = -3 ;
c = l ;
i = l ;
u = l ;
f = l ;
printf("\tchar %5d, int %6d, unsigned %6o, long %11ld, float %f\n",c,i,u,l,f) ;
printf("From float\n") ;
f = 121.5 ;
c = f ;
i = f ;
u = f ;
l = f ;
printf("\tchar %5d, int %6d, unsigned %6o, long %11ld, float %f\n",c,i,u,l,f) ;
f = 1e-4 ;
c = f ;
i = f ;
u = f ;
l = f ;
printf("\tchar %5d, int %6d, unsigned %6o, long %11ld, float %f\n",c,i,u,l,f) ;
f = 3276.6e1 ;
i = f ;
u = f ;
l = f ;
printf("\tint %6d, unsigned %6o, long %11ld, float %f\n",i,u,l,f) ;
f = 1223432e3 ;
l = f ;
printf("\tlong %11ld, float %f\n",l,f) ;
/* some special cases */
{
int a[4] ;
l = 3 ; a[3]= -17 ;
printf("a[l] (l==%ld) %d\n",l,a[l]) ;
printf("a[3l] %d\n",a[3l] ) ;
}
return 0 ;
}

View file

@ -0,0 +1,25 @@
(int) '\377' = 255
(long) -1 = -1
(float) 12 = 12.000000
(int) 3.14 = 3
(int) 32767L = 32767
(int) -32768L = -32768
(char) 128L = 128
(char) 0377 = 255
(char) -1 = 255
(char) 10000 = 16
From character
char 127, int 127, unsigned 177, long 127, float 127.000000
char 255, int 255, unsigned 377, long 255, float 255.000000
char 255, int 255, unsigned 377, long 255, float 255.000000
From integer
char 192, int -64, unsigned 177700, long -64, float -64.000000
From long
char 253, int -3, unsigned 177775, long -3, float -3.000000
From float
char 121, int 121, unsigned 171, long 121, float 121.500000
char 0, int 0, unsigned 0, long 0, float 0.000100
int 32766, unsigned 77776, long 32766, float 32766.000000
long 1223432064, float 1223432064.000000
a[l] (l==3) -17
a[3l] -17

View file

@ -0,0 +1 @@
make "P=conv" -fsk ../makefile ${1-gen}