LCOV - code coverage report
Current view: top level - tests - catch_int128.cpp (source / functions) Hit Total Coverage
Test: coverage.info Lines: 825 825 100.0 %
Date: 2022-01-29 18:20:26 Functions: 4 4 100.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : // Copyright (c) 2021-2022  Made to Order Software Corp.  All Rights Reserved
       2             : //
       3             : // https://snapwebsites.org/project/snapdev
       4             : // contact@m2osw.com
       5             : //
       6             : // This program is free software; you can redistribute it and/or modify
       7             : // it under the terms of the GNU General Public License as published by
       8             : // the Free Software Foundation; either version 2 of the License, or
       9             : // (at your option) any later version.
      10             : //
      11             : // This program is distributed in the hope that it will be useful,
      12             : // but WITHOUT ANY WARRANTY; without even the implied warranty of
      13             : // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      14             : // GNU General Public License for more details.
      15             : //
      16             : // You should have received a copy of the GNU General Public License along
      17             : // with this program; if not, write to the Free Software Foundation, Inc.,
      18             : // 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
      19             : 
      20             : /** \file
      21             :  * \brief Verify the various __int128 input/output support.
      22             :  *
      23             :  * This file implements tests to verify:
      24             :  *
      25             :  * * support printing out 128 bit numbers
      26             :  * * support of 128 bit literals
      27             :  */
      28             : 
      29             : // self
      30             : //
      31             : #include    "catch_main.h"
      32             : 
      33             : 
      34             : 
      35             : // snapdev lib
      36             : //
      37             : #include    <snapdev/ostream_int128.h>
      38             : #include    <snapdev/int128_literal.h>
      39             : 
      40             : 
      41             : // last include
      42             : //
      43             : #include    <snapdev/poison.h>
      44             : 
      45             : 
      46             : // __int128 is not ISO C++ yet
      47             : #pragma GCC diagnostic ignored "-Wpedantic"
      48             : 
      49             : 
      50           7 : CATCH_TEST_CASE("ostream_int128", "[ostream][int128]")
      51             : {
      52          10 :     CATCH_START_SECTION("ostream_int128: small numbers (-10 to +10)")
      53             :     {
      54          22 :         for(int i(-10); i <= 10; ++i)
      55             :         {
      56          21 :             __int128 l(i);
      57          42 :             std::stringstream ss;
      58          21 :             ss << l;
      59          21 :             CATCH_REQUIRE(ss.str() == std::to_string(i));
      60             :         }
      61             :     }
      62             :     CATCH_END_SECTION()
      63             : 
      64          10 :     CATCH_START_SECTION("ostream_int128: positive numbers")
      65             :     {
      66        1001 :         for(int i(0); i < 1000; ++i)
      67             :         {
      68        1000 :             std::int32_t v((rand() & 0x7FFFFFFF));
      69        1000 :             __int128 l(v);
      70        2000 :             std::stringstream ss;
      71        1000 :             ss << l;
      72        1000 :             CATCH_REQUIRE(ss.str() == std::to_string(v));
      73             :         }
      74             :     }
      75             :     CATCH_END_SECTION()
      76             : 
      77          10 :     CATCH_START_SECTION("ostream_int128: negative numbers")
      78             :     {
      79        1001 :         for(int i(0); i < 1000; ++i)
      80             :         {
      81        1000 :             std::int32_t v(-(rand() & 0x7FFFFFFF));
      82        1000 :             __int128 l(v);
      83        2000 :             std::stringstream ss;
      84        1000 :             ss << l;
      85        1000 :             CATCH_REQUIRE(ss.str() == std::to_string(v));
      86             :         }
      87             :     }
      88             :     CATCH_END_SECTION()
      89             : 
      90          10 :     CATCH_START_SECTION("ostream_int128: most positive number")
      91             :     {
      92           1 :         unsigned __int128 l(0);
      93           1 :         l = ~l;
      94           2 :         std::stringstream ss;
      95           1 :         ss << l;
      96           1 :         CATCH_REQUIRE(ss.str() == "340282366920938463463374607431768211455");
      97             :     }
      98             :     CATCH_END_SECTION()
      99             : 
     100          10 :     CATCH_START_SECTION("ostream_int128: most negative number")
     101             :     {
     102           1 :         __int128 l(1);
     103           1 :         l <<= 127;
     104           2 :         std::stringstream ss;
     105           1 :         ss << l;
     106           1 :         CATCH_REQUIRE(ss.str() == "-170141183460469231731687303715884105728");
     107             :     }
     108             :     CATCH_END_SECTION()
     109           5 : }
     110             : 
     111             : 
     112           5 : CATCH_TEST_CASE("int128_literal", "[literal][int128]")
     113             : {
     114           6 :     CATCH_START_SECTION("int128_literal: zero and powers of two")
     115             :     {
     116             :         using namespace snapdev::literals;
     117             : 
     118           1 :         __int128 m0(0_int128);
     119           1 :         CATCH_REQUIRE(m0 == 0);
     120             : 
     121           1 :         __int128 v(1);
     122             :         {
     123           1 :             __int128 l(1_int128);
     124           1 :             CATCH_REQUIRE(l == v);
     125             :         }
     126           1 :         v <<= 1;
     127             :         {
     128           1 :             __int128 l(2_int128);
     129           1 :             CATCH_REQUIRE(l == v);
     130             :         }
     131           1 :         v <<= 1;
     132             :         {
     133           1 :             __int128 l(4_int128);
     134           1 :             CATCH_REQUIRE(l == v);
     135             :         }
     136           1 :         v <<= 1;
     137             :         {
     138           1 :             __int128 l(8_int128);
     139           1 :             CATCH_REQUIRE(l == v);
     140             :         }
     141           1 :         v <<= 1;
     142             :         {
     143           1 :             __int128 l(16_int128);
     144           1 :             CATCH_REQUIRE(l == v);
     145             :         }
     146           1 :         v <<= 1;
     147             :         {
     148           1 :             __int128 l(32_int128);
     149           1 :             CATCH_REQUIRE(l == v);
     150             :         }
     151           1 :         v <<= 1;
     152             :         {
     153           1 :             __int128 l(64_int128);
     154           1 :             CATCH_REQUIRE(l == v);
     155             :         }
     156           1 :         v <<= 1;
     157             :         {
     158           1 :             __int128 l(128_int128);
     159           1 :             CATCH_REQUIRE(l == v);
     160             :         }
     161           1 :         v <<= 1;
     162             :         {
     163           1 :             __int128 l(256_int128);
     164           1 :             CATCH_REQUIRE(l == v);
     165             :         }
     166           1 :         v <<= 1;
     167             :         {
     168           1 :             __int128 l(512_int128);
     169           1 :             CATCH_REQUIRE(l == v);
     170             :         }
     171           1 :         v <<= 1;
     172             :         {
     173           1 :             __int128 l(1024_int128);
     174           1 :             CATCH_REQUIRE(l == v);
     175             :         }
     176           1 :         v <<= 1;
     177             :         {
     178           1 :             __int128 l(2048_int128);
     179           1 :             CATCH_REQUIRE(l == v);
     180             :         }
     181           1 :         v <<= 1;
     182             :         {
     183           1 :             __int128 l(4096_int128);
     184           1 :             CATCH_REQUIRE(l == v);
     185             :         }
     186           1 :         v <<= 1;
     187             :         {
     188           1 :             __int128 l(8192_int128);
     189           1 :             CATCH_REQUIRE(l == v);
     190             :         }
     191           1 :         v <<= 1;
     192             :         {
     193           1 :             __int128 l(16384_int128);
     194           1 :             CATCH_REQUIRE(l == v);
     195             :         }
     196           1 :         v <<= 1;
     197             :         {
     198           1 :             __int128 l(32768_int128);
     199           1 :             CATCH_REQUIRE(l == v);
     200             :         }
     201           1 :         v <<= 1;
     202             :         {
     203           1 :             __int128 l(65536_int128);
     204           1 :             CATCH_REQUIRE(l == v);
     205             :         }
     206           1 :         v <<= 1;
     207             :         {
     208           1 :             __int128 l(131072_int128);
     209           1 :             CATCH_REQUIRE(l == v);
     210             :         }
     211           1 :         v <<= 1;
     212             :         {
     213           1 :             __int128 l(262144_int128);
     214           1 :             CATCH_REQUIRE(l == v);
     215             :         }
     216           1 :         v <<= 1;
     217             :         {
     218           1 :             __int128 l(524288_int128);
     219           1 :             CATCH_REQUIRE(l == v);
     220             :         }
     221           1 :         v <<= 1;
     222             :         {
     223           1 :             __int128 l(1048576_int128);
     224           1 :             CATCH_REQUIRE(l == v);
     225             :         }
     226           1 :         v <<= 1;
     227             :         {
     228           1 :             __int128 l(2097152_int128);
     229           1 :             CATCH_REQUIRE(l == v);
     230             :         }
     231           1 :         v <<= 1;
     232             :         {
     233           1 :             __int128 l(4194304_int128);
     234           1 :             CATCH_REQUIRE(l == v);
     235             :         }
     236           1 :         v <<= 1;
     237             :         {
     238           1 :             __int128 l(8388608_int128);
     239           1 :             CATCH_REQUIRE(l == v);
     240             :         }
     241           1 :         v <<= 1;
     242             :         {
     243           1 :             __int128 l(16777216_int128);
     244           1 :             CATCH_REQUIRE(l == v);
     245             :         }
     246           1 :         v <<= 1;
     247             :         {
     248           1 :             __int128 l(33554432_int128);
     249           1 :             CATCH_REQUIRE(l == v);
     250             :         }
     251           1 :         v <<= 1;
     252             :         {
     253           1 :             __int128 l(67108864_int128);
     254           1 :             CATCH_REQUIRE(l == v);
     255             :         }
     256           1 :         v <<= 1;
     257             :         {
     258           1 :             __int128 l(134217728_int128);
     259           1 :             CATCH_REQUIRE(l == v);
     260             :         }
     261           1 :         v <<= 1;
     262             :         {
     263           1 :             __int128 l(268435456_int128);
     264           1 :             CATCH_REQUIRE(l == v);
     265             :         }
     266           1 :         v <<= 1;
     267             :         {
     268           1 :             __int128 l(536870912_int128);
     269           1 :             CATCH_REQUIRE(l == v);
     270             :         }
     271           1 :         v <<= 1;
     272             :         {
     273           1 :             __int128 l(1073741824_int128);
     274           1 :             CATCH_REQUIRE(l == v);
     275             :         }
     276           1 :         v <<= 1;
     277             :         {
     278           1 :             __int128 l(2147483648_int128);
     279           1 :             CATCH_REQUIRE(l == v);
     280             :         }
     281           1 :         v <<= 1;
     282             :         {
     283           1 :             __int128 l(4294967296_int128);
     284           1 :             CATCH_REQUIRE(l == v);
     285             :         }
     286           1 :         v <<= 1;
     287             :         {
     288           1 :             __int128 l(8589934592_int128);
     289           1 :             CATCH_REQUIRE(l == v);
     290             :         }
     291           1 :         v <<= 1;
     292             :         {
     293           1 :             __int128 l(17179869184_int128);
     294           1 :             CATCH_REQUIRE(l == v);
     295             :         }
     296           1 :         v <<= 1;
     297             :         {
     298           1 :             __int128 l(34359738368_int128);
     299           1 :             CATCH_REQUIRE(l == v);
     300             :         }
     301           1 :         v <<= 1;
     302             :         {
     303           1 :             __int128 l(68719476736_int128);
     304           1 :             CATCH_REQUIRE(l == v);
     305             :         }
     306           1 :         v <<= 1;
     307             :         {
     308           1 :             __int128 l(137438953472_int128);
     309           1 :             CATCH_REQUIRE(l == v);
     310             :         }
     311           1 :         v <<= 1;
     312             :         {
     313           1 :             __int128 l(274877906944_int128);
     314           1 :             CATCH_REQUIRE(l == v);
     315             :         }
     316           1 :         v <<= 1;
     317             :         {
     318           1 :             __int128 l(549755813888_int128);
     319           1 :             CATCH_REQUIRE(l == v);
     320             :         }
     321           1 :         v <<= 1;
     322             :         {
     323           1 :             __int128 l(1099511627776_int128);
     324           1 :             CATCH_REQUIRE(l == v);
     325             :         }
     326           1 :         v <<= 1;
     327             :         {
     328           1 :             __int128 l(2199023255552_int128);
     329           1 :             CATCH_REQUIRE(l == v);
     330             :         }
     331           1 :         v <<= 1;
     332             :         {
     333           1 :             __int128 l(4398046511104_int128);
     334           1 :             CATCH_REQUIRE(l == v);
     335             :         }
     336           1 :         v <<= 1;
     337             :         {
     338           1 :             __int128 l(8796093022208_int128);
     339           1 :             CATCH_REQUIRE(l == v);
     340             :         }
     341           1 :         v <<= 1;
     342             :         {
     343           1 :             __int128 l(17592186044416_int128);
     344           1 :             CATCH_REQUIRE(l == v);
     345             :         }
     346           1 :         v <<= 1;
     347             :         {
     348           1 :             __int128 l(35184372088832_int128);
     349           1 :             CATCH_REQUIRE(l == v);
     350             :         }
     351           1 :         v <<= 1;
     352             :         {
     353           1 :             __int128 l(70368744177664_int128);
     354           1 :             CATCH_REQUIRE(l == v);
     355             :         }
     356           1 :         v <<= 1;
     357             :         {
     358           1 :             __int128 l(140737488355328_int128);
     359           1 :             CATCH_REQUIRE(l == v);
     360             :         }
     361           1 :         v <<= 1;
     362             :         {
     363           1 :             __int128 l(281474976710656_int128);
     364           1 :             CATCH_REQUIRE(l == v);
     365             :         }
     366           1 :         v <<= 1;
     367             :         {
     368           1 :             __int128 l(562949953421312_int128);
     369           1 :             CATCH_REQUIRE(l == v);
     370             :         }
     371           1 :         v <<= 1;
     372             :         {
     373           1 :             __int128 l(1125899906842624_int128);
     374           1 :             CATCH_REQUIRE(l == v);
     375             :         }
     376           1 :         v <<= 1;
     377             :         {
     378           1 :             __int128 l(2251799813685248_int128);
     379           1 :             CATCH_REQUIRE(l == v);
     380             :         }
     381           1 :         v <<= 1;
     382             :         {
     383           1 :             __int128 l(4503599627370496_int128);
     384           1 :             CATCH_REQUIRE(l == v);
     385             :         }
     386           1 :         v <<= 1;
     387             :         {
     388           1 :             __int128 l(9007199254740992_int128);
     389           1 :             CATCH_REQUIRE(l == v);
     390             :         }
     391           1 :         v <<= 1;
     392             :         {
     393           1 :             __int128 l(18014398509481984_int128);
     394           1 :             CATCH_REQUIRE(l == v);
     395             :         }
     396           1 :         v <<= 1;
     397             :         {
     398           1 :             __int128 l(36028797018963968_int128);
     399           1 :             CATCH_REQUIRE(l == v);
     400             :         }
     401           1 :         v <<= 1;
     402             :         {
     403           1 :             __int128 l(72057594037927936_int128);
     404           1 :             CATCH_REQUIRE(l == v);
     405             :         }
     406           1 :         v <<= 1;
     407             :         {
     408           1 :             __int128 l(144115188075855872_int128);
     409           1 :             CATCH_REQUIRE(l == v);
     410             :         }
     411           1 :         v <<= 1;
     412             :         {
     413           1 :             __int128 l(288230376151711744_int128);
     414           1 :             CATCH_REQUIRE(l == v);
     415             :         }
     416           1 :         v <<= 1;
     417             :         {
     418           1 :             __int128 l(576460752303423488_int128);
     419           1 :             CATCH_REQUIRE(l == v);
     420             :         }
     421           1 :         v <<= 1;
     422             :         {
     423           1 :             __int128 l(1152921504606846976_int128);
     424           1 :             CATCH_REQUIRE(l == v);
     425             :         }
     426           1 :         v <<= 1;
     427             :         {
     428           1 :             __int128 l(2305843009213693952_int128);
     429           1 :             CATCH_REQUIRE(l == v);
     430             :         }
     431           1 :         v <<= 1;
     432             :         {
     433           1 :             __int128 l(4611686018427387904_int128);
     434           1 :             CATCH_REQUIRE(l == v);
     435             :         }
     436           1 :         v <<= 1;
     437             :         {
     438           1 :             __int128 l(9223372036854775808_int128);
     439           1 :             CATCH_REQUIRE(l == v);
     440             :         }
     441           1 :         v <<= 1;
     442             :         {
     443           1 :             __int128 l(18446744073709551616_int128);
     444           1 :             CATCH_REQUIRE(l == v);
     445             :         }
     446           1 :         v <<= 1;
     447             :         {
     448           1 :             __int128 l(36893488147419103232_int128);
     449           1 :             CATCH_REQUIRE(l == v);
     450             :         }
     451           1 :         v <<= 1;
     452             :         {
     453           1 :             __int128 l(73786976294838206464_int128);
     454           1 :             CATCH_REQUIRE(l == v);
     455             :         }
     456           1 :         v <<= 1;
     457             :         {
     458           1 :             __int128 l(147573952589676412928_int128);
     459           1 :             CATCH_REQUIRE(l == v);
     460             :         }
     461           1 :         v <<= 1;
     462             :         {
     463           1 :             __int128 l(295147905179352825856_int128);
     464           1 :             CATCH_REQUIRE(l == v);
     465             :         }
     466           1 :         v <<= 1;
     467             :         {
     468           1 :             __int128 l(590295810358705651712_int128);
     469           1 :             CATCH_REQUIRE(l == v);
     470             :         }
     471           1 :         v <<= 1;
     472             :         {
     473           1 :             __int128 l(1180591620717411303424_int128);
     474           1 :             CATCH_REQUIRE(l == v);
     475             :         }
     476           1 :         v <<= 1;
     477             :         {
     478           1 :             __int128 l(2361183241434822606848_int128);
     479           1 :             CATCH_REQUIRE(l == v);
     480             :         }
     481           1 :         v <<= 1;
     482             :         {
     483           1 :             __int128 l(4722366482869645213696_int128);
     484           1 :             CATCH_REQUIRE(l == v);
     485             :         }
     486           1 :         v <<= 1;
     487             :         {
     488           1 :             __int128 l(9444732965739290427392_int128);
     489           1 :             CATCH_REQUIRE(l == v);
     490             :         }
     491           1 :         v <<= 1;
     492             :         {
     493           1 :             __int128 l(18889465931478580854784_int128);
     494           1 :             CATCH_REQUIRE(l == v);
     495             :         }
     496           1 :         v <<= 1;
     497             :         {
     498           1 :             __int128 l(37778931862957161709568_int128);
     499           1 :             CATCH_REQUIRE(l == v);
     500             :         }
     501           1 :         v <<= 1;
     502             :         {
     503           1 :             __int128 l(75557863725914323419136_int128);
     504           1 :             CATCH_REQUIRE(l == v);
     505             :         }
     506           1 :         v <<= 1;
     507             :         {
     508           1 :             __int128 l(151115727451828646838272_int128);
     509           1 :             CATCH_REQUIRE(l == v);
     510             :         }
     511           1 :         v <<= 1;
     512             :         {
     513           1 :             __int128 l(302231454903657293676544_int128);
     514           1 :             CATCH_REQUIRE(l == v);
     515             :         }
     516           1 :         v <<= 1;
     517             :         {
     518           1 :             __int128 l(604462909807314587353088_int128);
     519           1 :             CATCH_REQUIRE(l == v);
     520             :         }
     521           1 :         v <<= 1;
     522             :         {
     523           1 :             __int128 l(1208925819614629174706176_int128);
     524           1 :             CATCH_REQUIRE(l == v);
     525             :         }
     526           1 :         v <<= 1;
     527             :         {
     528           1 :             __int128 l(2417851639229258349412352_int128);
     529           1 :             CATCH_REQUIRE(l == v);
     530             :         }
     531           1 :         v <<= 1;
     532             :         {
     533           1 :             __int128 l(4835703278458516698824704_int128);
     534           1 :             CATCH_REQUIRE(l == v);
     535             :         }
     536           1 :         v <<= 1;
     537             :         {
     538           1 :             __int128 l(9671406556917033397649408_int128);
     539           1 :             CATCH_REQUIRE(l == v);
     540             :         }
     541           1 :         v <<= 1;
     542             :         {
     543           1 :             __int128 l(19342813113834066795298816_int128);
     544           1 :             CATCH_REQUIRE(l == v);
     545             :         }
     546           1 :         v <<= 1;
     547             :         {
     548           1 :             __int128 l(38685626227668133590597632_int128);
     549           1 :             CATCH_REQUIRE(l == v);
     550             :         }
     551           1 :         v <<= 1;
     552             :         {
     553           1 :             __int128 l(77371252455336267181195264_int128);
     554           1 :             CATCH_REQUIRE(l == v);
     555             :         }
     556           1 :         v <<= 1;
     557             :         {
     558           1 :             __int128 l(154742504910672534362390528_int128);
     559           1 :             CATCH_REQUIRE(l == v);
     560             :         }
     561           1 :         v <<= 1;
     562             :         {
     563           1 :             __int128 l(309485009821345068724781056_int128);
     564           1 :             CATCH_REQUIRE(l == v);
     565             :         }
     566           1 :         v <<= 1;
     567             :         {
     568           1 :             __int128 l(618970019642690137449562112_int128);
     569           1 :             CATCH_REQUIRE(l == v);
     570             :         }
     571           1 :         v <<= 1;
     572             :         {
     573           1 :             __int128 l(1237940039285380274899124224_int128);
     574           1 :             CATCH_REQUIRE(l == v);
     575             :         }
     576           1 :         v <<= 1;
     577             :         {
     578           1 :             __int128 l(2475880078570760549798248448_int128);
     579           1 :             CATCH_REQUIRE(l == v);
     580             :         }
     581           1 :         v <<= 1;
     582             :         {
     583           1 :             __int128 l(4951760157141521099596496896_int128);
     584           1 :             CATCH_REQUIRE(l == v);
     585             :         }
     586           1 :         v <<= 1;
     587             :         {
     588           1 :             __int128 l(9903520314283042199192993792_int128);
     589           1 :             CATCH_REQUIRE(l == v);
     590             :         }
     591           1 :         v <<= 1;
     592             :         {
     593           1 :             __int128 l(19807040628566084398385987584_int128);
     594           1 :             CATCH_REQUIRE(l == v);
     595             :         }
     596           1 :         v <<= 1;
     597             :         {
     598           1 :             __int128 l(39614081257132168796771975168_int128);
     599           1 :             CATCH_REQUIRE(l == v);
     600             :         }
     601           1 :         v <<= 1;
     602             :         {
     603           1 :             __int128 l(79228162514264337593543950336_int128);
     604           1 :             CATCH_REQUIRE(l == v);
     605             :         }
     606           1 :         v <<= 1;
     607             :         {
     608           1 :             __int128 l(158456325028528675187087900672_int128);
     609           1 :             CATCH_REQUIRE(l == v);
     610             :         }
     611           1 :         v <<= 1;
     612             :         {
     613           1 :             __int128 l(316912650057057350374175801344_int128);
     614           1 :             CATCH_REQUIRE(l == v);
     615             :         }
     616           1 :         v <<= 1;
     617             :         {
     618           1 :             __int128 l(633825300114114700748351602688_int128);
     619           1 :             CATCH_REQUIRE(l == v);
     620             :         }
     621           1 :         v <<= 1;
     622             :         {
     623           1 :             __int128 l(1267650600228229401496703205376_int128);
     624           1 :             CATCH_REQUIRE(l == v);
     625             :         }
     626           1 :         v <<= 1;
     627             :         {
     628           1 :             __int128 l(2535301200456458802993406410752_int128);
     629           1 :             CATCH_REQUIRE(l == v);
     630             :         }
     631           1 :         v <<= 1;
     632             :         {
     633           1 :             __int128 l(5070602400912917605986812821504_int128);
     634           1 :             CATCH_REQUIRE(l == v);
     635             :         }
     636           1 :         v <<= 1;
     637             :         {
     638           1 :             __int128 l(10141204801825835211973625643008_int128);
     639           1 :             CATCH_REQUIRE(l == v);
     640             :         }
     641           1 :         v <<= 1;
     642             :         {
     643           1 :             __int128 l(20282409603651670423947251286016_int128);
     644           1 :             CATCH_REQUIRE(l == v);
     645             :         }
     646           1 :         v <<= 1;
     647             :         {
     648           1 :             __int128 l(40564819207303340847894502572032_int128);
     649           1 :             CATCH_REQUIRE(l == v);
     650             :         }
     651           1 :         v <<= 1;
     652             :         {
     653           1 :             __int128 l(81129638414606681695789005144064_int128);
     654           1 :             CATCH_REQUIRE(l == v);
     655             :         }
     656           1 :         v <<= 1;
     657             :         {
     658           1 :             __int128 l(162259276829213363391578010288128_int128);
     659           1 :             CATCH_REQUIRE(l == v);
     660             :         }
     661           1 :         v <<= 1;
     662             :         {
     663           1 :             __int128 l(324518553658426726783156020576256_int128);
     664           1 :             CATCH_REQUIRE(l == v);
     665             :         }
     666           1 :         v <<= 1;
     667             :         {
     668           1 :             __int128 l(649037107316853453566312041152512_int128);
     669           1 :             CATCH_REQUIRE(l == v);
     670             :         }
     671           1 :         v <<= 1;
     672             :         {
     673           1 :             __int128 l(1298074214633706907132624082305024_int128);
     674           1 :             CATCH_REQUIRE(l == v);
     675             :         }
     676           1 :         v <<= 1;
     677             :         {
     678           1 :             __int128 l(2596148429267413814265248164610048_int128);
     679           1 :             CATCH_REQUIRE(l == v);
     680             :         }
     681           1 :         v <<= 1;
     682             :         {
     683           1 :             __int128 l(5192296858534827628530496329220096_int128);
     684           1 :             CATCH_REQUIRE(l == v);
     685             :         }
     686           1 :         v <<= 1;
     687             :         {
     688           1 :             __int128 l(10384593717069655257060992658440192_int128);
     689           1 :             CATCH_REQUIRE(l == v);
     690             :         }
     691           1 :         v <<= 1;
     692             :         {
     693           1 :             __int128 l(20769187434139310514121985316880384_int128);
     694           1 :             CATCH_REQUIRE(l == v);
     695             :         }
     696           1 :         v <<= 1;
     697             :         {
     698           1 :             __int128 l(41538374868278621028243970633760768_int128);
     699           1 :             CATCH_REQUIRE(l == v);
     700             :         }
     701           1 :         v <<= 1;
     702             :         {
     703           1 :             __int128 l(83076749736557242056487941267521536_int128);
     704           1 :             CATCH_REQUIRE(l == v);
     705             :         }
     706           1 :         v <<= 1;
     707             :         {
     708           1 :             __int128 l(166153499473114484112975882535043072_int128);
     709           1 :             CATCH_REQUIRE(l == v);
     710             :         }
     711           1 :         v <<= 1;
     712             :         {
     713           1 :             __int128 l(332306998946228968225951765070086144_int128);
     714           1 :             CATCH_REQUIRE(l == v);
     715             :         }
     716           1 :         v <<= 1;
     717             :         {
     718           1 :             __int128 l(664613997892457936451903530140172288_int128);
     719           1 :             CATCH_REQUIRE(l == v);
     720             :         }
     721           1 :         v <<= 1;
     722             :         {
     723           1 :             __int128 l(1329227995784915872903807060280344576_int128);
     724           1 :             CATCH_REQUIRE(l == v);
     725             :         }
     726           1 :         v <<= 1;
     727             :         {
     728           1 :             __int128 l(2658455991569831745807614120560689152_int128);
     729           1 :             CATCH_REQUIRE(l == v);
     730             :         }
     731           1 :         v <<= 1;
     732             :         {
     733           1 :             __int128 l(5316911983139663491615228241121378304_int128);
     734           1 :             CATCH_REQUIRE(l == v);
     735             :         }
     736           1 :         v <<= 1;
     737             :         {
     738           1 :             __int128 l(10633823966279326983230456482242756608_int128);
     739           1 :             CATCH_REQUIRE(l == v);
     740             :         }
     741           1 :         v <<= 1;
     742             :         {
     743           1 :             __int128 l(21267647932558653966460912964485513216_int128);
     744           1 :             CATCH_REQUIRE(l == v);
     745             :         }
     746           1 :         v <<= 1;
     747             :         {
     748           1 :             __int128 l(42535295865117307932921825928971026432_int128);
     749           1 :             CATCH_REQUIRE(l == v);
     750             :         }
     751           1 :         v <<= 1;
     752             :         {
     753           1 :             __int128 l(85070591730234615865843651857942052864_int128);
     754           1 :             CATCH_REQUIRE(l == v);
     755             :         }
     756             :     }
     757             :     CATCH_END_SECTION()
     758             : 
     759           6 :     CATCH_START_SECTION("uint128_literal: unsigned zero and powers of two")
     760             :     {
     761             :         using namespace snapdev::literals;
     762             : 
     763           1 :         unsigned __int128 m0(0_uint128);
     764           1 :         CATCH_REQUIRE(m0 == 0);
     765             : 
     766           1 :         unsigned __int128 v(1);
     767             :         {
     768           1 :             unsigned __int128 l(1_uint128);
     769           1 :             CATCH_REQUIRE(l == v);
     770             :         }
     771           1 :         v <<= 1;
     772             :         {
     773           1 :             unsigned __int128 l(2_uint128);
     774           1 :             CATCH_REQUIRE(l == v);
     775             :         }
     776           1 :         v <<= 1;
     777             :         {
     778           1 :             unsigned __int128 l(4_uint128);
     779           1 :             CATCH_REQUIRE(l == v);
     780             :         }
     781           1 :         v <<= 1;
     782             :         {
     783           1 :             unsigned __int128 l(8_uint128);
     784           1 :             CATCH_REQUIRE(l == v);
     785             :         }
     786           1 :         v <<= 1;
     787             :         {
     788           1 :             unsigned __int128 l(16_uint128);
     789           1 :             CATCH_REQUIRE(l == v);
     790             :         }
     791           1 :         v <<= 1;
     792             :         {
     793           1 :             unsigned __int128 l(32_uint128);
     794           1 :             CATCH_REQUIRE(l == v);
     795             :         }
     796           1 :         v <<= 1;
     797             :         {
     798           1 :             unsigned __int128 l(64_uint128);
     799           1 :             CATCH_REQUIRE(l == v);
     800             :         }
     801           1 :         v <<= 1;
     802             :         {
     803           1 :             unsigned __int128 l(128_uint128);
     804           1 :             CATCH_REQUIRE(l == v);
     805             :         }
     806           1 :         v <<= 1;
     807             :         {
     808           1 :             unsigned __int128 l(256_uint128);
     809           1 :             CATCH_REQUIRE(l == v);
     810             :         }
     811           1 :         v <<= 1;
     812             :         {
     813           1 :             unsigned __int128 l(512_uint128);
     814           1 :             CATCH_REQUIRE(l == v);
     815             :         }
     816           1 :         v <<= 1;
     817             :         {
     818           1 :             unsigned __int128 l(1024_uint128);
     819           1 :             CATCH_REQUIRE(l == v);
     820             :         }
     821           1 :         v <<= 1;
     822             :         {
     823           1 :             unsigned __int128 l(2048_uint128);
     824           1 :             CATCH_REQUIRE(l == v);
     825             :         }
     826           1 :         v <<= 1;
     827             :         {
     828           1 :             unsigned __int128 l(4096_uint128);
     829           1 :             CATCH_REQUIRE(l == v);
     830             :         }
     831           1 :         v <<= 1;
     832             :         {
     833           1 :             unsigned __int128 l(8192_uint128);
     834           1 :             CATCH_REQUIRE(l == v);
     835             :         }
     836           1 :         v <<= 1;
     837             :         {
     838           1 :             unsigned __int128 l(16384_uint128);
     839           1 :             CATCH_REQUIRE(l == v);
     840             :         }
     841           1 :         v <<= 1;
     842             :         {
     843           1 :             unsigned __int128 l(32768_uint128);
     844           1 :             CATCH_REQUIRE(l == v);
     845             :         }
     846           1 :         v <<= 1;
     847             :         {
     848           1 :             unsigned __int128 l(65536_uint128);
     849           1 :             CATCH_REQUIRE(l == v);
     850             :         }
     851           1 :         v <<= 1;
     852             :         {
     853           1 :             unsigned __int128 l(131072_uint128);
     854           1 :             CATCH_REQUIRE(l == v);
     855             :         }
     856           1 :         v <<= 1;
     857             :         {
     858           1 :             unsigned __int128 l(262144_uint128);
     859           1 :             CATCH_REQUIRE(l == v);
     860             :         }
     861           1 :         v <<= 1;
     862             :         {
     863           1 :             unsigned __int128 l(524288_uint128);
     864           1 :             CATCH_REQUIRE(l == v);
     865             :         }
     866           1 :         v <<= 1;
     867             :         {
     868           1 :             unsigned __int128 l(1048576_uint128);
     869           1 :             CATCH_REQUIRE(l == v);
     870             :         }
     871           1 :         v <<= 1;
     872             :         {
     873           1 :             unsigned __int128 l(2097152_uint128);
     874           1 :             CATCH_REQUIRE(l == v);
     875             :         }
     876           1 :         v <<= 1;
     877             :         {
     878           1 :             unsigned __int128 l(4194304_uint128);
     879           1 :             CATCH_REQUIRE(l == v);
     880             :         }
     881           1 :         v <<= 1;
     882             :         {
     883           1 :             unsigned __int128 l(8388608_uint128);
     884           1 :             CATCH_REQUIRE(l == v);
     885             :         }
     886           1 :         v <<= 1;
     887             :         {
     888           1 :             unsigned __int128 l(16777216_uint128);
     889           1 :             CATCH_REQUIRE(l == v);
     890             :         }
     891           1 :         v <<= 1;
     892             :         {
     893           1 :             unsigned __int128 l(33554432_uint128);
     894           1 :             CATCH_REQUIRE(l == v);
     895             :         }
     896           1 :         v <<= 1;
     897             :         {
     898           1 :             unsigned __int128 l(67108864_uint128);
     899           1 :             CATCH_REQUIRE(l == v);
     900             :         }
     901           1 :         v <<= 1;
     902             :         {
     903           1 :             unsigned __int128 l(134217728_uint128);
     904           1 :             CATCH_REQUIRE(l == v);
     905             :         }
     906           1 :         v <<= 1;
     907             :         {
     908           1 :             unsigned __int128 l(268435456_uint128);
     909           1 :             CATCH_REQUIRE(l == v);
     910             :         }
     911           1 :         v <<= 1;
     912             :         {
     913           1 :             unsigned __int128 l(536870912_uint128);
     914           1 :             CATCH_REQUIRE(l == v);
     915             :         }
     916           1 :         v <<= 1;
     917             :         {
     918           1 :             unsigned __int128 l(1073741824_uint128);
     919           1 :             CATCH_REQUIRE(l == v);
     920             :         }
     921           1 :         v <<= 1;
     922             :         {
     923           1 :             unsigned __int128 l(2147483648_uint128);
     924           1 :             CATCH_REQUIRE(l == v);
     925             :         }
     926           1 :         v <<= 1;
     927             :         {
     928           1 :             unsigned __int128 l(4294967296_uint128);
     929           1 :             CATCH_REQUIRE(l == v);
     930             :         }
     931           1 :         v <<= 1;
     932             :         {
     933           1 :             unsigned __int128 l(8589934592_uint128);
     934           1 :             CATCH_REQUIRE(l == v);
     935             :         }
     936           1 :         v <<= 1;
     937             :         {
     938           1 :             unsigned __int128 l(17179869184_uint128);
     939           1 :             CATCH_REQUIRE(l == v);
     940             :         }
     941           1 :         v <<= 1;
     942             :         {
     943           1 :             unsigned __int128 l(34359738368_uint128);
     944           1 :             CATCH_REQUIRE(l == v);
     945             :         }
     946           1 :         v <<= 1;
     947             :         {
     948           1 :             unsigned __int128 l(68719476736_uint128);
     949           1 :             CATCH_REQUIRE(l == v);
     950             :         }
     951           1 :         v <<= 1;
     952             :         {
     953           1 :             unsigned __int128 l(137438953472_uint128);
     954           1 :             CATCH_REQUIRE(l == v);
     955             :         }
     956           1 :         v <<= 1;
     957             :         {
     958           1 :             unsigned __int128 l(274877906944_uint128);
     959           1 :             CATCH_REQUIRE(l == v);
     960             :         }
     961           1 :         v <<= 1;
     962             :         {
     963           1 :             unsigned __int128 l(549755813888_uint128);
     964           1 :             CATCH_REQUIRE(l == v);
     965             :         }
     966           1 :         v <<= 1;
     967             :         {
     968           1 :             unsigned __int128 l(1099511627776_uint128);
     969           1 :             CATCH_REQUIRE(l == v);
     970             :         }
     971           1 :         v <<= 1;
     972             :         {
     973           1 :             unsigned __int128 l(2199023255552_uint128);
     974           1 :             CATCH_REQUIRE(l == v);
     975             :         }
     976           1 :         v <<= 1;
     977             :         {
     978           1 :             unsigned __int128 l(4398046511104_uint128);
     979           1 :             CATCH_REQUIRE(l == v);
     980             :         }
     981           1 :         v <<= 1;
     982             :         {
     983           1 :             unsigned __int128 l(8796093022208_uint128);
     984           1 :             CATCH_REQUIRE(l == v);
     985             :         }
     986           1 :         v <<= 1;
     987             :         {
     988           1 :             unsigned __int128 l(17592186044416_uint128);
     989           1 :             CATCH_REQUIRE(l == v);
     990             :         }
     991           1 :         v <<= 1;
     992             :         {
     993           1 :             unsigned __int128 l(35184372088832_uint128);
     994           1 :             CATCH_REQUIRE(l == v);
     995             :         }
     996           1 :         v <<= 1;
     997             :         {
     998           1 :             unsigned __int128 l(70368744177664_uint128);
     999           1 :             CATCH_REQUIRE(l == v);
    1000             :         }
    1001           1 :         v <<= 1;
    1002             :         {
    1003           1 :             unsigned __int128 l(140737488355328_uint128);
    1004           1 :             CATCH_REQUIRE(l == v);
    1005             :         }
    1006           1 :         v <<= 1;
    1007             :         {
    1008           1 :             unsigned __int128 l(281474976710656_uint128);
    1009           1 :             CATCH_REQUIRE(l == v);
    1010             :         }
    1011           1 :         v <<= 1;
    1012             :         {
    1013           1 :             unsigned __int128 l(562949953421312_uint128);
    1014           1 :             CATCH_REQUIRE(l == v);
    1015             :         }
    1016           1 :         v <<= 1;
    1017             :         {
    1018           1 :             unsigned __int128 l(1125899906842624_uint128);
    1019           1 :             CATCH_REQUIRE(l == v);
    1020             :         }
    1021           1 :         v <<= 1;
    1022             :         {
    1023           1 :             unsigned __int128 l(2251799813685248_uint128);
    1024           1 :             CATCH_REQUIRE(l == v);
    1025             :         }
    1026           1 :         v <<= 1;
    1027             :         {
    1028           1 :             unsigned __int128 l(4503599627370496_uint128);
    1029           1 :             CATCH_REQUIRE(l == v);
    1030             :         }
    1031           1 :         v <<= 1;
    1032             :         {
    1033           1 :             unsigned __int128 l(9007199254740992_uint128);
    1034           1 :             CATCH_REQUIRE(l == v);
    1035             :         }
    1036           1 :         v <<= 1;
    1037             :         {
    1038           1 :             unsigned __int128 l(18014398509481984_uint128);
    1039           1 :             CATCH_REQUIRE(l == v);
    1040             :         }
    1041           1 :         v <<= 1;
    1042             :         {
    1043           1 :             unsigned __int128 l(36028797018963968_uint128);
    1044           1 :             CATCH_REQUIRE(l == v);
    1045             :         }
    1046           1 :         v <<= 1;
    1047             :         {
    1048           1 :             unsigned __int128 l(72057594037927936_uint128);
    1049           1 :             CATCH_REQUIRE(l == v);
    1050             :         }
    1051           1 :         v <<= 1;
    1052             :         {
    1053           1 :             unsigned __int128 l(144115188075855872_uint128);
    1054           1 :             CATCH_REQUIRE(l == v);
    1055             :         }
    1056           1 :         v <<= 1;
    1057             :         {
    1058           1 :             unsigned __int128 l(288230376151711744_uint128);
    1059           1 :             CATCH_REQUIRE(l == v);
    1060             :         }
    1061           1 :         v <<= 1;
    1062             :         {
    1063           1 :             unsigned __int128 l(576460752303423488_uint128);
    1064           1 :             CATCH_REQUIRE(l == v);
    1065             :         }
    1066           1 :         v <<= 1;
    1067             :         {
    1068           1 :             unsigned __int128 l(1152921504606846976_uint128);
    1069           1 :             CATCH_REQUIRE(l == v);
    1070             :         }
    1071           1 :         v <<= 1;
    1072             :         {
    1073           1 :             unsigned __int128 l(2305843009213693952_uint128);
    1074           1 :             CATCH_REQUIRE(l == v);
    1075             :         }
    1076           1 :         v <<= 1;
    1077             :         {
    1078           1 :             unsigned __int128 l(4611686018427387904_uint128);
    1079           1 :             CATCH_REQUIRE(l == v);
    1080             :         }
    1081           1 :         v <<= 1;
    1082             :         {
    1083           1 :             unsigned __int128 l(9223372036854775808_uint128);
    1084           1 :             CATCH_REQUIRE(l == v);
    1085             :         }
    1086           1 :         v <<= 1;
    1087             :         {
    1088           1 :             unsigned __int128 l(18446744073709551616_uint128);
    1089           1 :             CATCH_REQUIRE(l == v);
    1090             :         }
    1091           1 :         v <<= 1;
    1092             :         {
    1093           1 :             unsigned __int128 l(36893488147419103232_uint128);
    1094           1 :             CATCH_REQUIRE(l == v);
    1095             :         }
    1096           1 :         v <<= 1;
    1097             :         {
    1098           1 :             unsigned __int128 l(73786976294838206464_uint128);
    1099           1 :             CATCH_REQUIRE(l == v);
    1100             :         }
    1101           1 :         v <<= 1;
    1102             :         {
    1103           1 :             unsigned __int128 l(147573952589676412928_uint128);
    1104           1 :             CATCH_REQUIRE(l == v);
    1105             :         }
    1106           1 :         v <<= 1;
    1107             :         {
    1108           1 :             unsigned __int128 l(295147905179352825856_uint128);
    1109           1 :             CATCH_REQUIRE(l == v);
    1110             :         }
    1111           1 :         v <<= 1;
    1112             :         {
    1113           1 :             unsigned __int128 l(590295810358705651712_uint128);
    1114           1 :             CATCH_REQUIRE(l == v);
    1115             :         }
    1116           1 :         v <<= 1;
    1117             :         {
    1118           1 :             unsigned __int128 l(1180591620717411303424_uint128);
    1119           1 :             CATCH_REQUIRE(l == v);
    1120             :         }
    1121           1 :         v <<= 1;
    1122             :         {
    1123           1 :             unsigned __int128 l(2361183241434822606848_uint128);
    1124           1 :             CATCH_REQUIRE(l == v);
    1125             :         }
    1126           1 :         v <<= 1;
    1127             :         {
    1128           1 :             unsigned __int128 l(4722366482869645213696_uint128);
    1129           1 :             CATCH_REQUIRE(l == v);
    1130             :         }
    1131           1 :         v <<= 1;
    1132             :         {
    1133           1 :             unsigned __int128 l(9444732965739290427392_uint128);
    1134           1 :             CATCH_REQUIRE(l == v);
    1135             :         }
    1136           1 :         v <<= 1;
    1137             :         {
    1138           1 :             unsigned __int128 l(18889465931478580854784_uint128);
    1139           1 :             CATCH_REQUIRE(l == v);
    1140             :         }
    1141           1 :         v <<= 1;
    1142             :         {
    1143           1 :             unsigned __int128 l(37778931862957161709568_uint128);
    1144           1 :             CATCH_REQUIRE(l == v);
    1145             :         }
    1146           1 :         v <<= 1;
    1147             :         {
    1148           1 :             unsigned __int128 l(75557863725914323419136_uint128);
    1149           1 :             CATCH_REQUIRE(l == v);
    1150             :         }
    1151           1 :         v <<= 1;
    1152             :         {
    1153           1 :             unsigned __int128 l(151115727451828646838272_uint128);
    1154           1 :             CATCH_REQUIRE(l == v);
    1155             :         }
    1156           1 :         v <<= 1;
    1157             :         {
    1158           1 :             unsigned __int128 l(302231454903657293676544_uint128);
    1159           1 :             CATCH_REQUIRE(l == v);
    1160             :         }
    1161           1 :         v <<= 1;
    1162             :         {
    1163           1 :             unsigned __int128 l(604462909807314587353088_uint128);
    1164           1 :             CATCH_REQUIRE(l == v);
    1165             :         }
    1166           1 :         v <<= 1;
    1167             :         {
    1168           1 :             unsigned __int128 l(1208925819614629174706176_uint128);
    1169           1 :             CATCH_REQUIRE(l == v);
    1170             :         }
    1171           1 :         v <<= 1;
    1172             :         {
    1173           1 :             unsigned __int128 l(2417851639229258349412352_uint128);
    1174           1 :             CATCH_REQUIRE(l == v);
    1175             :         }
    1176           1 :         v <<= 1;
    1177             :         {
    1178           1 :             unsigned __int128 l(4835703278458516698824704_uint128);
    1179           1 :             CATCH_REQUIRE(l == v);
    1180             :         }
    1181           1 :         v <<= 1;
    1182             :         {
    1183           1 :             unsigned __int128 l(9671406556917033397649408_uint128);
    1184           1 :             CATCH_REQUIRE(l == v);
    1185             :         }
    1186           1 :         v <<= 1;
    1187             :         {
    1188           1 :             unsigned __int128 l(19342813113834066795298816_uint128);
    1189           1 :             CATCH_REQUIRE(l == v);
    1190             :         }
    1191           1 :         v <<= 1;
    1192             :         {
    1193           1 :             unsigned __int128 l(38685626227668133590597632_uint128);
    1194           1 :             CATCH_REQUIRE(l == v);
    1195             :         }
    1196           1 :         v <<= 1;
    1197             :         {
    1198           1 :             unsigned __int128 l(77371252455336267181195264_uint128);
    1199           1 :             CATCH_REQUIRE(l == v);
    1200             :         }
    1201           1 :         v <<= 1;
    1202             :         {
    1203           1 :             unsigned __int128 l(154742504910672534362390528_uint128);
    1204           1 :             CATCH_REQUIRE(l == v);
    1205             :         }
    1206           1 :         v <<= 1;
    1207             :         {
    1208           1 :             unsigned __int128 l(309485009821345068724781056_uint128);
    1209           1 :             CATCH_REQUIRE(l == v);
    1210             :         }
    1211           1 :         v <<= 1;
    1212             :         {
    1213           1 :             unsigned __int128 l(618970019642690137449562112_uint128);
    1214           1 :             CATCH_REQUIRE(l == v);
    1215             :         }
    1216           1 :         v <<= 1;
    1217             :         {
    1218           1 :             unsigned __int128 l(1237940039285380274899124224_uint128);
    1219           1 :             CATCH_REQUIRE(l == v);
    1220             :         }
    1221           1 :         v <<= 1;
    1222             :         {
    1223           1 :             unsigned __int128 l(2475880078570760549798248448_uint128);
    1224           1 :             CATCH_REQUIRE(l == v);
    1225             :         }
    1226           1 :         v <<= 1;
    1227             :         {
    1228           1 :             unsigned __int128 l(4951760157141521099596496896_uint128);
    1229           1 :             CATCH_REQUIRE(l == v);
    1230             :         }
    1231           1 :         v <<= 1;
    1232             :         {
    1233           1 :             unsigned __int128 l(9903520314283042199192993792_uint128);
    1234           1 :             CATCH_REQUIRE(l == v);
    1235             :         }
    1236           1 :         v <<= 1;
    1237             :         {
    1238           1 :             unsigned __int128 l(19807040628566084398385987584_uint128);
    1239           1 :             CATCH_REQUIRE(l == v);
    1240             :         }
    1241           1 :         v <<= 1;
    1242             :         {
    1243           1 :             unsigned __int128 l(39614081257132168796771975168_uint128);
    1244           1 :             CATCH_REQUIRE(l == v);
    1245             :         }
    1246           1 :         v <<= 1;
    1247             :         {
    1248           1 :             unsigned __int128 l(79228162514264337593543950336_uint128);
    1249           1 :             CATCH_REQUIRE(l == v);
    1250             :         }
    1251           1 :         v <<= 1;
    1252             :         {
    1253           1 :             unsigned __int128 l(158456325028528675187087900672_uint128);
    1254           1 :             CATCH_REQUIRE(l == v);
    1255             :         }
    1256           1 :         v <<= 1;
    1257             :         {
    1258           1 :             unsigned __int128 l(316912650057057350374175801344_uint128);
    1259           1 :             CATCH_REQUIRE(l == v);
    1260             :         }
    1261           1 :         v <<= 1;
    1262             :         {
    1263           1 :             unsigned __int128 l(633825300114114700748351602688_uint128);
    1264           1 :             CATCH_REQUIRE(l == v);
    1265             :         }
    1266           1 :         v <<= 1;
    1267             :         {
    1268           1 :             unsigned __int128 l(1267650600228229401496703205376_uint128);
    1269           1 :             CATCH_REQUIRE(l == v);
    1270             :         }
    1271           1 :         v <<= 1;
    1272             :         {
    1273           1 :             unsigned __int128 l(2535301200456458802993406410752_uint128);
    1274           1 :             CATCH_REQUIRE(l == v);
    1275             :         }
    1276           1 :         v <<= 1;
    1277             :         {
    1278           1 :             unsigned __int128 l(5070602400912917605986812821504_uint128);
    1279           1 :             CATCH_REQUIRE(l == v);
    1280             :         }
    1281           1 :         v <<= 1;
    1282             :         {
    1283           1 :             unsigned __int128 l(10141204801825835211973625643008_uint128);
    1284           1 :             CATCH_REQUIRE(l == v);
    1285             :         }
    1286           1 :         v <<= 1;
    1287             :         {
    1288           1 :             unsigned __int128 l(20282409603651670423947251286016_uint128);
    1289           1 :             CATCH_REQUIRE(l == v);
    1290             :         }
    1291           1 :         v <<= 1;
    1292             :         {
    1293           1 :             unsigned __int128 l(40564819207303340847894502572032_uint128);
    1294           1 :             CATCH_REQUIRE(l == v);
    1295             :         }
    1296           1 :         v <<= 1;
    1297             :         {
    1298           1 :             unsigned __int128 l(81129638414606681695789005144064_uint128);
    1299           1 :             CATCH_REQUIRE(l == v);
    1300             :         }
    1301           1 :         v <<= 1;
    1302             :         {
    1303           1 :             unsigned __int128 l(162259276829213363391578010288128_uint128);
    1304           1 :             CATCH_REQUIRE(l == v);
    1305             :         }
    1306           1 :         v <<= 1;
    1307             :         {
    1308           1 :             unsigned __int128 l(324518553658426726783156020576256_uint128);
    1309           1 :             CATCH_REQUIRE(l == v);
    1310             :         }
    1311           1 :         v <<= 1;
    1312             :         {
    1313           1 :             unsigned __int128 l(649037107316853453566312041152512_uint128);
    1314           1 :             CATCH_REQUIRE(l == v);
    1315             :         }
    1316           1 :         v <<= 1;
    1317             :         {
    1318           1 :             unsigned __int128 l(1298074214633706907132624082305024_uint128);
    1319           1 :             CATCH_REQUIRE(l == v);
    1320             :         }
    1321           1 :         v <<= 1;
    1322             :         {
    1323           1 :             unsigned __int128 l(2596148429267413814265248164610048_uint128);
    1324           1 :             CATCH_REQUIRE(l == v);
    1325             :         }
    1326           1 :         v <<= 1;
    1327             :         {
    1328           1 :             unsigned __int128 l(5192296858534827628530496329220096_uint128);
    1329           1 :             CATCH_REQUIRE(l == v);
    1330             :         }
    1331           1 :         v <<= 1;
    1332             :         {
    1333           1 :             unsigned __int128 l(10384593717069655257060992658440192_uint128);
    1334           1 :             CATCH_REQUIRE(l == v);
    1335             :         }
    1336           1 :         v <<= 1;
    1337             :         {
    1338           1 :             unsigned __int128 l(20769187434139310514121985316880384_uint128);
    1339           1 :             CATCH_REQUIRE(l == v);
    1340             :         }
    1341           1 :         v <<= 1;
    1342             :         {
    1343           1 :             unsigned __int128 l(41538374868278621028243970633760768_uint128);
    1344           1 :             CATCH_REQUIRE(l == v);
    1345             :         }
    1346           1 :         v <<= 1;
    1347             :         {
    1348           1 :             unsigned __int128 l(83076749736557242056487941267521536_uint128);
    1349           1 :             CATCH_REQUIRE(l == v);
    1350             :         }
    1351           1 :         v <<= 1;
    1352             :         {
    1353           1 :             unsigned __int128 l(166153499473114484112975882535043072_uint128);
    1354           1 :             CATCH_REQUIRE(l == v);
    1355             :         }
    1356           1 :         v <<= 1;
    1357             :         {
    1358           1 :             unsigned __int128 l(332306998946228968225951765070086144_uint128);
    1359           1 :             CATCH_REQUIRE(l == v);
    1360             :         }
    1361           1 :         v <<= 1;
    1362             :         {
    1363           1 :             unsigned __int128 l(664613997892457936451903530140172288_uint128);
    1364           1 :             CATCH_REQUIRE(l == v);
    1365             :         }
    1366           1 :         v <<= 1;
    1367             :         {
    1368           1 :             unsigned __int128 l(1329227995784915872903807060280344576_uint128);
    1369           1 :             CATCH_REQUIRE(l == v);
    1370             :         }
    1371           1 :         v <<= 1;
    1372             :         {
    1373           1 :             unsigned __int128 l(2658455991569831745807614120560689152_uint128);
    1374           1 :             CATCH_REQUIRE(l == v);
    1375             :         }
    1376           1 :         v <<= 1;
    1377             :         {
    1378           1 :             unsigned __int128 l(5316911983139663491615228241121378304_uint128);
    1379           1 :             CATCH_REQUIRE(l == v);
    1380             :         }
    1381           1 :         v <<= 1;
    1382             :         {
    1383           1 :             unsigned __int128 l(10633823966279326983230456482242756608_uint128);
    1384           1 :             CATCH_REQUIRE(l == v);
    1385             :         }
    1386           1 :         v <<= 1;
    1387             :         {
    1388           1 :             unsigned __int128 l(21267647932558653966460912964485513216_uint128);
    1389           1 :             CATCH_REQUIRE(l == v);
    1390             :         }
    1391           1 :         v <<= 1;
    1392             :         {
    1393           1 :             unsigned __int128 l(42535295865117307932921825928971026432_uint128);
    1394           1 :             CATCH_REQUIRE(l == v);
    1395             :         }
    1396           1 :         v <<= 1;
    1397             :         {
    1398           1 :             unsigned __int128 l(85070591730234615865843651857942052864_uint128);
    1399           1 :             CATCH_REQUIRE(l == v);
    1400             :         }
    1401             :     }
    1402             :     CATCH_END_SECTION()
    1403             : 
    1404           6 :     CATCH_START_SECTION("[u]int128_literal: large numbers in decimal, hexadecimal, octal and binary")
    1405             :     {
    1406             :         using namespace snapdev::literals;
    1407             : 
    1408             :         // test a negative decimal number of 128 bits
    1409             :         // (the minus is arithmetic in the compiler, not part of the literal)
    1410             :         {
    1411           1 :             __int128 const top(0x1485B9AD5F387C22);
    1412           1 :             __int128 const bottom(0x1A94732C11DA7DAF);
    1413           1 :             __int128 const v((top << 64UL) | bottom);
    1414           1 :             __int128 l(-27278901379601602040904188621408075183_int128);
    1415           1 :             CATCH_REQUIRE(l == -v);
    1416             :         }
    1417             : 
    1418             :         // test an hexadecimal number of 128 bits
    1419             :         {
    1420           1 :             unsigned __int128 const top(0xFA83B93D5C387C22);
    1421           1 :             unsigned __int128 const bottom(0x1A94C329111A73AF);
    1422           1 :             unsigned __int128 const v((top << 64UL) | bottom);
    1423           1 :             unsigned __int128 l(0xFA83B93D5C387c221A94C329111a73AF_uint128);
    1424           1 :             CATCH_REQUIRE(l == v);
    1425             :         }
    1426             : 
    1427             :         // test an octal number of 126 bits
    1428             :         {
    1429           1 :             unsigned __int128 const top(0352035623653416076042); // this is only 63 bits (21 digits each representing 3 bits)
    1430           1 :             unsigned __int128 const bottom(0152246062442106471657);
    1431           1 :             unsigned __int128 const v((top << 63UL) | bottom);
    1432           1 :             unsigned __int128 l(0352035623653416076042152246062442106471657_uint128);
    1433           1 :             CATCH_REQUIRE(l == v);
    1434             :         }
    1435             : 
    1436             :         // test a binary number of 126 bits
    1437             :         {
    1438           1 :             unsigned __int128 const top(0352535624657416076142); // this is only 63 bits (21 digits each representing 3 bits)
    1439           1 :             unsigned __int128 const bottom(0132245062742106471635);
    1440           1 :             unsigned __int128 const v((top << 63UL) | bottom);
    1441           1 :             unsigned __int128 l(0b11101010101011101110010100110101111100001110000111110001100010001011010010100101000110010111100010001000110100111001110011101_uint128);
    1442           1 :             CATCH_REQUIRE(l == v);
    1443             :         }
    1444             :     }
    1445             :     CATCH_END_SECTION()
    1446             : 
    1447           9 : }
    1448             : 
    1449             : 
    1450             : // vim: ts=4 sw=4 et

Generated by: LCOV version 1.13