Pristine Ack-5.5
[Ack-5.5.git] / lang / cem / ctest / ctinit / init.c
1 /*
2  * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands.
3  * See the copyright notice in the ACK home directory, in the file "Copyright".
4  *
5  */
6
7 /* Author: E.G. Keizer */
8
9 char rcs_id[] = "$Id: init.c,v 2.5 1994/06/24 12:09:17 ceriel Exp $" ;
10
11 /* Test initialisation of a V7 C-compiler */
12 /* 1 sept 1980 */
13 #include "../local.h"
14
15 /* Integers and constant expressions */
16
17 int in1 = 4 ;
18 int in2 = MAXINT ;
19 int in3 = MININT ;
20 int in4 ;
21 int inzero ;
22
23 int ice1 = (1-2+3*4/2)%3 ;
24 int ice2 = ((((1&3)|4)^014) >> 1) <<1 ;
25 int ice3 = ( (1==2) & (3<4) ) | (4>3) | (0<=0) | -2>=17 ;
26 int ice4 = (~-1) ;
27 int ice5 = (1==1 ? 3+4 : 5+6 ) ;
28 int ice6 = (1!=1 ? 7+8 : 9+10 ) ;
29 int ina[] = { 1, 3, 5 } ;
30
31 pint() {
32         static int sint = -1 ;
33         int lint = in1+in3+sint ;
34
35         printf("Integers:\n\n") ;
36         printf("in1\t%d\nin2\t%d\nin3\t%d\nin4\t%d\ninzero\t%d\n\n",
37                 in1,in2,in3,in4,inzero ) ;
38         printf("ice1\t%d\nice2\t%d\nice3\t%d\nice4\t%d\nice5\t%d\nice6\t%d\n\n",
39                 ice1,ice2,ice3,ice4,ice5,ice6 ) ;
40         printf("ina\t%d,%d,%d\n\n",ina[0],ina[1],ina[2]) ;
41         printf("sint\t%d\nlint\t%d\n\n",sint,lint) ;
42 }
43
44 /* Characters */
45
46 char ch1 = 'a' ;
47 char ch2 ;
48 char cha1[] = "Mesg" ;
49 char cha2[] = "" ;
50 char cha3[] = "1" ;
51 char cha4[] = "12" ;
52 char cha5[] = "0123456789112345678921234567893123456789412345678951234567896123456789712345678981234567899123456789" ;
53
54 char cha6[2][3] = {
55         { 1, 2, 3 },
56         { 4, 5, 6 }
57 };
58 char *pch1 = cha2 ;
59 char *pch2 = "pch2" ;
60 char *pch3 = "ppch3" ;
61 char *pch4 = 0 ;
62
63 pch() {
64         static char stc[] = "123" ;
65         static char stc1[] = "1234" ;
66         static char *mult[] = { "ab" , "bc" , "de" } ;
67
68         printf("Characters:\n\n") ;
69
70         printf("ch1\t%c(%d)\n",ch1,ch1) ;
71         printf("ch2\t%d\n",ch2) ;
72         printf("cha1\t%s\ncha2\t%s\ncha3\t%s\ncha4\t%s\n",
73                 cha1,cha2,cha3,cha4 ) ;
74         printf("cha5\t%s\n\n",cha5) ;
75         printf("cha6\t%d, %d, %d\n\t%d, %d, %d\n",
76        cha6[0][0],cha6[0][1],cha6[0][2],cha6[1][0],cha6[1][1],cha6[1][2]);
77         printf("pch1==cha2\t%s\n",(pch1 == cha2 ? "yes" : "no" ) ) ;
78         printf("pch2\t%s\npch3\t%s\n",pch2,pch3+1) ;
79         printf("pch4==0\t%s\n\n",(pch4 != 0 ? "no" : "yes" ) ) ;
80         printf("stc\t%s\nstc1\t%s\n",stc,stc1) ;
81         printf("mult[0],mult[1],mult[2] %s, %s, %s\n",mult[0],mult[1],mult[2]);
82 }
83
84 #ifndef NOFLOAT
85 /* floats */
86
87 float fl1 = 0 ;
88 float fl2 = 2 ;
89 float fl3 = 2e-10 ;
90 float fl4 = 4.0 ;
91 float fl5 = EPSFLOAT ;
92 float fl6 = MAXFLOAT ;
93 float fl7 ;
94
95 float fla1[4][3] = {
96         { 1, 3, 5 },
97         { 2, 4, 6 },
98         { 3, 5, 7 }
99 } ;
100 float fla2[4][3] = {
101         -1,-3,-5,-2,-4,-6,-3,-5,-7
102 } ;
103 float fla3[4][3] = {
104         { 11 } , { 12 } , { 13 } , { 14 }
105 } ;
106
107 pflt() {
108         register i,j ;
109
110         printf("Floats:\n\n") ;
111
112 printf("fl1\t%.20e\nfl2\t%.20e\nfl2\t%.20e\nfl4\t%.20e\nfl5\t%.20e\nfl6\t%.20e\nfl7\t%.20e\n",
113         fl1,fl2,fl2,fl4,fl5,fl6,fl7 ) ;
114
115         printf("    fla1                    fla2                    fla3\n") ;
116         for ( i=0 ; i<4 ; i++ ) {
117                 for ( j=0 ; j<3 ; j++ ) {
118                         printf("    %20e    %20e    %20e\n",
119                                 fla1[i][j],fla2[i][j],fla3[i][j]) ;
120                 }
121         }
122
123         printf("\n") ;
124 }
125
126 /* doubles */
127
128 double dbl1 = 0 ;
129 double dbl2 = 2 ;
130 double dbl3 = 2e-10 ;
131 double dbl4 = 4.0 ;
132 double dbl5 = EPSDOUBLE ;
133 double dbl6 = MAXDOUBLE ;
134 double dbl7 ;
135
136 double dbla1[4][3] = {
137         { 1, 3, 5 },
138         { 2, 4, 6 },
139         { 3, 5, 7 }
140 } ;
141 double dbla2[4][3] = {
142         -1,-3,-5,-2,-4,-6,-3,-5,-7
143 } ;
144 double dbla3[4][3] = {
145         { 11 } , { 12 } , { 13 } , { 14 }
146 } ;
147
148 pdbl() {
149         register i,j ;
150
151         printf("Doubles:\n\n") ;
152
153 printf("dbl1\t%.20e\ndbl2\t%.20e\ndbl2\t%.20e\ndbl4\t%.20e\ndbl5\t%.20e\ndbl6\t%.20e\ndbl7\t%.20e\n",
154         dbl1,dbl2,dbl2,dbl4,dbl5,dbl6,dbl7 ) ;
155
156         printf("    dbla1                    dbla2                    dbla3\n") ;
157         for ( i=0 ; i<4 ; i++ ) {
158                 for ( j=0 ; j<3 ; j++ ) {
159                         printf("    %20e    %20e    %20e\n",
160                                 dbla1[i][j],dbla2[i][j],dbla3[i][j]) ;
161                 }
162         }
163
164         printf("\n") ;
165 }
166 #endif
167
168 /* long */
169 long lo1 = 14L ;
170 long lo2 = -17 ;
171 long lo3 = MAXLONG ;
172 long lo4 = MINLONG ;
173 long lo5 ;
174 long lo6 = ( 0==1 ? -1L : 1L ) ;
175
176 plong() {
177         printf("long\n\n") ;
178
179         printf("lo1\t%ld\nlo2\t%ld\nlo3\t%ld\nlo4\t%ld\nlo5\t%ld\nlo6\t%ld\n\n",
180                 lo1,lo2,lo3,lo4,lo5,lo6 ) ;
181 }
182
183 /* structures and bit fields */
184
185 struct s1 {
186         int     s_i ;
187         char    s_ca[3] ;
188         long    s_l ;
189 #ifndef NOFLOAT
190         double  s_f ;
191 #endif
192         struct  s1 *s_s1 ;
193 } ;
194 struct s1 st1 ;
195 struct s1 sta[3] = {
196 #ifndef NOFLOAT
197         1 , { 'a' , 'b' , 'c' } , 10 , -10 , &sta[0] ,
198 #else
199         1 , { 'a' , 'b' , 'c' } , 10 , &sta[0] ,
200 #endif
201         { 2 } ,
202         3
203 } ;
204 struct s2 {
205         int s2_1 :1 ;
206         int s2_2 :2 ;
207         int s2_3 :4 ;
208         int s2_4 :7 ;
209         int s2_5 :2 ;
210         int s2_6 :11 ;
211         int s2_7 :6 ;
212 } stb = {
213         1,2,3,4,3,6,7
214 } ;
215
216 pstruct() {
217         printf("structures\n\n") ;
218
219         printf("\t st1          sta[0..2]\n") ;
220
221         printf("s_i\t%15d%15d%15d%15d\n",
222                 st1.s_i,sta[0].s_i,sta[1].s_i,sta[2].s_i) ;
223         printf("s_ca[0]\t%15d%15d%15d%15d\n",
224                 st1.s_ca[0],sta[0].s_ca[0],sta[1].s_ca[0],sta[2].s_ca[0]) ;
225         printf("s_ca[1]\t%15d%15d%15d%15d\n",
226                 st1.s_ca[1],sta[0].s_ca[1],sta[1].s_ca[1],sta[2].s_ca[1]) ;
227         printf("s_ca[2]\t%15d%15d%15d%15d\n",
228                 st1.s_ca[2],sta[0].s_ca[2],sta[1].s_ca[2],sta[2].s_ca[2]) ;
229         printf("s_l\t%15ld%15ld%15ld%15ld\n",
230                 st1.s_l,sta[0].s_l,sta[1].s_l,sta[2].s_l) ;
231 #ifndef NOFLOAT
232         printf("s_f\t  %13e  %13e  %13e  %13e\n\n",
233                 st1.s_f,sta[0].s_f,sta[1].s_f,sta[2].s_f) ;
234 #endif
235         printf("(sta[0].s_s1)->s_i = %d\n",(sta[0].s_s1)->s_i) ;
236
237         printf("\nbit fields:\n\n") ;
238         printf("sizeof stb %d\n",sizeof stb) ;
239         printf("stb\t%d %d %d %d %d %d %d\n\n",
240                 stb.s2_1,stb.s2_2,stb.s2_3,stb.s2_4,stb.s2_5,stb.s2_6,stb.s2_7);
241 }
242
243 main() {
244         pint() ;
245         pch() ;
246 #ifndef NOFLOAT
247         pflt() ;
248         pdbl() ;
249 #endif
250         plong() ;
251         pstruct() ;
252         return(0) ;
253 }