source: tests/manipulatorsOutput3.cfa @ 430b443

ADTarm-ehast-experimentalenumforall-pointer-decayjacob/cs343-translationnew-ast-unique-exprpthread-emulationqualifiedEnum
Last change on this file since 430b443 was 61ce214, checked in by Peter A. Buhr <pabuhr@…>, 4 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.