Ignore:
Timestamp:
Jul 13, 2020, 6:04:33 PM (4 years ago)
Author:
Peter A. Buhr <pabuhr@…>
Branches:
ADT, arm-eh, ast-experimental, enum, forall-pointer-decay, jacob/cs343-translation, master, new-ast, new-ast-unique-expr, pthread-emulation, qualifiedEnum
Children:
a588f2a, cf5af9c
Parents:
ccb776b
Message:

extend testing for int128

File:
1 edited

Legend:

Unmodified
Added
Removed
  • tests/manipulatorsOutput3.cfa

    rccb776b r61ce214  
    22
    33int main() {
     4        // int128 printing
    45        int128 x = 0xffff, y = 0x2;
     6
    57        x <<= 64;
    68        x += 0xffff;
     
    1517        sout | nl;
    1618
     19        int128 divisor = 0x4b3b4ca85a86c47a;
     20        divisor <<= 16;
     21        divisor += 0x98a224000000000;
     22       
     23        // base 2
     24        sout | "base 2";
    1725        sout | bin(x);
    1826        sout | upcase(bin(x));
     
    2331        sout | nl;
    2432
     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";
    2544        printf( "%#.10o\n", 0123 );
    2645        sout | wd( 1,10, oct(0123) );
     
    6079        sout | nl;
    6180
    62         sout | hex(x);
    63         sout | upcase(hex(x));
    64         sout | nobase(hex(x));
    65         sout | wd( 45, upcase(hex(x)) );
    66         sout | wd( 45,40, upcase(hex(x)) );
    67         sout | wd( 45,49, upcase(hex(x)) );
    68         sout | left(wd( 45, upcase(hex(x)) )) | 'X';
    69         sout | left(wd( 45,40, upcase(hex(x)) )) | 'X';
    70         sout | left(wd( 45,49, upcase(hex(x)) )) | 'X';
    71 
    72         sout | nl;
    73 
    74         int128 divisor = 0x4b3b4ca85a86c47a;
    75         divisor <<= 16;
    76         divisor += 0x98a224000000000;
    77        
    78         // base 2
    79         sout | "base 2";
    80         sout | bin(divisor);
    81         sout | upcase(bin(divisor));
    82         sout | wd(38, upcase(bin(divisor)));
    83         sout | wd(40, upcase(bin(divisor)));
    84         sout | wd(40, 38, upcase(bin(divisor)));
    85         sout | wd(40, 30, upcase(bin(divisor)));
    86         sout | pad0(sign(wd(40, 38, upcase(bin(divisor)))));
    87         sout | nl;
    88        
    89         // oct
    90         sout | "base 8";
    9181        sout | upcase(oct(divisor));
    9282        sout | wd(38, upcase(oct(divisor)));
     
    117107        // hex
    118108        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
    119121        sout | upcase(hex(divisor));
    120122        sout | wd(38, upcase(hex(divisor)));
     
    124126        sout | pad0(sign(wd(40, 38, upcase(hex(divisor)))));
    125127        sout | nl;
    126 
    127128
    128129        // extras
     
    146147        int128 i128;
    147148        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';
    148276
    149277        i128 = -10;
    150278        for ( 25 ) {
    151         sout | left( sign( wd( 20, i128 ) ) ) | left( wd( 20, hex( i128 ) ) ) | left( wd( 20, oct( i128 ) ) );
    152         sout | left( wd( 20, bin( i128 ) ) );
    153         i128 += 1;
    154         }
    155         sout | nl;
     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
    156285        i128 = 0x7fffffffffffffff;
    157286        i128 <<= 64;
    158287        i128 += 0xfffffffffffffffa;
    159288
    160 //    for ( 20 ) {
    161         volatile int stop = 20;
     289//      for ( 20 ) {
     290        volatile int stop = 20;                                                         // gcc compiler bug
    162291        for ( int i = 0; i < stop; i += 1 ) {
    163         sout | i128;
    164         sout | left( sign( wd( 45, i128 ) ) ) | left( wd( 45, hex( i128 ) ) ) | left( wd( 45, oct( i128 ) ) );
    165         sout | left( wd( 45, bin( i128 ) ) );
    166         i128 += 1;
    167         }
     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
    168297        sout | nl;
    169298
     
    186315                ui128 += 1;
    187316        }
    188 }
     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
    189387
    190388// Local Variables: //
    191389// tab-width: 4 //
    192 // compile-command: "cfa -Wall -Wextra amanipulatorsOutput3.cfa" //
     390// compile-command: "cfa -Wall -Wextra manipulatorsOutput3.cfa" //
    193391// End: //
Note: See TracChangeset for help on using the changeset viewer.