source: tests/manipulatorsOutput3.cfa@ be73f30

ADT arm-eh ast-experimental enum forall-pointer-decay jacob/cs343-translation new-ast-unique-expr pthread-emulation qualifiedEnum
Last change on this file since be73f30 was 61ce214, checked in by Peter A. Buhr <pabuhr@…>, 5 years ago

extend testing for int128

  • Property mode set to 100644
File size: 11.6 KB
Line 
1#include <fstream.hfa>
2
3int main() {
4 // int128 printing
5 int128 x = 0xffff, y = 0x2;
6
7 x <<= 64;
8 x += 0xffff;
9 y <<= 64;
10 y += 0123;
11 y |= 0x8000000000000000;
12 x = -x;
13 sout | x;
14 sout | sign(x);
15 x = -x;
16 sout | sign(x);
17 sout | nl;
18
19 int128 divisor = 0x4b3b4ca85a86c47a;
20 divisor <<= 16;
21 divisor += 0x98a224000000000;
22
23 // base 2
24 sout | "base 2";
25 sout | bin(x);
26 sout | upcase(bin(x));
27 sout | nobase(bin(x));
28 sout | wd( 95, upcase(bin(x)) );
29 sout | wd( 95,90, upcase(bin(x)) );
30 sout | wd( 25,30, upcase(hex(x)) );
31 sout | nl;
32
33 sout | bin(divisor);
34 sout | upcase(bin(divisor));
35 sout | wd(38, upcase(bin(divisor)));
36 sout | wd(40, upcase(bin(divisor)));
37 sout | wd(40, 38, upcase(bin(divisor)));
38 sout | wd(40, 30, upcase(bin(divisor)));
39 sout | pad0(sign(wd(40, 38, upcase(bin(divisor)))));
40 sout | nl;
41
42 // oct
43 sout | "base 8";
44 printf( "%#.10o\n", 0123 );
45 sout | wd( 1,10, oct(0123) );
46 sout | oct(x);
47 sout | nobase(oct(x));
48 sout | wd( 45, oct(0123) );
49 sout | wd( 45,40, oct(0123) );
50 sout | wd( 40,45, oct(0123) );
51 sout | wd( 45, oct(x) );
52 sout | wd( 45,40, oct(x) );
53 sout | wd( 40,45, oct(x) );
54
55 sout | left(wd( 45, oct(0123) )) | 'X';
56 sout | left(wd( 45, oct(x) )) | 'X';
57 sout | left(wd( 45, oct(y) )) | 'X';
58 sout | left(wd( 45,40, oct(0123) )) | 'X';
59 sout | left(wd( 45,40, oct(x) )) | 'X';
60 sout | left(wd( 45,40, oct(y) )) | 'X';
61 sout | left(wd( 40,45, oct(0123) )) | 'X';
62 sout | left(wd( 40,45, oct(x) )) | 'X';
63 sout | left(wd( 40,45, oct(y) )) | 'X';
64 printf( "%#-1.10oX\n", 0123 );
65 sout | left(wd( 1,10, oct(0123) )) | 'X';
66 printf( "%#-40.10oX\n", 0123 );
67 sout | left(wd( 40,10, oct(0123) )) | 'X';
68 sout | left(wd( 40,10, oct(x) )) | 'X';
69 sout | left(wd( 40,10, oct(y) )) | 'X';
70 sout | left(wd( 10,40, oct(0123) )) | 'X';
71 sout | left(wd( 10,40, oct(x) )) | 'X';
72 sout | left(wd( 10,40, oct(y) )) | 'X';
73
74 y = 01234567;
75 sout | left(wd( 45, 49, oct(y) )) | 'X';
76 y = -y;
77 sout | wd(0, oct(y)) | 'Y';
78 sout | left(wd(0, oct(y))) | 'Y';
79 sout | nl;
80
81 sout | upcase(oct(divisor));
82 sout | wd(38, upcase(oct(divisor)));
83 sout | wd(40, upcase(oct(divisor)));
84 sout | wd(40, 38, upcase(oct(divisor)));
85 sout | wd(40, 30, upcase(oct(divisor)));
86 sout | pad0(sign(wd(40, 38, upcase(oct(divisor)))));
87 sout | nl;
88
89 // decimal
90 sout | "base 10";
91 sout | divisor;
92 sout | wd(2, divisor);
93 sout | wd(3, divisor);
94 sout | wd(10, divisor);
95 sout | wd(24, divisor);
96 sout | wd(38, divisor);
97 sout | wd(39, divisor);
98 sout | wd(40, divisor);
99
100 sout | wd(40, 30, divisor);
101 sout | wd(40, 38, divisor);
102 sout | wd(40, 40, divisor);
103 sout | pad0(wd(40, divisor));
104 sout | pad0(sign(wd(40,divisor)));
105 sout | nl;
106
107 // hex
108 sout | "base 16";
109
110 sout | hex(x);
111 sout | upcase(hex(x));
112 sout | nobase(hex(x));
113 sout | wd( 45, upcase(hex(x)) );
114 sout | wd( 45,40, upcase(hex(x)) );
115 sout | wd( 45,49, upcase(hex(x)) );
116 sout | left(wd( 45, upcase(hex(x)) )) | 'X';
117 sout | left(wd( 45,40, upcase(hex(x)) )) | 'X';
118 sout | left(wd( 45,49, upcase(hex(x)) )) | 'X';
119 sout | nl;
120
121 sout | upcase(hex(divisor));
122 sout | wd(38, upcase(hex(divisor)));
123 sout | wd(40, upcase(hex(divisor)));
124 sout | wd(40, 38, upcase(hex(divisor)));
125 sout | wd(40, 30, upcase(hex(divisor)));
126 sout | pad0(sign(wd(40, 38, upcase(hex(divisor)))));
127 sout | nl;
128
129 // extras
130 sout | "extras";
131 sout | bin(divisor);
132 sout | upcase(bin(divisor));
133 sout | oct(divisor);
134 sout | hex(divisor);
135 sout | upcase(hex(divisor));
136 sout | nobase(bin(divisor)) | nobase(oct(divisor)) | nobase(hex(divisor));
137 sout | sign(divisor);
138 sout | -divisor;
139 sout | sign(-divisor);
140 sout | wd(2, divisor);
141 sout | wd(3,10,divisor);
142 sout | left(wd(40,divisor)) | 'X';
143 sout | left(sign(wd(40, divisor))) | 'X';
144 sout | left(sign(wd(0,40, divisor))) | 'X';
145 printf( "%-+1.40dX\n", 123456789 );
146
147 int128 i128;
148 unsigned int128 ui128;
149 i128 = -1000;
150 for ( 10 ) {
151 sout | left( sign( wd( 2, i128 ) ) ) | left( wd( 2, hex( i128 ) ) ) | left( wd( 2, oct( i128 ) ) );
152 sout | left( wd( 2, bin( i128 ) ) );
153 i128 += 1;
154 }
155 sout | nl;
156 sout | nl;
157
158 ui128 = 0x7fffffffffffffff;
159 ui128 <<= 64;
160 ui128 += 0xffffffffffffffff;
161 sout | left( wd( 160, i128 ) );
162 sout | left( sign( wd( 0, i128 ) ) );
163 sout | left( wd( 0, hex( i128 ) ) );
164 sout | left( wd( 0, oct( i128 ) ) );
165 sout | left( wd( 0, bin( i128 ) ) );
166 sout | left( sign( wd( 1, i128 ) ) );
167 sout | left( wd( 1, hex( i128 ) ) );
168 sout | left( wd( 1, oct( i128 ) ) );
169 sout | left( wd( 1, bin( i128 ) ) );
170 sout | left( sign( wd( 32, i128 ) ) );
171 sout | left( wd( 32, hex( i128 ) ) );
172 sout | left( wd( 32, oct( i128 ) ) );
173 sout | left( wd( 32, bin( i128 ) ) );
174 sout | left( sign( wd( 160, i128 ) ) );
175 sout | left( wd( 160, hex( i128 ) ) );
176 sout | left( wd( 160, oct( i128 ) ) );
177 sout | left( wd( 160, bin( i128 ) ) );
178 sout | left( sign( wd( 160, i128 ) ) );
179 sout | left( wd( 160, upcase(hex( i128 )) ) );
180 sout | left( wd( 160, upcase(oct( i128 ) )) );
181 sout | left( wd( 160, upcase(bin( i128 )) ) );
182
183 x = 1234;
184 x <<= 64;
185 x += 5678;
186 sout | x | 'X';
187 sout | wd(45, 20, oct(x)) | 'X';
188 sout | left(wd(45, 20, oct(x))) | 'X';
189 sout | wd(45, 21, oct(x)) | 'X';
190 sout | left(wd(45, 21, oct(x))) | 'X';
191 sout | wd(45, 22, oct(x)) | 'X';
192 sout | left(wd(45, 22, oct(x))) | 'X';
193 sout | wd(45, 36, oct(x)) | 'X';
194 sout | left(wd(45, 36, oct(x))) | 'X';
195 sout | wd(45, 46, oct(x)) | 'X';
196 sout | left(wd(45, 46, oct(x))) | 'X';
197 sout | left(wd(45, 20, oct(x))) | 'X';
198 sout | left(wd(45, 22, oct(x))) | 'X';
199 sout | left(wd(45, 24, oct(x))) | 'X';
200 sout | left(wd(45, 26, oct(x))) | 'X';
201 sout | left(wd(45, 28, oct(x))) | 'X';
202
203 y = -x;
204 sout | oct(y) | 'Y';
205 sout | left(wd(0, oct(y))) | 'Y';
206 sout | left(wd(20, oct(y))) | 'Y';
207 sout | left(wd(26, oct(y))) | 'Y';
208 sout | left(wd(40, oct(y))) | 'Y';
209 sout | left(wd(41, oct(y))) | 'Y';
210 sout | left(wd(45, oct(y))) | 'Y';
211 sout | left(wd(45, 49, oct(y))) | 'Y';
212 sout | left(wd(45, 4, oct(y))) | 'Y';
213 sout | left(wd( 45, oct(0123) )) | 'X';
214 sout | left(wd( 45, oct(x) )) | 'X';
215 sout | left(wd( 45,40, oct(0123) )) | 'X';
216 sout | left(wd( 45,40, oct(x) )) | 'X';
217 sout | left(wd( 40,45, oct(0123) )) | 'X';
218 sout | left(wd( 40,45, oct(x) )) | 'X';
219 sout | left(wd( 40,10, oct(0123) )) | 'X';
220 sout | left(wd( 40,10, oct(x) )) | 'X';
221 sout | left(wd( 40,10, oct(y) )) | 'X';
222 sout | left(wd( 10,40, oct(0123) )) | 'X';
223 sout | left(wd( 10,40, oct(x) )) | 'X';
224 sout | left(wd( 10,40, oct(y) )) | 'X';
225
226 x = 0xffff, y = 0x2;
227 int128 z = 0x_ffff_ffff_ffff_ffff;
228 x <<= 64;
229 x += 0xffff;
230 y <<= 64;
231 y += 0123;
232 y |= 0x8000000000000000;
233
234 for ( int128 i = 0; i < 8; i += 1 ) {
235 sout | nobase(oct(z + 0x8000000000000000 * i));
236 } // for
237
238 sout | bin(x);
239 sout | upcase(bin(x));
240 sout | nobase(bin(x));
241
242 sout | wd( 95, upcase(bin(x)) );
243 sout | wd( 95,90, upcase(bin(x)) );
244 sout | wd( 90,95, upcase(bin(x)) );
245
246 sout | left(bin(x));
247 sout | left(upcase(bin(x)));
248 sout | left(nobase(bin(x)));
249
250 sout | left(wd( 95, upcase(bin(x)) ));
251 sout | left(wd( 95,90, upcase(bin(x)) ));
252 sout | left(wd( 95,81, upcase(bin(x)) ));
253
254 sout | left(wd( 95,80, upcase(bin(x)) ));
255 sout | left(wd( 95,79, upcase(bin(x)) ));
256 sout | left(wd( 95,90, upcase(bin(0xffff)) ));
257
258 sout | left(wd( 68,64, upcase(bin(0xffff)) ));
259 sout | left(wd( 90,95, upcase(bin(x)) ));
260
261 printf( "%#30.25X\n", 0xffff );
262 sout | wd( 30,25, upcase(hex(0xffff)) );
263 printf( "%#25.30X\n", 0xffff );
264 sout | wd( 25,30, upcase(hex(0xffff)) );
265
266 sout | oct(y);
267 sout | wd( 45, oct(y) );
268 sout | left(wd( 45, oct(y) )) | 'X';
269
270 sout | left(wd( 40,10, oct(0123) )) | 'X';
271 sout | left(wd( 40,10, oct(x) )) | 'X';
272 sout | left(wd( 40,10, oct(y) )) | 'X';
273 sout | left(wd( 10,40, oct(0123) )) | 'X';
274 sout | left(wd( 10,40, oct(x) )) | 'X';
275 sout | left(wd( 10,40, oct(y) )) | 'X';
276
277 i128 = -10;
278 for ( 25 ) {
279 sout | left( sign( wd( 20, i128 ) ) ) | left( wd( 20, hex( i128 ) ) ) | left( wd( 20, oct( i128 ) ) );
280 sout | left( wd( 20, bin( i128 ) ) );
281 i128 += 1;
282 } // for
283 sout | nl;
284
285 i128 = 0x7fffffffffffffff;
286 i128 <<= 64;
287 i128 += 0xfffffffffffffffa;
288
289// for ( 20 ) {
290 volatile int stop = 20; // gcc compiler bug
291 for ( int i = 0; i < stop; i += 1 ) {
292 sout | i128;
293 sout | left( sign( wd( 45, i128 ) ) ) | left( wd( 45, hex( i128 ) ) ) | left( wd( 45, oct( i128 ) ) );
294 sout | left( wd( 45, bin( i128 ) ) );
295 i128 += 1;
296 } // for
297 sout | nl;
298
299 ui128 = 0x7fffffffffffffff;
300 ui128 <<= 64;
301 ui128 += 0xfffffffffffffffa;
302
303 for ( 20 ) {
304 sout | ui128;
305 ui128 += 1;
306 }
307 sout | nl;
308
309 ui128 = 0xffffffffffffffff;
310 ui128 <<= 64;
311 ui128 += 0xfffffffffffffffa;
312
313 for ( 20 ) {
314 sout | ui128;
315 ui128 += 1;
316 }
317
318
319 // int128 constants (and printing)
320 int128 v = 0xffff_ffffffff_ffffffff_L128 + 0xffffffff_ffffffff_ffffffff_ffffffff_L128;
321 sout | hex(v);
322 v = 0xffff_ffffffff_ffffffff_L128 + 0xffffffff_ffffffff_ffffffff_ffffffff_L128;
323 sout | hex(v);
324 sout | nl;
325
326 sout | "binary";
327 sout | bin(v);
328 sout | bin(0b_11111111111111111111111111111111_L128);
329 sout | bin(0b_11111111111111111111111111111111_11111111111111111111111111111111_L128);
330 sout | bin(0b_11111111111111111111111111111111_11111111111111111111111111111111_11111111111111111111111111111111_L128);
331 sout | bin(0b_11111111111111111111111111111111_11111111111111111111111111111111_11111111111111111111111111111111_11111111111111111111111111111111_L128);
332 sout | hex(0b_10100010001101000101011001111000_L128);
333 sout | hex(0b_10100010001101000101011001111000_10100111011001010100001100100001_L128);
334 sout | hex(0b_10100010001101000101011001111000_10100111011001010100001100100001_11000010001101000101011001111000_L128);
335 sout | hex(0b_10100010001101000101011001111000_10100111011001010100001100100001_11000010001101000101011001111000_11010111010101010100001100100001_L128);
336 sout | nl;
337
338 sout | "octal";
339 sout | oct(v);
340 sout | oct(0_123456_L128u);
341 sout | oct(0_123456_65432_uL128);
342 sout | oct(0_123456_65432_34567_L128);
343 sout | oct(0_123456_65432_34567_76543_L128);
344 sout | oct(0_123456_65432_34567_76543_23456_L128);
345 sout | oct(0_123456_65432_34567_76543_23456_65432_L128);
346 sout | oct(0_123456_65432_34567_76543_23456_65432_34567_L128);
347 sout | oct(0_123456_65432_34567_76543_23456_65432_34567_76543_L128);
348 sout | oct(0_1111111111111111111L);
349 sout | oct(0_11111111111111111111L);
350 sout | oct(0_111111111111111111111L);
351 sout | nl;
352
353 sout | "decimal";
354 sout | v;
355 sout | 42_798_L128 | oct(42_798_L128);
356 sout | 1_402_432_282_L128 | oct(1_402_432_282_L128);
357 sout | 45_954_901_031_287_L128 | oct(45_954_901_031_287_L128);
358 sout | 1_505_850_196_993_244_515_L128 | oct(1_505_850_196_993_244_515_L128);
359 sout | 394_749_758_663_249_135_511_342_L128 | oct(394_749_758_663_249_135_511_342_L128);
360 sout | 12_935_154_696_204_706_112_391_834_394_L128 | oct(12_935_154_696_204_706_112_391_834_394_L128);
361 sout | 423_859_149_128_410_414_395_372_834_994_551_L128 | oct(423_859_149_128_410_414_395_372_834_994_551_L128);
362 sout | 13_889_016_598_639_747_063_234_935_497_057_631_587_L128 | oct(13_889_016_598_639_747_063_234_935_497_057_631_587_L128);
363 sout | 1234567890123456789_uL128;
364 sout | 1234567890123456789_L128u;
365 sout | 0x_7fffffff_ffffffff_ffffffff_ffffffff_L128;
366 sout | 0x_ffffffff_ffffffff_ffffffff_ffffffff_L128;
367 sout | 0x_80000000_00000000_00000000_00000000_L128;
368 unsigned int128 vv;
369 vv = 340282366920938463463374607431768211455_L128u;
370 sout | vv;
371 vv = 170141183460469231731687303715884105727_L128;
372 sout | vv;
373 sout | nl;
374
375 sout | "hexadecimal";
376 sout | hex(v);
377 sout | hex(0x_ffffffff_L128);
378 sout | hex(0x_ffffffff_ffffffff_L128);
379 sout | hex(0x_ffffffff_ffffffff_ffffffff_L128);
380 sout | hex(0xffffffff_ffffffff_ffffffff_ffffffff_L128);
381 sout | hex(0x_a2345678_L128);
382 sout | hex(0x_a2345678_b7654321_L128);
383 sout | hex(0x_a2345678_b7654321_c2345678_L128);
384 sout | hex(0x_a2345678_b7654321_c2345678_d7654321_L128);
385 sout | nl;
386} // main
387
388// Local Variables: //
389// tab-width: 4 //
390// compile-command: "cfa -Wall -Wextra manipulatorsOutput3.cfa" //
391// End: //
Note: See TracBrowser for help on using the repository browser.