LCOV - code coverage report
Current view: top level - tests - catch_int128.cpp (source / functions) Hit Total Coverage
Test: coverage.info Lines: 1471 1471 100.0 %
Date: 2024-01-13 16:46:58 Functions: 3 3 100.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : // Copyright (c) 2021-2024  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 3 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
      17             : // along with this program.  If not, see <https://www.gnu.org/licenses/>.
      18             : 
      19             : /** \file
      20             :  * \brief Verify the various __int128 extension functions.
      21             :  *
      22             :  * This file implements tests to verify:
      23             :  *
      24             :  * * support printing out 128 bit numbers
      25             :  * * support of 128 bit literals
      26             :  * * support of 128 bit powers
      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             : #include    <snapdev/math.h>
      40             : 
      41             : 
      42             : // last include
      43             : //
      44             : #include    <snapdev/poison.h>
      45             : 
      46             : 
      47             : // __int128 is not ISO C++ yet
      48             : #pragma GCC diagnostic ignored "-Wpedantic"
      49             : 
      50             : 
      51           5 : CATCH_TEST_CASE("ostream_int128", "[stream][int128]")
      52             : {
      53           5 :     CATCH_START_SECTION("ostream_int128: small numbers (-10 to +10)")
      54             :     {
      55          22 :         for(int i(-10); i <= 10; ++i)
      56             :         {
      57          21 :             __int128 l(i);
      58             : 
      59             :             // decimal
      60             :             {
      61          21 :                 std::stringstream v;
      62          21 :                 v << l;
      63          21 :                 CATCH_REQUIRE(std::to_string(i) == v.str());
      64          21 :             }
      65             :             {
      66          21 :                 std::stringstream v;
      67          21 :                 v << std::showpos << l;
      68             : 
      69             :                 // WARNING: I broke up the following on multiple lines because
      70             :                 //          there seems to be a huge bug in g++12.3.0 which
      71             :                 //          otherwise generates a buffer overflow error
      72             :                 //
      73             :                 //std::string e((i >= 0 ? "+" : "") + std::to_string(i));
      74          21 :                 std::string e(std::to_string(i));
      75          21 :                 if(i >= 0)
      76             :                 {
      77          11 :                     e = "+" + e;
      78             :                 }
      79             : 
      80          21 :                 CATCH_REQUIRE(e == v.str());
      81          21 :             }
      82             : 
      83             :             // hexadecimal
      84             :             {
      85          21 :                 std::stringstream v, e;
      86          21 :                 v << std::hex << l;
      87          21 :                 e << (i < 0 ? "ffffffffffffffffffffffff" : "") << std::hex << i;
      88          21 :                 CATCH_REQUIRE(e.str() == v.str());
      89          21 :             }
      90             :             {
      91          21 :                 std::stringstream v, e;
      92          21 :                 v << std::showpos << std::hex << l;
      93          21 :                 e << (i < 0 ? "ffffffffffffffffffffffff" : "") << std::hex << i;
      94          21 :                 CATCH_REQUIRE(v.str() == e.str());
      95          21 :             }
      96             :             {
      97          21 :                 std::stringstream v, e;
      98          21 :                 v << std::hex << std::uppercase << l;
      99          21 :                 e << (i < 0 ? "FFFFFFFFFFFFFFFFFFFFFFFF" : "") << std::hex << std::uppercase << i;
     100          21 :                 CATCH_REQUIRE(v.str() == e.str());
     101          21 :             }
     102             :             {
     103          21 :                 std::stringstream v, e;
     104          21 :                 v << std::hex << std::showbase << l;
     105          21 :                 e << (i < 0 ? "0xffffffffffffffffffffffff" : "0x") << std::hex << i;
     106          21 :                 CATCH_REQUIRE(v.str() == (i == 0 ? "0" : e.str()));
     107          21 :             }
     108             :             {
     109          21 :                 std::stringstream v, e;
     110          21 :                 v << std::hex << std::showbase << std::uppercase << std::showpos << l;
     111          21 :                 e << (i < 0 ? "0XFFFFFFFFFFFFFFFFFFFFFFFF" : "0X") << std::hex << std::uppercase << i;
     112          21 :                 CATCH_REQUIRE(v.str() == (i == 0 ? "0" : e.str()));
     113          21 :             }
     114             : 
     115             :             // octal
     116             :             {
     117          21 :                 std::stringstream v, e;
     118          21 :                 v << std::oct << l;
     119          21 :                 e << (i < 0 ? "37777777777777777777777777777777" : "") << std::oct << (i & 0x1FFFFFFFF);
     120          21 :                 CATCH_REQUIRE(v.str() == e.str());
     121          21 :             }
     122             :             {
     123          21 :                 std::stringstream v, e;
     124          21 :                 v << std::oct << std::showbase << l;
     125          21 :                 e << (i < 0 ? "037777777777777777777777777777777" : "0") << std::oct << (i & 0x1FFFFFFFF);
     126          21 :                 CATCH_REQUIRE(v.str() == (i == 0 ? "0" : e.str()));
     127          21 :             }
     128             :             {
     129          21 :                 std::stringstream v, e;
     130          21 :                 v << std::oct << std::showpos << std::showbase << l;
     131          21 :                 e << (i < 0 ? "037777777777777777777777777777777" : "0") << std::oct << (i & 0x1FFFFFFFF);
     132          21 :                 CATCH_REQUIRE(v.str() == (i == 0 ? "0" : e.str()));
     133          21 :             }
     134             :         }
     135             :     }
     136           5 :     CATCH_END_SECTION()
     137             : 
     138           5 :     CATCH_START_SECTION("ostream_int128: positive numbers")
     139             :     {
     140        1001 :         for(int i(0); i < 1000; ++i)
     141             :         {
     142        1000 :             std::int32_t v((rand() & 0x7FFFFFFF));
     143        1000 :             __int128 l(v);
     144        1000 :             std::stringstream ss;
     145        1000 :             ss << l;
     146        1000 :             CATCH_REQUIRE(ss.str() == std::to_string(v));
     147        1000 :         }
     148             :     }
     149           5 :     CATCH_END_SECTION()
     150             : 
     151           5 :     CATCH_START_SECTION("ostream_int128: negative numbers")
     152             :     {
     153        1001 :         for(int i(0); i < 1000; ++i)
     154             :         {
     155        1000 :             std::int32_t v(-(rand() & 0x7FFFFFFF));
     156        1000 :             __int128 l(v);
     157        1000 :             std::stringstream ss;
     158        1000 :             ss << l;
     159        1000 :             CATCH_REQUIRE(ss.str() == std::to_string(v));
     160        1000 :         }
     161             :     }
     162           5 :     CATCH_END_SECTION()
     163             : 
     164           5 :     CATCH_START_SECTION("ostream_int128: most positive number")
     165             :     {
     166           1 :         unsigned __int128 l(0);
     167           1 :         l = ~l;
     168             :         {
     169           1 :             std::stringstream ss;
     170           1 :             ss << l;
     171           1 :             CATCH_REQUIRE(ss.str() == "340282366920938463463374607431768211455");
     172           1 :         }
     173             :         {
     174           1 :             std::stringstream ss;
     175           1 :             ss << std::hex << l;
     176           1 :             CATCH_REQUIRE(ss.str() == "ffffffffffffffffffffffffffffffff");
     177           1 :         }
     178             :         {
     179           1 :             std::stringstream ss;
     180           1 :             ss << std::hex << std::uppercase << l;
     181           1 :             CATCH_REQUIRE(ss.str() == "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF");
     182           1 :         }
     183             :         {
     184           1 :             std::stringstream ss;
     185           1 :             ss << std::hex << std::showbase << l;
     186           1 :             CATCH_REQUIRE(ss.str() == "0xffffffffffffffffffffffffffffffff");
     187           1 :         }
     188             :         {
     189           1 :             std::stringstream ss;
     190           1 :             ss << std::hex << std::uppercase << std::showbase << l;
     191           1 :             CATCH_REQUIRE(ss.str() == "0XFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF");
     192           1 :         }
     193             :     }
     194           5 :     CATCH_END_SECTION()
     195             : 
     196           5 :     CATCH_START_SECTION("ostream_int128: most negative number")
     197             :     {
     198           1 :         __int128 l(1);
     199           1 :         l <<= 127;
     200             :         {
     201           1 :             std::stringstream ss;
     202           1 :             ss << l;
     203           1 :             CATCH_REQUIRE(ss.str() == "-170141183460469231731687303715884105728");
     204           1 :         }
     205             :         {
     206           1 :             std::stringstream ss;
     207           1 :             ss << std::hex << l;
     208           1 :             CATCH_REQUIRE(ss.str() == "80000000000000000000000000000000");
     209           1 :         }
     210             :     }
     211           5 :     CATCH_END_SECTION()
     212           5 : }
     213             : 
     214             : 
     215           3 : CATCH_TEST_CASE("int128_literal", "[literal][int128]")
     216             : {
     217           3 :     CATCH_START_SECTION("int128_literal: zero and powers of two")
     218             :     {
     219             :         using namespace snapdev::literals;
     220             : 
     221           1 :         __int128 m0(0_int128);
     222           1 :         CATCH_REQUIRE(m0 == 0);
     223             : 
     224           1 :         __int128 v(1);
     225             :         {
     226           1 :             __int128 l(1_int128);
     227           1 :             CATCH_REQUIRE(l == v);
     228             :         }
     229             :         {
     230           1 :             __int128 l("1"_int128);
     231           1 :             CATCH_REQUIRE(l == v);
     232             :         }
     233           1 :         v <<= 1;
     234             :         {
     235           1 :             __int128 l(2_int128);
     236           1 :             CATCH_REQUIRE(l == v);
     237             :         }
     238             :         {
     239           1 :             __int128 l("2"_int128);
     240           1 :             CATCH_REQUIRE(l == v);
     241             :         }
     242           1 :         v <<= 1;
     243             :         {
     244           1 :             __int128 l(4_int128);
     245           1 :             CATCH_REQUIRE(l == v);
     246             :         }
     247             :         {
     248           1 :             __int128 l("4"_int128);
     249           1 :             CATCH_REQUIRE(l == v);
     250             :         }
     251           1 :         v <<= 1;
     252             :         {
     253           1 :             __int128 l(8_int128);
     254           1 :             CATCH_REQUIRE(l == v);
     255             :         }
     256             :         {
     257           1 :             __int128 l("8"_int128);
     258           1 :             CATCH_REQUIRE(l == v);
     259             :         }
     260           1 :         v <<= 1;
     261             :         {
     262           1 :             __int128 l(16_int128);
     263           1 :             CATCH_REQUIRE(l == v);
     264             :         }
     265             :         {
     266           1 :             __int128 l("16"_int128);
     267           1 :             CATCH_REQUIRE(l == v);
     268             :         }
     269           1 :         v <<= 1;
     270             :         {
     271           1 :             __int128 l(32_int128);
     272           1 :             CATCH_REQUIRE(l == v);
     273             :         }
     274             :         {
     275           1 :             __int128 l("32"_int128);
     276           1 :             CATCH_REQUIRE(l == v);
     277             :         }
     278           1 :         v <<= 1;
     279             :         {
     280           1 :             __int128 l(64_int128);
     281           1 :             CATCH_REQUIRE(l == v);
     282             :         }
     283             :         {
     284           1 :             __int128 l("64"_int128);
     285           1 :             CATCH_REQUIRE(l == v);
     286             :         }
     287           1 :         v <<= 1;
     288             :         {
     289           1 :             __int128 l(128_int128);
     290           1 :             CATCH_REQUIRE(l == v);
     291             :         }
     292             :         {
     293           1 :             __int128 l("128"_int128);
     294           1 :             CATCH_REQUIRE(l == v);
     295             :         }
     296           1 :         v <<= 1;
     297             :         {
     298           1 :             __int128 l(256_int128);
     299           1 :             CATCH_REQUIRE(l == v);
     300             :         }
     301             :         {
     302           1 :             __int128 l("256"_int128);
     303           1 :             CATCH_REQUIRE(l == v);
     304             :         }
     305           1 :         v <<= 1;
     306             :         {
     307           1 :             __int128 l(512_int128);
     308           1 :             CATCH_REQUIRE(l == v);
     309             :         }
     310             :         {
     311           1 :             __int128 l("512"_int128);
     312           1 :             CATCH_REQUIRE(l == v);
     313             :         }
     314           1 :         v <<= 1;
     315             :         {
     316           1 :             __int128 l(1024_int128);
     317           1 :             CATCH_REQUIRE(l == v);
     318             :         }
     319             :         {
     320           1 :             __int128 l("1024"_int128);
     321           1 :             CATCH_REQUIRE(l == v);
     322             :         }
     323           1 :         v <<= 1;
     324             :         {
     325           1 :             __int128 l(2048_int128);
     326           1 :             CATCH_REQUIRE(l == v);
     327             :         }
     328             :         {
     329           1 :             __int128 l("2048"_int128);
     330           1 :             CATCH_REQUIRE(l == v);
     331             :         }
     332           1 :         v <<= 1;
     333             :         {
     334           1 :             __int128 l(4096_int128);
     335           1 :             CATCH_REQUIRE(l == v);
     336             :         }
     337             :         {
     338           1 :             __int128 l("4096"_int128);
     339           1 :             CATCH_REQUIRE(l == v);
     340             :         }
     341           1 :         v <<= 1;
     342             :         {
     343           1 :             __int128 l(8192_int128);
     344           1 :             CATCH_REQUIRE(l == v);
     345             :         }
     346             :         {
     347           1 :             __int128 l("8192"_int128);
     348           1 :             CATCH_REQUIRE(l == v);
     349             :         }
     350           1 :         v <<= 1;
     351             :         {
     352           1 :             __int128 l(16384_int128);
     353           1 :             CATCH_REQUIRE(l == v);
     354             :         }
     355             :         {
     356           1 :             __int128 l("16384"_int128);
     357           1 :             CATCH_REQUIRE(l == v);
     358             :         }
     359           1 :         v <<= 1;
     360             :         {
     361           1 :             __int128 l(32768_int128);
     362           1 :             CATCH_REQUIRE(l == v);
     363             :         }
     364             :         {
     365           1 :             __int128 l("32768"_int128);
     366           1 :             CATCH_REQUIRE(l == v);
     367             :         }
     368           1 :         v <<= 1;
     369             :         {
     370           1 :             __int128 l(65536_int128);
     371           1 :             CATCH_REQUIRE(l == v);
     372             :         }
     373             :         {
     374           1 :             __int128 l("65536"_int128);
     375           1 :             CATCH_REQUIRE(l == v);
     376             :         }
     377           1 :         v <<= 1;
     378             :         {
     379           1 :             __int128 l(131072_int128);
     380           1 :             CATCH_REQUIRE(l == v);
     381             :         }
     382             :         {
     383           1 :             __int128 l("131072"_int128);
     384           1 :             CATCH_REQUIRE(l == v);
     385             :         }
     386           1 :         v <<= 1;
     387             :         {
     388           1 :             __int128 l(262144_int128);
     389           1 :             CATCH_REQUIRE(l == v);
     390             :         }
     391             :         {
     392           1 :             __int128 l("262144"_int128);
     393           1 :             CATCH_REQUIRE(l == v);
     394             :         }
     395           1 :         v <<= 1;
     396             :         {
     397           1 :             __int128 l(524288_int128);
     398           1 :             CATCH_REQUIRE(l == v);
     399             :         }
     400             :         {
     401           1 :             __int128 l("524288"_int128);
     402           1 :             CATCH_REQUIRE(l == v);
     403             :         }
     404           1 :         v <<= 1;
     405             :         {
     406           1 :             __int128 l(1048576_int128);
     407           1 :             CATCH_REQUIRE(l == v);
     408             :         }
     409             :         {
     410           1 :             __int128 l("1048576"_int128);
     411           1 :             CATCH_REQUIRE(l == v);
     412             :         }
     413           1 :         v <<= 1;
     414             :         {
     415           1 :             __int128 l(2097152_int128);
     416           1 :             CATCH_REQUIRE(l == v);
     417             :         }
     418             :         {
     419           1 :             __int128 l("2097152"_int128);
     420           1 :             CATCH_REQUIRE(l == v);
     421             :         }
     422           1 :         v <<= 1;
     423             :         {
     424           1 :             __int128 l(4194304_int128);
     425           1 :             CATCH_REQUIRE(l == v);
     426             :         }
     427             :         {
     428           1 :             __int128 l("4194304"_int128);
     429           1 :             CATCH_REQUIRE(l == v);
     430             :         }
     431           1 :         v <<= 1;
     432             :         {
     433           1 :             __int128 l(8388608_int128);
     434           1 :             CATCH_REQUIRE(l == v);
     435             :         }
     436             :         {
     437           1 :             __int128 l("8388608"_int128);
     438           1 :             CATCH_REQUIRE(l == v);
     439             :         }
     440           1 :         v <<= 1;
     441             :         {
     442           1 :             __int128 l(16777216_int128);
     443           1 :             CATCH_REQUIRE(l == v);
     444             :         }
     445             :         {
     446           1 :             __int128 l("16777216"_int128);
     447           1 :             CATCH_REQUIRE(l == v);
     448             :         }
     449           1 :         v <<= 1;
     450             :         {
     451           1 :             __int128 l(33554432_int128);
     452           1 :             CATCH_REQUIRE(l == v);
     453             :         }
     454             :         {
     455           1 :             __int128 l("33554432"_int128);
     456           1 :             CATCH_REQUIRE(l == v);
     457             :         }
     458           1 :         v <<= 1;
     459             :         {
     460           1 :             __int128 l(67108864_int128);
     461           1 :             CATCH_REQUIRE(l == v);
     462             :         }
     463             :         {
     464           1 :             __int128 l("67108864"_int128);
     465           1 :             CATCH_REQUIRE(l == v);
     466             :         }
     467           1 :         v <<= 1;
     468             :         {
     469           1 :             __int128 l(134217728_int128);
     470           1 :             CATCH_REQUIRE(l == v);
     471             :         }
     472             :         {
     473           1 :             __int128 l("134217728"_int128);
     474           1 :             CATCH_REQUIRE(l == v);
     475             :         }
     476           1 :         v <<= 1;
     477             :         {
     478           1 :             __int128 l(268435456_int128);
     479           1 :             CATCH_REQUIRE(l == v);
     480             :         }
     481             :         {
     482           1 :             __int128 l("268435456"_int128);
     483           1 :             CATCH_REQUIRE(l == v);
     484             :         }
     485           1 :         v <<= 1;
     486             :         {
     487           1 :             __int128 l(536870912_int128);
     488           1 :             CATCH_REQUIRE(l == v);
     489             :         }
     490             :         {
     491           1 :             __int128 l("536870912"_int128);
     492           1 :             CATCH_REQUIRE(l == v);
     493             :         }
     494           1 :         v <<= 1;
     495             :         {
     496           1 :             __int128 l(1073741824_int128);
     497           1 :             CATCH_REQUIRE(l == v);
     498             :         }
     499             :         {
     500           1 :             __int128 l("1073741824"_int128);
     501           1 :             CATCH_REQUIRE(l == v);
     502             :         }
     503           1 :         v <<= 1;
     504             :         {
     505           1 :             __int128 l(2147483648_int128);
     506           1 :             CATCH_REQUIRE(l == v);
     507             :         }
     508             :         {
     509           1 :             __int128 l("2147483648"_int128);
     510           1 :             CATCH_REQUIRE(l == v);
     511             :         }
     512           1 :         v <<= 1;
     513             :         {
     514           1 :             __int128 l(4294967296_int128);
     515           1 :             CATCH_REQUIRE(l == v);
     516             :         }
     517             :         {
     518           1 :             __int128 l("4294967296"_int128);
     519           1 :             CATCH_REQUIRE(l == v);
     520             :         }
     521           1 :         v <<= 1;
     522             :         {
     523           1 :             __int128 l(8589934592_int128);
     524           1 :             CATCH_REQUIRE(l == v);
     525             :         }
     526             :         {
     527           1 :             __int128 l("8589934592"_int128);
     528           1 :             CATCH_REQUIRE(l == v);
     529             :         }
     530           1 :         v <<= 1;
     531             :         {
     532           1 :             __int128 l(17179869184_int128);
     533           1 :             CATCH_REQUIRE(l == v);
     534             :         }
     535             :         {
     536           1 :             __int128 l("17179869184"_int128);
     537           1 :             CATCH_REQUIRE(l == v);
     538             :         }
     539           1 :         v <<= 1;
     540             :         {
     541           1 :             __int128 l(34359738368_int128);
     542           1 :             CATCH_REQUIRE(l == v);
     543             :         }
     544             :         {
     545           1 :             __int128 l("34359738368"_int128);
     546           1 :             CATCH_REQUIRE(l == v);
     547             :         }
     548           1 :         v <<= 1;
     549             :         {
     550           1 :             __int128 l(68719476736_int128);
     551           1 :             CATCH_REQUIRE(l == v);
     552             :         }
     553             :         {
     554           1 :             __int128 l("68719476736"_int128);
     555           1 :             CATCH_REQUIRE(l == v);
     556             :         }
     557           1 :         v <<= 1;
     558             :         {
     559           1 :             __int128 l(137438953472_int128);
     560           1 :             CATCH_REQUIRE(l == v);
     561             :         }
     562             :         {
     563           1 :             __int128 l("137438953472"_int128);
     564           1 :             CATCH_REQUIRE(l == v);
     565             :         }
     566           1 :         v <<= 1;
     567             :         {
     568           1 :             __int128 l(274877906944_int128);
     569           1 :             CATCH_REQUIRE(l == v);
     570             :         }
     571             :         {
     572           1 :             __int128 l("274877906944"_int128);
     573           1 :             CATCH_REQUIRE(l == v);
     574             :         }
     575           1 :         v <<= 1;
     576             :         {
     577           1 :             __int128 l(549755813888_int128);
     578           1 :             CATCH_REQUIRE(l == v);
     579             :         }
     580             :         {
     581           1 :             __int128 l("549755813888"_int128);
     582           1 :             CATCH_REQUIRE(l == v);
     583             :         }
     584           1 :         v <<= 1;
     585             :         {
     586           1 :             __int128 l(1099511627776_int128);
     587           1 :             CATCH_REQUIRE(l == v);
     588             :         }
     589             :         {
     590           1 :             __int128 l("1099511627776"_int128);
     591           1 :             CATCH_REQUIRE(l == v);
     592             :         }
     593           1 :         v <<= 1;
     594             :         {
     595           1 :             __int128 l(2199023255552_int128);
     596           1 :             CATCH_REQUIRE(l == v);
     597             :         }
     598             :         {
     599           1 :             __int128 l("2199023255552"_int128);
     600           1 :             CATCH_REQUIRE(l == v);
     601             :         }
     602           1 :         v <<= 1;
     603             :         {
     604           1 :             __int128 l(4398046511104_int128);
     605           1 :             CATCH_REQUIRE(l == v);
     606             :         }
     607             :         {
     608           1 :             __int128 l("4398046511104"_int128);
     609           1 :             CATCH_REQUIRE(l == v);
     610             :         }
     611           1 :         v <<= 1;
     612             :         {
     613           1 :             __int128 l(8796093022208_int128);
     614           1 :             CATCH_REQUIRE(l == v);
     615             :         }
     616             :         {
     617           1 :             __int128 l("8796093022208"_int128);
     618           1 :             CATCH_REQUIRE(l == v);
     619             :         }
     620           1 :         v <<= 1;
     621             :         {
     622           1 :             __int128 l(17592186044416_int128);
     623           1 :             CATCH_REQUIRE(l == v);
     624             :         }
     625             :         {
     626           1 :             __int128 l("17592186044416"_int128);
     627           1 :             CATCH_REQUIRE(l == v);
     628             :         }
     629           1 :         v <<= 1;
     630             :         {
     631           1 :             __int128 l(35184372088832_int128);
     632           1 :             CATCH_REQUIRE(l == v);
     633             :         }
     634             :         {
     635           1 :             __int128 l("35184372088832"_int128);
     636           1 :             CATCH_REQUIRE(l == v);
     637             :         }
     638           1 :         v <<= 1;
     639             :         {
     640           1 :             __int128 l(70368744177664_int128);
     641           1 :             CATCH_REQUIRE(l == v);
     642             :         }
     643             :         {
     644           1 :             __int128 l("70368744177664"_int128);
     645           1 :             CATCH_REQUIRE(l == v);
     646             :         }
     647           1 :         v <<= 1;
     648             :         {
     649           1 :             __int128 l(140737488355328_int128);
     650           1 :             CATCH_REQUIRE(l == v);
     651             :         }
     652             :         {
     653           1 :             __int128 l("140737488355328"_int128);
     654           1 :             CATCH_REQUIRE(l == v);
     655             :         }
     656           1 :         v <<= 1;
     657             :         {
     658           1 :             __int128 l(281474976710656_int128);
     659           1 :             CATCH_REQUIRE(l == v);
     660             :         }
     661             :         {
     662           1 :             __int128 l("281474976710656"_int128);
     663           1 :             CATCH_REQUIRE(l == v);
     664             :         }
     665           1 :         v <<= 1;
     666             :         {
     667           1 :             __int128 l(562949953421312_int128);
     668           1 :             CATCH_REQUIRE(l == v);
     669             :         }
     670             :         {
     671           1 :             __int128 l("562949953421312"_int128);
     672           1 :             CATCH_REQUIRE(l == v);
     673             :         }
     674           1 :         v <<= 1;
     675             :         {
     676           1 :             __int128 l(1125899906842624_int128);
     677           1 :             CATCH_REQUIRE(l == v);
     678             :         }
     679             :         {
     680           1 :             __int128 l("1125899906842624"_int128);
     681           1 :             CATCH_REQUIRE(l == v);
     682             :         }
     683           1 :         v <<= 1;
     684             :         {
     685           1 :             __int128 l(2251799813685248_int128);
     686           1 :             CATCH_REQUIRE(l == v);
     687             :         }
     688             :         {
     689           1 :             __int128 l("2251799813685248"_int128);
     690           1 :             CATCH_REQUIRE(l == v);
     691             :         }
     692           1 :         v <<= 1;
     693             :         {
     694           1 :             __int128 l(4503599627370496_int128);
     695           1 :             CATCH_REQUIRE(l == v);
     696             :         }
     697             :         {
     698           1 :             __int128 l("4503599627370496"_int128);
     699           1 :             CATCH_REQUIRE(l == v);
     700             :         }
     701           1 :         v <<= 1;
     702             :         {
     703           1 :             __int128 l(9007199254740992_int128);
     704           1 :             CATCH_REQUIRE(l == v);
     705             :         }
     706             :         {
     707           1 :             __int128 l("9007199254740992"_int128);
     708           1 :             CATCH_REQUIRE(l == v);
     709             :         }
     710           1 :         v <<= 1;
     711             :         {
     712           1 :             __int128 l(18014398509481984_int128);
     713           1 :             CATCH_REQUIRE(l == v);
     714             :         }
     715             :         {
     716           1 :             __int128 l("18014398509481984"_int128);
     717           1 :             CATCH_REQUIRE(l == v);
     718             :         }
     719           1 :         v <<= 1;
     720             :         {
     721           1 :             __int128 l(36028797018963968_int128);
     722           1 :             CATCH_REQUIRE(l == v);
     723             :         }
     724             :         {
     725           1 :             __int128 l("36028797018963968"_int128);
     726           1 :             CATCH_REQUIRE(l == v);
     727             :         }
     728           1 :         v <<= 1;
     729             :         {
     730           1 :             __int128 l(72057594037927936_int128);
     731           1 :             CATCH_REQUIRE(l == v);
     732             :         }
     733             :         {
     734           1 :             __int128 l("72057594037927936"_int128);
     735           1 :             CATCH_REQUIRE(l == v);
     736             :         }
     737           1 :         v <<= 1;
     738             :         {
     739           1 :             __int128 l(144115188075855872_int128);
     740           1 :             CATCH_REQUIRE(l == v);
     741             :         }
     742             :         {
     743           1 :             __int128 l("144115188075855872"_int128);
     744           1 :             CATCH_REQUIRE(l == v);
     745             :         }
     746           1 :         v <<= 1;
     747             :         {
     748           1 :             __int128 l(288230376151711744_int128);
     749           1 :             CATCH_REQUIRE(l == v);
     750             :         }
     751             :         {
     752           1 :             __int128 l("288230376151711744"_int128);
     753           1 :             CATCH_REQUIRE(l == v);
     754             :         }
     755           1 :         v <<= 1;
     756             :         {
     757           1 :             __int128 l(576460752303423488_int128);
     758           1 :             CATCH_REQUIRE(l == v);
     759             :         }
     760             :         {
     761           1 :             __int128 l("576460752303423488"_int128);
     762           1 :             CATCH_REQUIRE(l == v);
     763             :         }
     764           1 :         v <<= 1;
     765             :         {
     766           1 :             __int128 l(1152921504606846976_int128);
     767           1 :             CATCH_REQUIRE(l == v);
     768             :         }
     769             :         {
     770           1 :             __int128 l("1152921504606846976"_int128);
     771           1 :             CATCH_REQUIRE(l == v);
     772             :         }
     773           1 :         v <<= 1;
     774             :         {
     775           1 :             __int128 l(2305843009213693952_int128);
     776           1 :             CATCH_REQUIRE(l == v);
     777             :         }
     778             :         {
     779           1 :             __int128 l("2305843009213693952"_int128);
     780           1 :             CATCH_REQUIRE(l == v);
     781             :         }
     782           1 :         v <<= 1;
     783             :         {
     784           1 :             __int128 l(4611686018427387904_int128);
     785           1 :             CATCH_REQUIRE(l == v);
     786             :         }
     787             :         {
     788           1 :             __int128 l("4611686018427387904"_int128);
     789           1 :             CATCH_REQUIRE(l == v);
     790             :         }
     791           1 :         v <<= 1;
     792             :         {
     793           1 :             __int128 l(9223372036854775808_int128);
     794           1 :             CATCH_REQUIRE(l == v);
     795             :         }
     796             :         {
     797           1 :             __int128 l("9223372036854775808"_int128);
     798           1 :             CATCH_REQUIRE(l == v);
     799             :         }
     800           1 :         v <<= 1;
     801             :         {
     802           1 :             __int128 l(18446744073709551616_int128);
     803           1 :             CATCH_REQUIRE(l == v);
     804             :         }
     805             :         {
     806           1 :             __int128 l("18446744073709551616"_int128);
     807           1 :             CATCH_REQUIRE(l == v);
     808             :         }
     809           1 :         v <<= 1;
     810             :         {
     811           1 :             __int128 l(36893488147419103232_int128);
     812           1 :             CATCH_REQUIRE(l == v);
     813             :         }
     814             :         {
     815           1 :             __int128 l("36893488147419103232"_int128);
     816           1 :             CATCH_REQUIRE(l == v);
     817             :         }
     818           1 :         v <<= 1;
     819             :         {
     820           1 :             __int128 l(73786976294838206464_int128);
     821           1 :             CATCH_REQUIRE(l == v);
     822             :         }
     823             :         {
     824           1 :             __int128 l("73786976294838206464"_int128);
     825           1 :             CATCH_REQUIRE(l == v);
     826             :         }
     827           1 :         v <<= 1;
     828             :         {
     829           1 :             __int128 l(147573952589676412928_int128);
     830           1 :             CATCH_REQUIRE(l == v);
     831             :         }
     832             :         {
     833           1 :             __int128 l("147573952589676412928"_int128);
     834           1 :             CATCH_REQUIRE(l == v);
     835             :         }
     836           1 :         v <<= 1;
     837             :         {
     838           1 :             __int128 l(295147905179352825856_int128);
     839           1 :             CATCH_REQUIRE(l == v);
     840             :         }
     841             :         {
     842           1 :             __int128 l("295147905179352825856"_int128);
     843           1 :             CATCH_REQUIRE(l == v);
     844             :         }
     845           1 :         v <<= 1;
     846             :         {
     847           1 :             __int128 l(590295810358705651712_int128);
     848           1 :             CATCH_REQUIRE(l == v);
     849             :         }
     850             :         {
     851           1 :             __int128 l("590295810358705651712"_int128);
     852           1 :             CATCH_REQUIRE(l == v);
     853             :         }
     854           1 :         v <<= 1;
     855             :         {
     856           1 :             __int128 l(1180591620717411303424_int128);
     857           1 :             CATCH_REQUIRE(l == v);
     858             :         }
     859             :         {
     860           1 :             __int128 l("1180591620717411303424"_int128);
     861           1 :             CATCH_REQUIRE(l == v);
     862             :         }
     863           1 :         v <<= 1;
     864             :         {
     865           1 :             __int128 l(2361183241434822606848_int128);
     866           1 :             CATCH_REQUIRE(l == v);
     867             :         }
     868             :         {
     869           1 :             __int128 l("2361183241434822606848"_int128);
     870           1 :             CATCH_REQUIRE(l == v);
     871             :         }
     872           1 :         v <<= 1;
     873             :         {
     874           1 :             __int128 l(4722366482869645213696_int128);
     875           1 :             CATCH_REQUIRE(l == v);
     876             :         }
     877             :         {
     878           1 :             __int128 l("4722366482869645213696"_int128);
     879           1 :             CATCH_REQUIRE(l == v);
     880             :         }
     881           1 :         v <<= 1;
     882             :         {
     883           1 :             __int128 l(9444732965739290427392_int128);
     884           1 :             CATCH_REQUIRE(l == v);
     885             :         }
     886             :         {
     887           1 :             __int128 l("9444732965739290427392"_int128);
     888           1 :             CATCH_REQUIRE(l == v);
     889             :         }
     890           1 :         v <<= 1;
     891             :         {
     892           1 :             __int128 l(18889465931478580854784_int128);
     893           1 :             CATCH_REQUIRE(l == v);
     894             :         }
     895             :         {
     896           1 :             __int128 l("18889465931478580854784"_int128);
     897           1 :             CATCH_REQUIRE(l == v);
     898             :         }
     899           1 :         v <<= 1;
     900             :         {
     901           1 :             __int128 l(37778931862957161709568_int128);
     902           1 :             CATCH_REQUIRE(l == v);
     903             :         }
     904             :         {
     905           1 :             __int128 l("37778931862957161709568"_int128);
     906           1 :             CATCH_REQUIRE(l == v);
     907             :         }
     908           1 :         v <<= 1;
     909             :         {
     910           1 :             __int128 l(75557863725914323419136_int128);
     911           1 :             CATCH_REQUIRE(l == v);
     912             :         }
     913             :         {
     914           1 :             __int128 l("75557863725914323419136"_int128);
     915           1 :             CATCH_REQUIRE(l == v);
     916             :         }
     917           1 :         v <<= 1;
     918             :         {
     919           1 :             __int128 l(151115727451828646838272_int128);
     920           1 :             CATCH_REQUIRE(l == v);
     921             :         }
     922             :         {
     923           1 :             __int128 l("151115727451828646838272"_int128);
     924           1 :             CATCH_REQUIRE(l == v);
     925             :         }
     926           1 :         v <<= 1;
     927             :         {
     928           1 :             __int128 l(302231454903657293676544_int128);
     929           1 :             CATCH_REQUIRE(l == v);
     930             :         }
     931             :         {
     932           1 :             __int128 l("302231454903657293676544"_int128);
     933           1 :             CATCH_REQUIRE(l == v);
     934             :         }
     935           1 :         v <<= 1;
     936             :         {
     937           1 :             __int128 l(604462909807314587353088_int128);
     938           1 :             CATCH_REQUIRE(l == v);
     939             :         }
     940             :         {
     941           1 :             __int128 l("604462909807314587353088"_int128);
     942           1 :             CATCH_REQUIRE(l == v);
     943             :         }
     944           1 :         v <<= 1;
     945             :         {
     946           1 :             __int128 l(1208925819614629174706176_int128);
     947           1 :             CATCH_REQUIRE(l == v);
     948             :         }
     949             :         {
     950           1 :             __int128 l("1208925819614629174706176"_int128);
     951           1 :             CATCH_REQUIRE(l == v);
     952             :         }
     953           1 :         v <<= 1;
     954             :         {
     955           1 :             __int128 l(2417851639229258349412352_int128);
     956           1 :             CATCH_REQUIRE(l == v);
     957             :         }
     958             :         {
     959           1 :             __int128 l("2417851639229258349412352"_int128);
     960           1 :             CATCH_REQUIRE(l == v);
     961             :         }
     962           1 :         v <<= 1;
     963             :         {
     964           1 :             __int128 l(4835703278458516698824704_int128);
     965           1 :             CATCH_REQUIRE(l == v);
     966             :         }
     967             :         {
     968           1 :             __int128 l("4835703278458516698824704"_int128);
     969           1 :             CATCH_REQUIRE(l == v);
     970             :         }
     971           1 :         v <<= 1;
     972             :         {
     973           1 :             __int128 l(9671406556917033397649408_int128);
     974           1 :             CATCH_REQUIRE(l == v);
     975             :         }
     976             :         {
     977           1 :             __int128 l("9671406556917033397649408"_int128);
     978           1 :             CATCH_REQUIRE(l == v);
     979             :         }
     980           1 :         v <<= 1;
     981             :         {
     982           1 :             __int128 l(19342813113834066795298816_int128);
     983           1 :             CATCH_REQUIRE(l == v);
     984             :         }
     985             :         {
     986           1 :             __int128 l("19342813113834066795298816"_int128);
     987           1 :             CATCH_REQUIRE(l == v);
     988             :         }
     989           1 :         v <<= 1;
     990             :         {
     991           1 :             __int128 l(38685626227668133590597632_int128);
     992           1 :             CATCH_REQUIRE(l == v);
     993             :         }
     994             :         {
     995           1 :             __int128 l("38685626227668133590597632"_int128);
     996           1 :             CATCH_REQUIRE(l == v);
     997             :         }
     998           1 :         v <<= 1;
     999             :         {
    1000           1 :             __int128 l(77371252455336267181195264_int128);
    1001           1 :             CATCH_REQUIRE(l == v);
    1002             :         }
    1003             :         {
    1004           1 :             __int128 l("77371252455336267181195264"_int128);
    1005           1 :             CATCH_REQUIRE(l == v);
    1006             :         }
    1007           1 :         v <<= 1;
    1008             :         {
    1009           1 :             __int128 l(154742504910672534362390528_int128);
    1010           1 :             CATCH_REQUIRE(l == v);
    1011             :         }
    1012             :         {
    1013           1 :             __int128 l("154742504910672534362390528"_int128);
    1014           1 :             CATCH_REQUIRE(l == v);
    1015             :         }
    1016           1 :         v <<= 1;
    1017             :         {
    1018           1 :             __int128 l(309485009821345068724781056_int128);
    1019           1 :             CATCH_REQUIRE(l == v);
    1020             :         }
    1021             :         {
    1022           1 :             __int128 l("309485009821345068724781056"_int128);
    1023           1 :             CATCH_REQUIRE(l == v);
    1024             :         }
    1025           1 :         v <<= 1;
    1026             :         {
    1027           1 :             __int128 l(618970019642690137449562112_int128);
    1028           1 :             CATCH_REQUIRE(l == v);
    1029             :         }
    1030             :         {
    1031           1 :             __int128 l("618970019642690137449562112"_int128);
    1032           1 :             CATCH_REQUIRE(l == v);
    1033             :         }
    1034           1 :         v <<= 1;
    1035             :         {
    1036           1 :             __int128 l(1237940039285380274899124224_int128);
    1037           1 :             CATCH_REQUIRE(l == v);
    1038             :         }
    1039             :         {
    1040           1 :             __int128 l("1237940039285380274899124224"_int128);
    1041           1 :             CATCH_REQUIRE(l == v);
    1042             :         }
    1043           1 :         v <<= 1;
    1044             :         {
    1045           1 :             __int128 l(2475880078570760549798248448_int128);
    1046           1 :             CATCH_REQUIRE(l == v);
    1047             :         }
    1048             :         {
    1049           1 :             __int128 l("2475880078570760549798248448"_int128);
    1050           1 :             CATCH_REQUIRE(l == v);
    1051             :         }
    1052           1 :         v <<= 1;
    1053             :         {
    1054           1 :             __int128 l(4951760157141521099596496896_int128);
    1055           1 :             CATCH_REQUIRE(l == v);
    1056             :         }
    1057             :         {
    1058           1 :             __int128 l("4951760157141521099596496896"_int128);
    1059           1 :             CATCH_REQUIRE(l == v);
    1060             :         }
    1061           1 :         v <<= 1;
    1062             :         {
    1063           1 :             __int128 l(9903520314283042199192993792_int128);
    1064           1 :             CATCH_REQUIRE(l == v);
    1065             :         }
    1066             :         {
    1067           1 :             __int128 l("9903520314283042199192993792"_int128);
    1068           1 :             CATCH_REQUIRE(l == v);
    1069             :         }
    1070           1 :         v <<= 1;
    1071             :         {
    1072           1 :             __int128 l(19807040628566084398385987584_int128);
    1073           1 :             CATCH_REQUIRE(l == v);
    1074             :         }
    1075             :         {
    1076           1 :             __int128 l("19807040628566084398385987584"_int128);
    1077           1 :             CATCH_REQUIRE(l == v);
    1078             :         }
    1079           1 :         v <<= 1;
    1080             :         {
    1081           1 :             __int128 l(39614081257132168796771975168_int128);
    1082           1 :             CATCH_REQUIRE(l == v);
    1083             :         }
    1084             :         {
    1085           1 :             __int128 l("39614081257132168796771975168"_int128);
    1086           1 :             CATCH_REQUIRE(l == v);
    1087             :         }
    1088           1 :         v <<= 1;
    1089             :         {
    1090           1 :             __int128 l(79228162514264337593543950336_int128);
    1091           1 :             CATCH_REQUIRE(l == v);
    1092             :         }
    1093             :         {
    1094           1 :             __int128 l("79228162514264337593543950336"_int128);
    1095           1 :             CATCH_REQUIRE(l == v);
    1096             :         }
    1097           1 :         v <<= 1;
    1098             :         {
    1099           1 :             __int128 l(158456325028528675187087900672_int128);
    1100           1 :             CATCH_REQUIRE(l == v);
    1101             :         }
    1102             :         {
    1103           1 :             __int128 l("158456325028528675187087900672"_int128);
    1104           1 :             CATCH_REQUIRE(l == v);
    1105             :         }
    1106           1 :         v <<= 1;
    1107             :         {
    1108           1 :             __int128 l(316912650057057350374175801344_int128);
    1109           1 :             CATCH_REQUIRE(l == v);
    1110             :         }
    1111             :         {
    1112           1 :             __int128 l("316912650057057350374175801344"_int128);
    1113           1 :             CATCH_REQUIRE(l == v);
    1114             :         }
    1115           1 :         v <<= 1;
    1116             :         {
    1117           1 :             __int128 l(633825300114114700748351602688_int128);
    1118           1 :             CATCH_REQUIRE(l == v);
    1119             :         }
    1120             :         {
    1121           1 :             __int128 l("633825300114114700748351602688"_int128);
    1122           1 :             CATCH_REQUIRE(l == v);
    1123             :         }
    1124           1 :         v <<= 1;
    1125             :         {
    1126           1 :             __int128 l(1267650600228229401496703205376_int128);
    1127           1 :             CATCH_REQUIRE(l == v);
    1128             :         }
    1129             :         {
    1130           1 :             __int128 l("1267650600228229401496703205376"_int128);
    1131           1 :             CATCH_REQUIRE(l == v);
    1132             :         }
    1133           1 :         v <<= 1;
    1134             :         {
    1135           1 :             __int128 l(2535301200456458802993406410752_int128);
    1136           1 :             CATCH_REQUIRE(l == v);
    1137             :         }
    1138             :         {
    1139           1 :             __int128 l("2535301200456458802993406410752"_int128);
    1140           1 :             CATCH_REQUIRE(l == v);
    1141             :         }
    1142           1 :         v <<= 1;
    1143             :         {
    1144           1 :             __int128 l(5070602400912917605986812821504_int128);
    1145           1 :             CATCH_REQUIRE(l == v);
    1146             :         }
    1147             :         {
    1148           1 :             __int128 l("5070602400912917605986812821504"_int128);
    1149           1 :             CATCH_REQUIRE(l == v);
    1150             :         }
    1151           1 :         v <<= 1;
    1152             :         {
    1153           1 :             __int128 l(10141204801825835211973625643008_int128);
    1154           1 :             CATCH_REQUIRE(l == v);
    1155             :         }
    1156             :         {
    1157           1 :             __int128 l("10141204801825835211973625643008"_int128);
    1158           1 :             CATCH_REQUIRE(l == v);
    1159             :         }
    1160           1 :         v <<= 1;
    1161             :         {
    1162           1 :             __int128 l(20282409603651670423947251286016_int128);
    1163           1 :             CATCH_REQUIRE(l == v);
    1164             :         }
    1165             :         {
    1166           1 :             __int128 l("20282409603651670423947251286016"_int128);
    1167           1 :             CATCH_REQUIRE(l == v);
    1168             :         }
    1169           1 :         v <<= 1;
    1170             :         {
    1171           1 :             __int128 l(40564819207303340847894502572032_int128);
    1172           1 :             CATCH_REQUIRE(l == v);
    1173             :         }
    1174             :         {
    1175           1 :             __int128 l("40564819207303340847894502572032"_int128);
    1176           1 :             CATCH_REQUIRE(l == v);
    1177             :         }
    1178           1 :         v <<= 1;
    1179             :         {
    1180           1 :             __int128 l(81129638414606681695789005144064_int128);
    1181           1 :             CATCH_REQUIRE(l == v);
    1182             :         }
    1183             :         {
    1184           1 :             __int128 l("81129638414606681695789005144064"_int128);
    1185           1 :             CATCH_REQUIRE(l == v);
    1186             :         }
    1187           1 :         v <<= 1;
    1188             :         {
    1189           1 :             __int128 l(162259276829213363391578010288128_int128);
    1190           1 :             CATCH_REQUIRE(l == v);
    1191             :         }
    1192             :         {
    1193           1 :             __int128 l("162259276829213363391578010288128"_int128);
    1194           1 :             CATCH_REQUIRE(l == v);
    1195             :         }
    1196           1 :         v <<= 1;
    1197             :         {
    1198           1 :             __int128 l(324518553658426726783156020576256_int128);
    1199           1 :             CATCH_REQUIRE(l == v);
    1200             :         }
    1201             :         {
    1202           1 :             __int128 l("324518553658426726783156020576256"_int128);
    1203           1 :             CATCH_REQUIRE(l == v);
    1204             :         }
    1205           1 :         v <<= 1;
    1206             :         {
    1207           1 :             __int128 l(649037107316853453566312041152512_int128);
    1208           1 :             CATCH_REQUIRE(l == v);
    1209             :         }
    1210             :         {
    1211           1 :             __int128 l("649037107316853453566312041152512"_int128);
    1212           1 :             CATCH_REQUIRE(l == v);
    1213             :         }
    1214           1 :         v <<= 1;
    1215             :         {
    1216           1 :             __int128 l(1298074214633706907132624082305024_int128);
    1217           1 :             CATCH_REQUIRE(l == v);
    1218             :         }
    1219             :         {
    1220           1 :             __int128 l("1298074214633706907132624082305024"_int128);
    1221           1 :             CATCH_REQUIRE(l == v);
    1222             :         }
    1223           1 :         v <<= 1;
    1224             :         {
    1225           1 :             __int128 l(2596148429267413814265248164610048_int128);
    1226           1 :             CATCH_REQUIRE(l == v);
    1227             :         }
    1228             :         {
    1229           1 :             __int128 l("2596148429267413814265248164610048"_int128);
    1230           1 :             CATCH_REQUIRE(l == v);
    1231             :         }
    1232           1 :         v <<= 1;
    1233             :         {
    1234           1 :             __int128 l(5192296858534827628530496329220096_int128);
    1235           1 :             CATCH_REQUIRE(l == v);
    1236             :         }
    1237             :         {
    1238           1 :             __int128 l("5192296858534827628530496329220096"_int128);
    1239           1 :             CATCH_REQUIRE(l == v);
    1240             :         }
    1241           1 :         v <<= 1;
    1242             :         {
    1243           1 :             __int128 l(10384593717069655257060992658440192_int128);
    1244           1 :             CATCH_REQUIRE(l == v);
    1245             :         }
    1246             :         {
    1247           1 :             __int128 l("10384593717069655257060992658440192"_int128);
    1248           1 :             CATCH_REQUIRE(l == v);
    1249             :         }
    1250           1 :         v <<= 1;
    1251             :         {
    1252           1 :             __int128 l(20769187434139310514121985316880384_int128);
    1253           1 :             CATCH_REQUIRE(l == v);
    1254             :         }
    1255             :         {
    1256           1 :             __int128 l("20769187434139310514121985316880384"_int128);
    1257           1 :             CATCH_REQUIRE(l == v);
    1258             :         }
    1259           1 :         v <<= 1;
    1260             :         {
    1261           1 :             __int128 l(41538374868278621028243970633760768_int128);
    1262           1 :             CATCH_REQUIRE(l == v);
    1263             :         }
    1264             :         {
    1265           1 :             __int128 l("41538374868278621028243970633760768"_int128);
    1266           1 :             CATCH_REQUIRE(l == v);
    1267             :         }
    1268           1 :         v <<= 1;
    1269             :         {
    1270           1 :             __int128 l(83076749736557242056487941267521536_int128);
    1271           1 :             CATCH_REQUIRE(l == v);
    1272             :         }
    1273             :         {
    1274           1 :             __int128 l("83076749736557242056487941267521536"_int128);
    1275           1 :             CATCH_REQUIRE(l == v);
    1276             :         }
    1277           1 :         v <<= 1;
    1278             :         {
    1279           1 :             __int128 l(166153499473114484112975882535043072_int128);
    1280           1 :             CATCH_REQUIRE(l == v);
    1281             :         }
    1282             :         {
    1283           1 :             __int128 l("166153499473114484112975882535043072"_int128);
    1284           1 :             CATCH_REQUIRE(l == v);
    1285             :         }
    1286           1 :         v <<= 1;
    1287             :         {
    1288           1 :             __int128 l(332306998946228968225951765070086144_int128);
    1289           1 :             CATCH_REQUIRE(l == v);
    1290             :         }
    1291             :         {
    1292           1 :             __int128 l("332306998946228968225951765070086144"_int128);
    1293           1 :             CATCH_REQUIRE(l == v);
    1294             :         }
    1295           1 :         v <<= 1;
    1296             :         {
    1297           1 :             __int128 l(664613997892457936451903530140172288_int128);
    1298           1 :             CATCH_REQUIRE(l == v);
    1299             :         }
    1300             :         {
    1301           1 :             __int128 l("664613997892457936451903530140172288"_int128);
    1302           1 :             CATCH_REQUIRE(l == v);
    1303             :         }
    1304           1 :         v <<= 1;
    1305             :         {
    1306           1 :             __int128 l(1329227995784915872903807060280344576_int128);
    1307           1 :             CATCH_REQUIRE(l == v);
    1308             :         }
    1309             :         {
    1310           1 :             __int128 l("1329227995784915872903807060280344576"_int128);
    1311           1 :             CATCH_REQUIRE(l == v);
    1312             :         }
    1313           1 :         v <<= 1;
    1314             :         {
    1315           1 :             __int128 l(2658455991569831745807614120560689152_int128);
    1316           1 :             CATCH_REQUIRE(l == v);
    1317             :         }
    1318             :         {
    1319           1 :             __int128 l("2658455991569831745807614120560689152"_int128);
    1320           1 :             CATCH_REQUIRE(l == v);
    1321             :         }
    1322           1 :         v <<= 1;
    1323             :         {
    1324           1 :             __int128 l(5316911983139663491615228241121378304_int128);
    1325           1 :             CATCH_REQUIRE(l == v);
    1326             :         }
    1327             :         {
    1328           1 :             __int128 l("5316911983139663491615228241121378304"_int128);
    1329           1 :             CATCH_REQUIRE(l == v);
    1330             :         }
    1331           1 :         v <<= 1;
    1332             :         {
    1333           1 :             __int128 l(10633823966279326983230456482242756608_int128);
    1334           1 :             CATCH_REQUIRE(l == v);
    1335             :         }
    1336             :         {
    1337           1 :             __int128 l("10633823966279326983230456482242756608"_int128);
    1338           1 :             CATCH_REQUIRE(l == v);
    1339             :         }
    1340           1 :         v <<= 1;
    1341             :         {
    1342           1 :             __int128 l(21267647932558653966460912964485513216_int128);
    1343           1 :             CATCH_REQUIRE(l == v);
    1344             :         }
    1345             :         {
    1346           1 :             __int128 l("21267647932558653966460912964485513216"_int128);
    1347           1 :             CATCH_REQUIRE(l == v);
    1348             :         }
    1349           1 :         v <<= 1;
    1350             :         {
    1351           1 :             __int128 l(42535295865117307932921825928971026432_int128);
    1352           1 :             CATCH_REQUIRE(l == v);
    1353             :         }
    1354             :         {
    1355           1 :             __int128 l("42535295865117307932921825928971026432"_int128);
    1356           1 :             CATCH_REQUIRE(l == v);
    1357             :         }
    1358           1 :         v <<= 1;
    1359             :         {
    1360           1 :             __int128 l(85070591730234615865843651857942052864_int128);
    1361           1 :             CATCH_REQUIRE(l == v);
    1362             :         }
    1363             :         {
    1364           1 :             __int128 l("85070591730234615865843651857942052864"_int128);
    1365           1 :             CATCH_REQUIRE(l == v);
    1366             :         }
    1367             :     }
    1368           3 :     CATCH_END_SECTION()
    1369             : 
    1370           3 :     CATCH_START_SECTION("uint128_literal: unsigned zero and powers of two")
    1371             :     {
    1372             :         using namespace snapdev::literals;
    1373             : 
    1374           1 :         unsigned __int128 m0(0_uint128);
    1375           1 :         CATCH_REQUIRE(m0 == 0);
    1376             : 
    1377           1 :         unsigned __int128 v(1);
    1378             :         {
    1379           1 :             unsigned __int128 l(1_uint128);
    1380           1 :             CATCH_REQUIRE(l == v);
    1381             :         }
    1382             :         {
    1383           1 :             unsigned __int128 l("1"_uint128);
    1384           1 :             CATCH_REQUIRE(l == v);
    1385             :         }
    1386           1 :         v <<= 1;
    1387             :         {
    1388           1 :             unsigned __int128 l(2_uint128);
    1389           1 :             CATCH_REQUIRE(l == v);
    1390             :         }
    1391             :         {
    1392           1 :             unsigned __int128 l("2"_uint128);
    1393           1 :             CATCH_REQUIRE(l == v);
    1394             :         }
    1395           1 :         v <<= 1;
    1396             :         {
    1397           1 :             unsigned __int128 l(4_uint128);
    1398           1 :             CATCH_REQUIRE(l == v);
    1399             :         }
    1400             :         {
    1401           1 :             unsigned __int128 l("4"_uint128);
    1402           1 :             CATCH_REQUIRE(l == v);
    1403             :         }
    1404           1 :         v <<= 1;
    1405             :         {
    1406           1 :             unsigned __int128 l(8_uint128);
    1407           1 :             CATCH_REQUIRE(l == v);
    1408             :         }
    1409             :         {
    1410           1 :             unsigned __int128 l("8"_uint128);
    1411           1 :             CATCH_REQUIRE(l == v);
    1412             :         }
    1413           1 :         v <<= 1;
    1414             :         {
    1415           1 :             unsigned __int128 l(16_uint128);
    1416           1 :             CATCH_REQUIRE(l == v);
    1417             :         }
    1418             :         {
    1419           1 :             unsigned __int128 l("16"_uint128);
    1420           1 :             CATCH_REQUIRE(l == v);
    1421             :         }
    1422           1 :         v <<= 1;
    1423             :         {
    1424           1 :             unsigned __int128 l(32_uint128);
    1425           1 :             CATCH_REQUIRE(l == v);
    1426             :         }
    1427             :         {
    1428           1 :             unsigned __int128 l("32"_uint128);
    1429           1 :             CATCH_REQUIRE(l == v);
    1430             :         }
    1431           1 :         v <<= 1;
    1432             :         {
    1433           1 :             unsigned __int128 l(64_uint128);
    1434           1 :             CATCH_REQUIRE(l == v);
    1435             :         }
    1436             :         {
    1437           1 :             unsigned __int128 l("64"_uint128);
    1438           1 :             CATCH_REQUIRE(l == v);
    1439             :         }
    1440           1 :         v <<= 1;
    1441             :         {
    1442           1 :             unsigned __int128 l(128_uint128);
    1443           1 :             CATCH_REQUIRE(l == v);
    1444             :         }
    1445             :         {
    1446           1 :             unsigned __int128 l("128"_uint128);
    1447           1 :             CATCH_REQUIRE(l == v);
    1448             :         }
    1449           1 :         v <<= 1;
    1450             :         {
    1451           1 :             unsigned __int128 l(256_uint128);
    1452           1 :             CATCH_REQUIRE(l == v);
    1453             :         }
    1454             :         {
    1455           1 :             unsigned __int128 l("256"_uint128);
    1456           1 :             CATCH_REQUIRE(l == v);
    1457             :         }
    1458           1 :         v <<= 1;
    1459             :         {
    1460           1 :             unsigned __int128 l(512_uint128);
    1461           1 :             CATCH_REQUIRE(l == v);
    1462             :         }
    1463             :         {
    1464           1 :             unsigned __int128 l("512"_uint128);
    1465           1 :             CATCH_REQUIRE(l == v);
    1466             :         }
    1467           1 :         v <<= 1;
    1468             :         {
    1469           1 :             unsigned __int128 l(1024_uint128);
    1470           1 :             CATCH_REQUIRE(l == v);
    1471             :         }
    1472             :         {
    1473           1 :             unsigned __int128 l("1024"_uint128);
    1474           1 :             CATCH_REQUIRE(l == v);
    1475             :         }
    1476           1 :         v <<= 1;
    1477             :         {
    1478           1 :             unsigned __int128 l(2048_uint128);
    1479           1 :             CATCH_REQUIRE(l == v);
    1480             :         }
    1481             :         {
    1482           1 :             unsigned __int128 l("2048"_uint128);
    1483           1 :             CATCH_REQUIRE(l == v);
    1484             :         }
    1485           1 :         v <<= 1;
    1486             :         {
    1487           1 :             unsigned __int128 l(4096_uint128);
    1488           1 :             CATCH_REQUIRE(l == v);
    1489             :         }
    1490             :         {
    1491           1 :             unsigned __int128 l("4096"_uint128);
    1492           1 :             CATCH_REQUIRE(l == v);
    1493             :         }
    1494           1 :         v <<= 1;
    1495             :         {
    1496           1 :             unsigned __int128 l(8192_uint128);
    1497           1 :             CATCH_REQUIRE(l == v);
    1498             :         }
    1499             :         {
    1500           1 :             unsigned __int128 l("8192"_uint128);
    1501           1 :             CATCH_REQUIRE(l == v);
    1502             :         }
    1503           1 :         v <<= 1;
    1504             :         {
    1505           1 :             unsigned __int128 l(16384_uint128);
    1506           1 :             CATCH_REQUIRE(l == v);
    1507             :         }
    1508             :         {
    1509           1 :             unsigned __int128 l("16384"_uint128);
    1510           1 :             CATCH_REQUIRE(l == v);
    1511             :         }
    1512           1 :         v <<= 1;
    1513             :         {
    1514           1 :             unsigned __int128 l(32768_uint128);
    1515           1 :             CATCH_REQUIRE(l == v);
    1516             :         }
    1517             :         {
    1518           1 :             unsigned __int128 l("32768"_uint128);
    1519           1 :             CATCH_REQUIRE(l == v);
    1520             :         }
    1521           1 :         v <<= 1;
    1522             :         {
    1523           1 :             unsigned __int128 l(65536_uint128);
    1524           1 :             CATCH_REQUIRE(l == v);
    1525             :         }
    1526             :         {
    1527           1 :             unsigned __int128 l("65536"_uint128);
    1528           1 :             CATCH_REQUIRE(l == v);
    1529             :         }
    1530           1 :         v <<= 1;
    1531             :         {
    1532           1 :             unsigned __int128 l(131072_uint128);
    1533           1 :             CATCH_REQUIRE(l == v);
    1534             :         }
    1535             :         {
    1536           1 :             unsigned __int128 l("131072"_uint128);
    1537           1 :             CATCH_REQUIRE(l == v);
    1538             :         }
    1539           1 :         v <<= 1;
    1540             :         {
    1541           1 :             unsigned __int128 l(262144_uint128);
    1542           1 :             CATCH_REQUIRE(l == v);
    1543             :         }
    1544             :         {
    1545           1 :             unsigned __int128 l("262144"_uint128);
    1546           1 :             CATCH_REQUIRE(l == v);
    1547             :         }
    1548           1 :         v <<= 1;
    1549             :         {
    1550           1 :             unsigned __int128 l(524288_uint128);
    1551           1 :             CATCH_REQUIRE(l == v);
    1552             :         }
    1553             :         {
    1554           1 :             unsigned __int128 l("524288"_uint128);
    1555           1 :             CATCH_REQUIRE(l == v);
    1556             :         }
    1557           1 :         v <<= 1;
    1558             :         {
    1559           1 :             unsigned __int128 l(1048576_uint128);
    1560           1 :             CATCH_REQUIRE(l == v);
    1561             :         }
    1562             :         {
    1563           1 :             unsigned __int128 l("1048576"_uint128);
    1564           1 :             CATCH_REQUIRE(l == v);
    1565             :         }
    1566           1 :         v <<= 1;
    1567             :         {
    1568           1 :             unsigned __int128 l(2097152_uint128);
    1569           1 :             CATCH_REQUIRE(l == v);
    1570             :         }
    1571             :         {
    1572           1 :             unsigned __int128 l("2097152"_uint128);
    1573           1 :             CATCH_REQUIRE(l == v);
    1574             :         }
    1575           1 :         v <<= 1;
    1576             :         {
    1577           1 :             unsigned __int128 l(4194304_uint128);
    1578           1 :             CATCH_REQUIRE(l == v);
    1579             :         }
    1580             :         {
    1581           1 :             unsigned __int128 l("4194304"_uint128);
    1582           1 :             CATCH_REQUIRE(l == v);
    1583             :         }
    1584           1 :         v <<= 1;
    1585             :         {
    1586           1 :             unsigned __int128 l(8388608_uint128);
    1587           1 :             CATCH_REQUIRE(l == v);
    1588             :         }
    1589             :         {
    1590           1 :             unsigned __int128 l("8388608"_uint128);
    1591           1 :             CATCH_REQUIRE(l == v);
    1592             :         }
    1593           1 :         v <<= 1;
    1594             :         {
    1595           1 :             unsigned __int128 l(16777216_uint128);
    1596           1 :             CATCH_REQUIRE(l == v);
    1597             :         }
    1598             :         {
    1599           1 :             unsigned __int128 l("16777216"_uint128);
    1600           1 :             CATCH_REQUIRE(l == v);
    1601             :         }
    1602           1 :         v <<= 1;
    1603             :         {
    1604           1 :             unsigned __int128 l(33554432_uint128);
    1605           1 :             CATCH_REQUIRE(l == v);
    1606             :         }
    1607             :         {
    1608           1 :             unsigned __int128 l("33554432"_uint128);
    1609           1 :             CATCH_REQUIRE(l == v);
    1610             :         }
    1611           1 :         v <<= 1;
    1612             :         {
    1613           1 :             unsigned __int128 l(67108864_uint128);
    1614           1 :             CATCH_REQUIRE(l == v);
    1615             :         }
    1616             :         {
    1617           1 :             unsigned __int128 l("67108864"_uint128);
    1618           1 :             CATCH_REQUIRE(l == v);
    1619             :         }
    1620           1 :         v <<= 1;
    1621             :         {
    1622           1 :             unsigned __int128 l(134217728_uint128);
    1623           1 :             CATCH_REQUIRE(l == v);
    1624             :         }
    1625             :         {
    1626           1 :             unsigned __int128 l("134217728"_uint128);
    1627           1 :             CATCH_REQUIRE(l == v);
    1628             :         }
    1629           1 :         v <<= 1;
    1630             :         {
    1631           1 :             unsigned __int128 l(268435456_uint128);
    1632           1 :             CATCH_REQUIRE(l == v);
    1633             :         }
    1634             :         {
    1635           1 :             unsigned __int128 l("268435456"_uint128);
    1636           1 :             CATCH_REQUIRE(l == v);
    1637             :         }
    1638           1 :         v <<= 1;
    1639             :         {
    1640           1 :             unsigned __int128 l(536870912_uint128);
    1641           1 :             CATCH_REQUIRE(l == v);
    1642             :         }
    1643             :         {
    1644           1 :             unsigned __int128 l("536870912"_uint128);
    1645           1 :             CATCH_REQUIRE(l == v);
    1646             :         }
    1647           1 :         v <<= 1;
    1648             :         {
    1649           1 :             unsigned __int128 l(1073741824_uint128);
    1650           1 :             CATCH_REQUIRE(l == v);
    1651             :         }
    1652             :         {
    1653           1 :             unsigned __int128 l("1073741824"_uint128);
    1654           1 :             CATCH_REQUIRE(l == v);
    1655             :         }
    1656           1 :         v <<= 1;
    1657             :         {
    1658           1 :             unsigned __int128 l(2147483648_uint128);
    1659           1 :             CATCH_REQUIRE(l == v);
    1660             :         }
    1661             :         {
    1662           1 :             unsigned __int128 l("2147483648"_uint128);
    1663           1 :             CATCH_REQUIRE(l == v);
    1664             :         }
    1665           1 :         v <<= 1;
    1666             :         {
    1667           1 :             unsigned __int128 l(4294967296_uint128);
    1668           1 :             CATCH_REQUIRE(l == v);
    1669             :         }
    1670             :         {
    1671           1 :             unsigned __int128 l("4294967296"_uint128);
    1672           1 :             CATCH_REQUIRE(l == v);
    1673             :         }
    1674           1 :         v <<= 1;
    1675             :         {
    1676           1 :             unsigned __int128 l(8589934592_uint128);
    1677           1 :             CATCH_REQUIRE(l == v);
    1678             :         }
    1679             :         {
    1680           1 :             unsigned __int128 l("8589934592"_uint128);
    1681           1 :             CATCH_REQUIRE(l == v);
    1682             :         }
    1683           1 :         v <<= 1;
    1684             :         {
    1685           1 :             unsigned __int128 l(17179869184_uint128);
    1686           1 :             CATCH_REQUIRE(l == v);
    1687             :         }
    1688             :         {
    1689           1 :             unsigned __int128 l("17179869184"_uint128);
    1690           1 :             CATCH_REQUIRE(l == v);
    1691             :         }
    1692           1 :         v <<= 1;
    1693             :         {
    1694           1 :             unsigned __int128 l(34359738368_uint128);
    1695           1 :             CATCH_REQUIRE(l == v);
    1696             :         }
    1697             :         {
    1698           1 :             unsigned __int128 l("34359738368"_uint128);
    1699           1 :             CATCH_REQUIRE(l == v);
    1700             :         }
    1701           1 :         v <<= 1;
    1702             :         {
    1703           1 :             unsigned __int128 l(68719476736_uint128);
    1704           1 :             CATCH_REQUIRE(l == v);
    1705             :         }
    1706             :         {
    1707           1 :             unsigned __int128 l("68719476736"_uint128);
    1708           1 :             CATCH_REQUIRE(l == v);
    1709             :         }
    1710           1 :         v <<= 1;
    1711             :         {
    1712           1 :             unsigned __int128 l(137438953472_uint128);
    1713           1 :             CATCH_REQUIRE(l == v);
    1714             :         }
    1715             :         {
    1716           1 :             unsigned __int128 l("137438953472"_uint128);
    1717           1 :             CATCH_REQUIRE(l == v);
    1718             :         }
    1719           1 :         v <<= 1;
    1720             :         {
    1721           1 :             unsigned __int128 l(274877906944_uint128);
    1722           1 :             CATCH_REQUIRE(l == v);
    1723             :         }
    1724             :         {
    1725           1 :             unsigned __int128 l("274877906944"_uint128);
    1726           1 :             CATCH_REQUIRE(l == v);
    1727             :         }
    1728           1 :         v <<= 1;
    1729             :         {
    1730           1 :             unsigned __int128 l(549755813888_uint128);
    1731           1 :             CATCH_REQUIRE(l == v);
    1732             :         }
    1733             :         {
    1734           1 :             unsigned __int128 l("549755813888"_uint128);
    1735           1 :             CATCH_REQUIRE(l == v);
    1736             :         }
    1737           1 :         v <<= 1;
    1738             :         {
    1739           1 :             unsigned __int128 l(1099511627776_uint128);
    1740           1 :             CATCH_REQUIRE(l == v);
    1741             :         }
    1742             :         {
    1743           1 :             unsigned __int128 l("1099511627776"_uint128);
    1744           1 :             CATCH_REQUIRE(l == v);
    1745             :         }
    1746           1 :         v <<= 1;
    1747             :         {
    1748           1 :             unsigned __int128 l(2199023255552_uint128);
    1749           1 :             CATCH_REQUIRE(l == v);
    1750             :         }
    1751             :         {
    1752           1 :             unsigned __int128 l("2199023255552"_uint128);
    1753           1 :             CATCH_REQUIRE(l == v);
    1754             :         }
    1755           1 :         v <<= 1;
    1756             :         {
    1757           1 :             unsigned __int128 l(4398046511104_uint128);
    1758           1 :             CATCH_REQUIRE(l == v);
    1759             :         }
    1760             :         {
    1761           1 :             unsigned __int128 l("4398046511104"_uint128);
    1762           1 :             CATCH_REQUIRE(l == v);
    1763             :         }
    1764           1 :         v <<= 1;
    1765             :         {
    1766           1 :             unsigned __int128 l(8796093022208_uint128);
    1767           1 :             CATCH_REQUIRE(l == v);
    1768             :         }
    1769             :         {
    1770           1 :             unsigned __int128 l("8796093022208"_uint128);
    1771           1 :             CATCH_REQUIRE(l == v);
    1772             :         }
    1773           1 :         v <<= 1;
    1774             :         {
    1775           1 :             unsigned __int128 l(17592186044416_uint128);
    1776           1 :             CATCH_REQUIRE(l == v);
    1777             :         }
    1778             :         {
    1779           1 :             unsigned __int128 l("17592186044416"_uint128);
    1780           1 :             CATCH_REQUIRE(l == v);
    1781             :         }
    1782           1 :         v <<= 1;
    1783             :         {
    1784           1 :             unsigned __int128 l(35184372088832_uint128);
    1785           1 :             CATCH_REQUIRE(l == v);
    1786             :         }
    1787             :         {
    1788           1 :             unsigned __int128 l("35184372088832"_uint128);
    1789           1 :             CATCH_REQUIRE(l == v);
    1790             :         }
    1791           1 :         v <<= 1;
    1792             :         {
    1793           1 :             unsigned __int128 l(70368744177664_uint128);
    1794           1 :             CATCH_REQUIRE(l == v);
    1795             :         }
    1796             :         {
    1797           1 :             unsigned __int128 l("70368744177664"_uint128);
    1798           1 :             CATCH_REQUIRE(l == v);
    1799             :         }
    1800           1 :         v <<= 1;
    1801             :         {
    1802           1 :             unsigned __int128 l(140737488355328_uint128);
    1803           1 :             CATCH_REQUIRE(l == v);
    1804             :         }
    1805             :         {
    1806           1 :             unsigned __int128 l("140737488355328"_uint128);
    1807           1 :             CATCH_REQUIRE(l == v);
    1808             :         }
    1809           1 :         v <<= 1;
    1810             :         {
    1811           1 :             unsigned __int128 l(281474976710656_uint128);
    1812           1 :             CATCH_REQUIRE(l == v);
    1813             :         }
    1814             :         {
    1815           1 :             unsigned __int128 l("281474976710656"_uint128);
    1816           1 :             CATCH_REQUIRE(l == v);
    1817             :         }
    1818           1 :         v <<= 1;
    1819             :         {
    1820           1 :             unsigned __int128 l(562949953421312_uint128);
    1821           1 :             CATCH_REQUIRE(l == v);
    1822             :         }
    1823             :         {
    1824           1 :             unsigned __int128 l("562949953421312"_uint128);
    1825           1 :             CATCH_REQUIRE(l == v);
    1826             :         }
    1827           1 :         v <<= 1;
    1828             :         {
    1829           1 :             unsigned __int128 l(1125899906842624_uint128);
    1830           1 :             CATCH_REQUIRE(l == v);
    1831             :         }
    1832             :         {
    1833           1 :             unsigned __int128 l("1125899906842624"_uint128);
    1834           1 :             CATCH_REQUIRE(l == v);
    1835             :         }
    1836           1 :         v <<= 1;
    1837             :         {
    1838           1 :             unsigned __int128 l(2251799813685248_uint128);
    1839           1 :             CATCH_REQUIRE(l == v);
    1840             :         }
    1841             :         {
    1842           1 :             unsigned __int128 l("2251799813685248"_uint128);
    1843           1 :             CATCH_REQUIRE(l == v);
    1844             :         }
    1845           1 :         v <<= 1;
    1846             :         {
    1847           1 :             unsigned __int128 l(4503599627370496_uint128);
    1848           1 :             CATCH_REQUIRE(l == v);
    1849             :         }
    1850             :         {
    1851           1 :             unsigned __int128 l("4503599627370496"_uint128);
    1852           1 :             CATCH_REQUIRE(l == v);
    1853             :         }
    1854           1 :         v <<= 1;
    1855             :         {
    1856           1 :             unsigned __int128 l(9007199254740992_uint128);
    1857           1 :             CATCH_REQUIRE(l == v);
    1858             :         }
    1859             :         {
    1860           1 :             unsigned __int128 l("9007199254740992"_uint128);
    1861           1 :             CATCH_REQUIRE(l == v);
    1862             :         }
    1863           1 :         v <<= 1;
    1864             :         {
    1865           1 :             unsigned __int128 l(18014398509481984_uint128);
    1866           1 :             CATCH_REQUIRE(l == v);
    1867             :         }
    1868             :         {
    1869           1 :             unsigned __int128 l("18014398509481984"_uint128);
    1870           1 :             CATCH_REQUIRE(l == v);
    1871             :         }
    1872           1 :         v <<= 1;
    1873             :         {
    1874           1 :             unsigned __int128 l(36028797018963968_uint128);
    1875           1 :             CATCH_REQUIRE(l == v);
    1876             :         }
    1877             :         {
    1878           1 :             unsigned __int128 l("36028797018963968"_uint128);
    1879           1 :             CATCH_REQUIRE(l == v);
    1880             :         }
    1881           1 :         v <<= 1;
    1882             :         {
    1883           1 :             unsigned __int128 l(72057594037927936_uint128);
    1884           1 :             CATCH_REQUIRE(l == v);
    1885             :         }
    1886             :         {
    1887           1 :             unsigned __int128 l("72057594037927936"_uint128);
    1888           1 :             CATCH_REQUIRE(l == v);
    1889             :         }
    1890           1 :         v <<= 1;
    1891             :         {
    1892           1 :             unsigned __int128 l(144115188075855872_uint128);
    1893           1 :             CATCH_REQUIRE(l == v);
    1894             :         }
    1895             :         {
    1896           1 :             unsigned __int128 l("144115188075855872"_uint128);
    1897           1 :             CATCH_REQUIRE(l == v);
    1898             :         }
    1899           1 :         v <<= 1;
    1900             :         {
    1901           1 :             unsigned __int128 l(288230376151711744_uint128);
    1902           1 :             CATCH_REQUIRE(l == v);
    1903             :         }
    1904             :         {
    1905           1 :             unsigned __int128 l("288230376151711744"_uint128);
    1906           1 :             CATCH_REQUIRE(l == v);
    1907             :         }
    1908           1 :         v <<= 1;
    1909             :         {
    1910           1 :             unsigned __int128 l(576460752303423488_uint128);
    1911           1 :             CATCH_REQUIRE(l == v);
    1912             :         }
    1913             :         {
    1914           1 :             unsigned __int128 l("576460752303423488"_uint128);
    1915           1 :             CATCH_REQUIRE(l == v);
    1916             :         }
    1917           1 :         v <<= 1;
    1918             :         {
    1919           1 :             unsigned __int128 l(1152921504606846976_uint128);
    1920           1 :             CATCH_REQUIRE(l == v);
    1921             :         }
    1922             :         {
    1923           1 :             unsigned __int128 l("1152921504606846976"_uint128);
    1924           1 :             CATCH_REQUIRE(l == v);
    1925             :         }
    1926           1 :         v <<= 1;
    1927             :         {
    1928           1 :             unsigned __int128 l(2305843009213693952_uint128);
    1929           1 :             CATCH_REQUIRE(l == v);
    1930             :         }
    1931             :         {
    1932           1 :             unsigned __int128 l("2305843009213693952"_uint128);
    1933           1 :             CATCH_REQUIRE(l == v);
    1934             :         }
    1935           1 :         v <<= 1;
    1936             :         {
    1937           1 :             unsigned __int128 l(4611686018427387904_uint128);
    1938           1 :             CATCH_REQUIRE(l == v);
    1939             :         }
    1940             :         {
    1941           1 :             unsigned __int128 l("4611686018427387904"_uint128);
    1942           1 :             CATCH_REQUIRE(l == v);
    1943             :         }
    1944           1 :         v <<= 1;
    1945             :         {
    1946           1 :             unsigned __int128 l(9223372036854775808_uint128);
    1947           1 :             CATCH_REQUIRE(l == v);
    1948             :         }
    1949             :         {
    1950           1 :             unsigned __int128 l("9223372036854775808"_uint128);
    1951           1 :             CATCH_REQUIRE(l == v);
    1952             :         }
    1953           1 :         v <<= 1;
    1954             :         {
    1955           1 :             unsigned __int128 l(18446744073709551616_uint128);
    1956           1 :             CATCH_REQUIRE(l == v);
    1957             :         }
    1958             :         {
    1959           1 :             unsigned __int128 l("18446744073709551616"_uint128);
    1960           1 :             CATCH_REQUIRE(l == v);
    1961             :         }
    1962           1 :         v <<= 1;
    1963             :         {
    1964           1 :             unsigned __int128 l(36893488147419103232_uint128);
    1965           1 :             CATCH_REQUIRE(l == v);
    1966             :         }
    1967             :         {
    1968           1 :             unsigned __int128 l("36893488147419103232"_uint128);
    1969           1 :             CATCH_REQUIRE(l == v);
    1970             :         }
    1971           1 :         v <<= 1;
    1972             :         {
    1973           1 :             unsigned __int128 l(73786976294838206464_uint128);
    1974           1 :             CATCH_REQUIRE(l == v);
    1975             :         }
    1976             :         {
    1977           1 :             unsigned __int128 l("73786976294838206464"_uint128);
    1978           1 :             CATCH_REQUIRE(l == v);
    1979             :         }
    1980           1 :         v <<= 1;
    1981             :         {
    1982           1 :             unsigned __int128 l(147573952589676412928_uint128);
    1983           1 :             CATCH_REQUIRE(l == v);
    1984             :         }
    1985             :         {
    1986           1 :             unsigned __int128 l("147573952589676412928"_uint128);
    1987           1 :             CATCH_REQUIRE(l == v);
    1988             :         }
    1989           1 :         v <<= 1;
    1990             :         {
    1991           1 :             unsigned __int128 l(295147905179352825856_uint128);
    1992           1 :             CATCH_REQUIRE(l == v);
    1993             :         }
    1994             :         {
    1995           1 :             unsigned __int128 l("295147905179352825856"_uint128);
    1996           1 :             CATCH_REQUIRE(l == v);
    1997             :         }
    1998           1 :         v <<= 1;
    1999             :         {
    2000           1 :             unsigned __int128 l(590295810358705651712_uint128);
    2001           1 :             CATCH_REQUIRE(l == v);
    2002             :         }
    2003             :         {
    2004           1 :             unsigned __int128 l("590295810358705651712"_uint128);
    2005           1 :             CATCH_REQUIRE(l == v);
    2006             :         }
    2007           1 :         v <<= 1;
    2008             :         {
    2009           1 :             unsigned __int128 l(1180591620717411303424_uint128);
    2010           1 :             CATCH_REQUIRE(l == v);
    2011             :         }
    2012             :         {
    2013           1 :             unsigned __int128 l("1180591620717411303424"_uint128);
    2014           1 :             CATCH_REQUIRE(l == v);
    2015             :         }
    2016           1 :         v <<= 1;
    2017             :         {
    2018           1 :             unsigned __int128 l(2361183241434822606848_uint128);
    2019           1 :             CATCH_REQUIRE(l == v);
    2020             :         }
    2021             :         {
    2022           1 :             unsigned __int128 l("2361183241434822606848"_uint128);
    2023           1 :             CATCH_REQUIRE(l == v);
    2024             :         }
    2025           1 :         v <<= 1;
    2026             :         {
    2027           1 :             unsigned __int128 l(4722366482869645213696_uint128);
    2028           1 :             CATCH_REQUIRE(l == v);
    2029             :         }
    2030             :         {
    2031           1 :             unsigned __int128 l("4722366482869645213696"_uint128);
    2032           1 :             CATCH_REQUIRE(l == v);
    2033             :         }
    2034           1 :         v <<= 1;
    2035             :         {
    2036           1 :             unsigned __int128 l(9444732965739290427392_uint128);
    2037           1 :             CATCH_REQUIRE(l == v);
    2038             :         }
    2039             :         {
    2040           1 :             unsigned __int128 l("9444732965739290427392"_uint128);
    2041           1 :             CATCH_REQUIRE(l == v);
    2042             :         }
    2043           1 :         v <<= 1;
    2044             :         {
    2045           1 :             unsigned __int128 l(18889465931478580854784_uint128);
    2046           1 :             CATCH_REQUIRE(l == v);
    2047             :         }
    2048             :         {
    2049           1 :             unsigned __int128 l("18889465931478580854784"_uint128);
    2050           1 :             CATCH_REQUIRE(l == v);
    2051             :         }
    2052           1 :         v <<= 1;
    2053             :         {
    2054           1 :             unsigned __int128 l(37778931862957161709568_uint128);
    2055           1 :             CATCH_REQUIRE(l == v);
    2056             :         }
    2057             :         {
    2058           1 :             unsigned __int128 l("37778931862957161709568"_uint128);
    2059           1 :             CATCH_REQUIRE(l == v);
    2060             :         }
    2061           1 :         v <<= 1;
    2062             :         {
    2063           1 :             unsigned __int128 l(75557863725914323419136_uint128);
    2064           1 :             CATCH_REQUIRE(l == v);
    2065             :         }
    2066             :         {
    2067           1 :             unsigned __int128 l("75557863725914323419136"_uint128);
    2068           1 :             CATCH_REQUIRE(l == v);
    2069             :         }
    2070           1 :         v <<= 1;
    2071             :         {
    2072           1 :             unsigned __int128 l(151115727451828646838272_uint128);
    2073           1 :             CATCH_REQUIRE(l == v);
    2074             :         }
    2075             :         {
    2076           1 :             unsigned __int128 l("151115727451828646838272"_uint128);
    2077           1 :             CATCH_REQUIRE(l == v);
    2078             :         }
    2079           1 :         v <<= 1;
    2080             :         {
    2081           1 :             unsigned __int128 l(302231454903657293676544_uint128);
    2082           1 :             CATCH_REQUIRE(l == v);
    2083             :         }
    2084             :         {
    2085           1 :             unsigned __int128 l("302231454903657293676544"_uint128);
    2086           1 :             CATCH_REQUIRE(l == v);
    2087             :         }
    2088           1 :         v <<= 1;
    2089             :         {
    2090           1 :             unsigned __int128 l(604462909807314587353088_uint128);
    2091           1 :             CATCH_REQUIRE(l == v);
    2092             :         }
    2093             :         {
    2094           1 :             unsigned __int128 l("604462909807314587353088"_uint128);
    2095           1 :             CATCH_REQUIRE(l == v);
    2096             :         }
    2097           1 :         v <<= 1;
    2098             :         {
    2099           1 :             unsigned __int128 l(1208925819614629174706176_uint128);
    2100           1 :             CATCH_REQUIRE(l == v);
    2101             :         }
    2102             :         {
    2103           1 :             unsigned __int128 l("1208925819614629174706176"_uint128);
    2104           1 :             CATCH_REQUIRE(l == v);
    2105             :         }
    2106           1 :         v <<= 1;
    2107             :         {
    2108           1 :             unsigned __int128 l(2417851639229258349412352_uint128);
    2109           1 :             CATCH_REQUIRE(l == v);
    2110             :         }
    2111             :         {
    2112           1 :             unsigned __int128 l("2417851639229258349412352"_uint128);
    2113           1 :             CATCH_REQUIRE(l == v);
    2114             :         }
    2115           1 :         v <<= 1;
    2116             :         {
    2117           1 :             unsigned __int128 l(4835703278458516698824704_uint128);
    2118           1 :             CATCH_REQUIRE(l == v);
    2119             :         }
    2120             :         {
    2121           1 :             unsigned __int128 l("4835703278458516698824704"_uint128);
    2122           1 :             CATCH_REQUIRE(l == v);
    2123             :         }
    2124           1 :         v <<= 1;
    2125             :         {
    2126           1 :             unsigned __int128 l(9671406556917033397649408_uint128);
    2127           1 :             CATCH_REQUIRE(l == v);
    2128             :         }
    2129             :         {
    2130           1 :             unsigned __int128 l("9671406556917033397649408"_uint128);
    2131           1 :             CATCH_REQUIRE(l == v);
    2132             :         }
    2133           1 :         v <<= 1;
    2134             :         {
    2135           1 :             unsigned __int128 l(19342813113834066795298816_uint128);
    2136           1 :             CATCH_REQUIRE(l == v);
    2137             :         }
    2138             :         {
    2139           1 :             unsigned __int128 l("19342813113834066795298816"_uint128);
    2140           1 :             CATCH_REQUIRE(l == v);
    2141             :         }
    2142           1 :         v <<= 1;
    2143             :         {
    2144           1 :             unsigned __int128 l(38685626227668133590597632_uint128);
    2145           1 :             CATCH_REQUIRE(l == v);
    2146             :         }
    2147             :         {
    2148           1 :             unsigned __int128 l("38685626227668133590597632"_uint128);
    2149           1 :             CATCH_REQUIRE(l == v);
    2150             :         }
    2151           1 :         v <<= 1;
    2152             :         {
    2153           1 :             unsigned __int128 l(77371252455336267181195264_uint128);
    2154           1 :             CATCH_REQUIRE(l == v);
    2155             :         }
    2156             :         {
    2157           1 :             unsigned __int128 l("77371252455336267181195264"_uint128);
    2158           1 :             CATCH_REQUIRE(l == v);
    2159             :         }
    2160           1 :         v <<= 1;
    2161             :         {
    2162           1 :             unsigned __int128 l(154742504910672534362390528_uint128);
    2163           1 :             CATCH_REQUIRE(l == v);
    2164             :         }
    2165             :         {
    2166           1 :             unsigned __int128 l("154742504910672534362390528"_uint128);
    2167           1 :             CATCH_REQUIRE(l == v);
    2168             :         }
    2169           1 :         v <<= 1;
    2170             :         {
    2171           1 :             unsigned __int128 l(309485009821345068724781056_uint128);
    2172           1 :             CATCH_REQUIRE(l == v);
    2173             :         }
    2174             :         {
    2175           1 :             unsigned __int128 l("309485009821345068724781056"_uint128);
    2176           1 :             CATCH_REQUIRE(l == v);
    2177             :         }
    2178           1 :         v <<= 1;
    2179             :         {
    2180           1 :             unsigned __int128 l(618970019642690137449562112_uint128);
    2181           1 :             CATCH_REQUIRE(l == v);
    2182             :         }
    2183             :         {
    2184           1 :             unsigned __int128 l("618970019642690137449562112"_uint128);
    2185           1 :             CATCH_REQUIRE(l == v);
    2186             :         }
    2187           1 :         v <<= 1;
    2188             :         {
    2189           1 :             unsigned __int128 l(1237940039285380274899124224_uint128);
    2190           1 :             CATCH_REQUIRE(l == v);
    2191             :         }
    2192             :         {
    2193           1 :             unsigned __int128 l("1237940039285380274899124224"_uint128);
    2194           1 :             CATCH_REQUIRE(l == v);
    2195             :         }
    2196           1 :         v <<= 1;
    2197             :         {
    2198           1 :             unsigned __int128 l(2475880078570760549798248448_uint128);
    2199           1 :             CATCH_REQUIRE(l == v);
    2200             :         }
    2201             :         {
    2202           1 :             unsigned __int128 l("2475880078570760549798248448"_uint128);
    2203           1 :             CATCH_REQUIRE(l == v);
    2204             :         }
    2205           1 :         v <<= 1;
    2206             :         {
    2207           1 :             unsigned __int128 l(4951760157141521099596496896_uint128);
    2208           1 :             CATCH_REQUIRE(l == v);
    2209             :         }
    2210             :         {
    2211           1 :             unsigned __int128 l("4951760157141521099596496896"_uint128);
    2212           1 :             CATCH_REQUIRE(l == v);
    2213             :         }
    2214           1 :         v <<= 1;
    2215             :         {
    2216           1 :             unsigned __int128 l(9903520314283042199192993792_uint128);
    2217           1 :             CATCH_REQUIRE(l == v);
    2218             :         }
    2219             :         {
    2220           1 :             unsigned __int128 l("9903520314283042199192993792"_uint128);
    2221           1 :             CATCH_REQUIRE(l == v);
    2222             :         }
    2223           1 :         v <<= 1;
    2224             :         {
    2225           1 :             unsigned __int128 l(19807040628566084398385987584_uint128);
    2226           1 :             CATCH_REQUIRE(l == v);
    2227             :         }
    2228             :         {
    2229           1 :             unsigned __int128 l("19807040628566084398385987584"_uint128);
    2230           1 :             CATCH_REQUIRE(l == v);
    2231             :         }
    2232           1 :         v <<= 1;
    2233             :         {
    2234           1 :             unsigned __int128 l(39614081257132168796771975168_uint128);
    2235           1 :             CATCH_REQUIRE(l == v);
    2236             :         }
    2237             :         {
    2238           1 :             unsigned __int128 l("39614081257132168796771975168"_uint128);
    2239           1 :             CATCH_REQUIRE(l == v);
    2240             :         }
    2241           1 :         v <<= 1;
    2242             :         {
    2243           1 :             unsigned __int128 l(79228162514264337593543950336_uint128);
    2244           1 :             CATCH_REQUIRE(l == v);
    2245             :         }
    2246             :         {
    2247           1 :             unsigned __int128 l("79228162514264337593543950336"_uint128);
    2248           1 :             CATCH_REQUIRE(l == v);
    2249             :         }
    2250           1 :         v <<= 1;
    2251             :         {
    2252           1 :             unsigned __int128 l(158456325028528675187087900672_uint128);
    2253           1 :             CATCH_REQUIRE(l == v);
    2254             :         }
    2255             :         {
    2256           1 :             unsigned __int128 l("158456325028528675187087900672"_uint128);
    2257           1 :             CATCH_REQUIRE(l == v);
    2258             :         }
    2259           1 :         v <<= 1;
    2260             :         {
    2261           1 :             unsigned __int128 l(316912650057057350374175801344_uint128);
    2262           1 :             CATCH_REQUIRE(l == v);
    2263             :         }
    2264             :         {
    2265           1 :             unsigned __int128 l("316912650057057350374175801344"_uint128);
    2266           1 :             CATCH_REQUIRE(l == v);
    2267             :         }
    2268           1 :         v <<= 1;
    2269             :         {
    2270           1 :             unsigned __int128 l(633825300114114700748351602688_uint128);
    2271           1 :             CATCH_REQUIRE(l == v);
    2272             :         }
    2273             :         {
    2274           1 :             unsigned __int128 l("633825300114114700748351602688"_uint128);
    2275           1 :             CATCH_REQUIRE(l == v);
    2276             :         }
    2277           1 :         v <<= 1;
    2278             :         {
    2279           1 :             unsigned __int128 l(1267650600228229401496703205376_uint128);
    2280           1 :             CATCH_REQUIRE(l == v);
    2281             :         }
    2282             :         {
    2283           1 :             unsigned __int128 l("1267650600228229401496703205376"_uint128);
    2284           1 :             CATCH_REQUIRE(l == v);
    2285             :         }
    2286           1 :         v <<= 1;
    2287             :         {
    2288           1 :             unsigned __int128 l(2535301200456458802993406410752_uint128);
    2289           1 :             CATCH_REQUIRE(l == v);
    2290             :         }
    2291             :         {
    2292           1 :             unsigned __int128 l("2535301200456458802993406410752"_uint128);
    2293           1 :             CATCH_REQUIRE(l == v);
    2294             :         }
    2295           1 :         v <<= 1;
    2296             :         {
    2297           1 :             unsigned __int128 l(5070602400912917605986812821504_uint128);
    2298           1 :             CATCH_REQUIRE(l == v);
    2299             :         }
    2300             :         {
    2301           1 :             unsigned __int128 l("5070602400912917605986812821504"_uint128);
    2302           1 :             CATCH_REQUIRE(l == v);
    2303             :         }
    2304           1 :         v <<= 1;
    2305             :         {
    2306           1 :             unsigned __int128 l(10141204801825835211973625643008_uint128);
    2307           1 :             CATCH_REQUIRE(l == v);
    2308             :         }
    2309             :         {
    2310           1 :             unsigned __int128 l("10141204801825835211973625643008"_uint128);
    2311           1 :             CATCH_REQUIRE(l == v);
    2312             :         }
    2313           1 :         v <<= 1;
    2314             :         {
    2315           1 :             unsigned __int128 l(20282409603651670423947251286016_uint128);
    2316           1 :             CATCH_REQUIRE(l == v);
    2317             :         }
    2318             :         {
    2319           1 :             unsigned __int128 l("20282409603651670423947251286016"_uint128);
    2320           1 :             CATCH_REQUIRE(l == v);
    2321             :         }
    2322           1 :         v <<= 1;
    2323             :         {
    2324           1 :             unsigned __int128 l(40564819207303340847894502572032_uint128);
    2325           1 :             CATCH_REQUIRE(l == v);
    2326             :         }
    2327             :         {
    2328           1 :             unsigned __int128 l("40564819207303340847894502572032"_uint128);
    2329           1 :             CATCH_REQUIRE(l == v);
    2330             :         }
    2331           1 :         v <<= 1;
    2332             :         {
    2333           1 :             unsigned __int128 l(81129638414606681695789005144064_uint128);
    2334           1 :             CATCH_REQUIRE(l == v);
    2335             :         }
    2336             :         {
    2337           1 :             unsigned __int128 l("81129638414606681695789005144064"_uint128);
    2338           1 :             CATCH_REQUIRE(l == v);
    2339             :         }
    2340           1 :         v <<= 1;
    2341             :         {
    2342           1 :             unsigned __int128 l(162259276829213363391578010288128_uint128);
    2343           1 :             CATCH_REQUIRE(l == v);
    2344             :         }
    2345             :         {
    2346           1 :             unsigned __int128 l("162259276829213363391578010288128"_uint128);
    2347           1 :             CATCH_REQUIRE(l == v);
    2348             :         }
    2349           1 :         v <<= 1;
    2350             :         {
    2351           1 :             unsigned __int128 l(324518553658426726783156020576256_uint128);
    2352           1 :             CATCH_REQUIRE(l == v);
    2353             :         }
    2354             :         {
    2355           1 :             unsigned __int128 l("324518553658426726783156020576256"_uint128);
    2356           1 :             CATCH_REQUIRE(l == v);
    2357             :         }
    2358           1 :         v <<= 1;
    2359             :         {
    2360           1 :             unsigned __int128 l(649037107316853453566312041152512_uint128);
    2361           1 :             CATCH_REQUIRE(l == v);
    2362             :         }
    2363             :         {
    2364           1 :             unsigned __int128 l("649037107316853453566312041152512"_uint128);
    2365           1 :             CATCH_REQUIRE(l == v);
    2366             :         }
    2367           1 :         v <<= 1;
    2368             :         {
    2369           1 :             unsigned __int128 l(1298074214633706907132624082305024_uint128);
    2370           1 :             CATCH_REQUIRE(l == v);
    2371             :         }
    2372             :         {
    2373           1 :             unsigned __int128 l("1298074214633706907132624082305024"_uint128);
    2374           1 :             CATCH_REQUIRE(l == v);
    2375             :         }
    2376           1 :         v <<= 1;
    2377             :         {
    2378           1 :             unsigned __int128 l(2596148429267413814265248164610048_uint128);
    2379           1 :             CATCH_REQUIRE(l == v);
    2380             :         }
    2381             :         {
    2382           1 :             unsigned __int128 l("2596148429267413814265248164610048"_uint128);
    2383           1 :             CATCH_REQUIRE(l == v);
    2384             :         }
    2385           1 :         v <<= 1;
    2386             :         {
    2387           1 :             unsigned __int128 l(5192296858534827628530496329220096_uint128);
    2388           1 :             CATCH_REQUIRE(l == v);
    2389             :         }
    2390             :         {
    2391           1 :             unsigned __int128 l("5192296858534827628530496329220096"_uint128);
    2392           1 :             CATCH_REQUIRE(l == v);
    2393             :         }
    2394           1 :         v <<= 1;
    2395             :         {
    2396           1 :             unsigned __int128 l(10384593717069655257060992658440192_uint128);
    2397           1 :             CATCH_REQUIRE(l == v);
    2398             :         }
    2399             :         {
    2400           1 :             unsigned __int128 l("10384593717069655257060992658440192"_uint128);
    2401           1 :             CATCH_REQUIRE(l == v);
    2402             :         }
    2403           1 :         v <<= 1;
    2404             :         {
    2405           1 :             unsigned __int128 l(20769187434139310514121985316880384_uint128);
    2406           1 :             CATCH_REQUIRE(l == v);
    2407             :         }
    2408             :         {
    2409           1 :             unsigned __int128 l("20769187434139310514121985316880384"_uint128);
    2410           1 :             CATCH_REQUIRE(l == v);
    2411             :         }
    2412           1 :         v <<= 1;
    2413             :         {
    2414           1 :             unsigned __int128 l(41538374868278621028243970633760768_uint128);
    2415           1 :             CATCH_REQUIRE(l == v);
    2416             :         }
    2417             :         {
    2418           1 :             unsigned __int128 l("41538374868278621028243970633760768"_uint128);
    2419           1 :             CATCH_REQUIRE(l == v);
    2420             :         }
    2421           1 :         v <<= 1;
    2422             :         {
    2423           1 :             unsigned __int128 l(83076749736557242056487941267521536_uint128);
    2424           1 :             CATCH_REQUIRE(l == v);
    2425             :         }
    2426             :         {
    2427           1 :             unsigned __int128 l("83076749736557242056487941267521536"_uint128);
    2428           1 :             CATCH_REQUIRE(l == v);
    2429             :         }
    2430           1 :         v <<= 1;
    2431             :         {
    2432           1 :             unsigned __int128 l(166153499473114484112975882535043072_uint128);
    2433           1 :             CATCH_REQUIRE(l == v);
    2434             :         }
    2435             :         {
    2436           1 :             unsigned __int128 l("166153499473114484112975882535043072"_uint128);
    2437           1 :             CATCH_REQUIRE(l == v);
    2438             :         }
    2439           1 :         v <<= 1;
    2440             :         {
    2441           1 :             unsigned __int128 l(332306998946228968225951765070086144_uint128);
    2442           1 :             CATCH_REQUIRE(l == v);
    2443             :         }
    2444             :         {
    2445           1 :             unsigned __int128 l("332306998946228968225951765070086144"_uint128);
    2446           1 :             CATCH_REQUIRE(l == v);
    2447             :         }
    2448           1 :         v <<= 1;
    2449             :         {
    2450           1 :             unsigned __int128 l(664613997892457936451903530140172288_uint128);
    2451           1 :             CATCH_REQUIRE(l == v);
    2452             :         }
    2453             :         {
    2454           1 :             unsigned __int128 l("664613997892457936451903530140172288"_uint128);
    2455           1 :             CATCH_REQUIRE(l == v);
    2456             :         }
    2457           1 :         v <<= 1;
    2458             :         {
    2459           1 :             unsigned __int128 l(1329227995784915872903807060280344576_uint128);
    2460           1 :             CATCH_REQUIRE(l == v);
    2461             :         }
    2462             :         {
    2463           1 :             unsigned __int128 l("1329227995784915872903807060280344576"_uint128);
    2464           1 :             CATCH_REQUIRE(l == v);
    2465             :         }
    2466           1 :         v <<= 1;
    2467             :         {
    2468           1 :             unsigned __int128 l(2658455991569831745807614120560689152_uint128);
    2469           1 :             CATCH_REQUIRE(l == v);
    2470             :         }
    2471             :         {
    2472           1 :             unsigned __int128 l("2658455991569831745807614120560689152"_uint128);
    2473           1 :             CATCH_REQUIRE(l == v);
    2474             :         }
    2475           1 :         v <<= 1;
    2476             :         {
    2477           1 :             unsigned __int128 l(5316911983139663491615228241121378304_uint128);
    2478           1 :             CATCH_REQUIRE(l == v);
    2479             :         }
    2480             :         {
    2481           1 :             unsigned __int128 l("5316911983139663491615228241121378304"_uint128);
    2482           1 :             CATCH_REQUIRE(l == v);
    2483             :         }
    2484           1 :         v <<= 1;
    2485             :         {
    2486           1 :             unsigned __int128 l(10633823966279326983230456482242756608_uint128);
    2487           1 :             CATCH_REQUIRE(l == v);
    2488             :         }
    2489             :         {
    2490           1 :             unsigned __int128 l("10633823966279326983230456482242756608"_uint128);
    2491           1 :             CATCH_REQUIRE(l == v);
    2492             :         }
    2493           1 :         v <<= 1;
    2494             :         {
    2495           1 :             unsigned __int128 l(21267647932558653966460912964485513216_uint128);
    2496           1 :             CATCH_REQUIRE(l == v);
    2497             :         }
    2498             :         {
    2499           1 :             unsigned __int128 l("21267647932558653966460912964485513216"_uint128);
    2500           1 :             CATCH_REQUIRE(l == v);
    2501             :         }
    2502           1 :         v <<= 1;
    2503             :         {
    2504           1 :             unsigned __int128 l(42535295865117307932921825928971026432_uint128);
    2505           1 :             CATCH_REQUIRE(l == v);
    2506             :         }
    2507             :         {
    2508           1 :             unsigned __int128 l("42535295865117307932921825928971026432"_uint128);
    2509           1 :             CATCH_REQUIRE(l == v);
    2510             :         }
    2511           1 :         v <<= 1;
    2512             :         {
    2513           1 :             unsigned __int128 l(85070591730234615865843651857942052864_uint128);
    2514           1 :             CATCH_REQUIRE(l == v);
    2515             :         }
    2516             :         {
    2517           1 :             unsigned __int128 l("85070591730234615865843651857942052864"_uint128);
    2518           1 :             CATCH_REQUIRE(l == v);
    2519             :         }
    2520             :     }
    2521           3 :     CATCH_END_SECTION()
    2522             : 
    2523           3 :     CATCH_START_SECTION("[u]int128_literal: large numbers in decimal, hexadecimal, octal and binary")
    2524             :     {
    2525             :         using namespace snapdev::literals;
    2526             : 
    2527             :         // test a negative decimal number of 128 bits
    2528             :         // (the minus is arithmetic in the compiler, not part of the literal)
    2529             :         {
    2530           1 :             __int128 const top(0x1485B9AD5F387C22);
    2531           1 :             __int128 const bottom(0x1A94732C11DA7DAF);
    2532           1 :             __int128 const v((top << 64UL) | bottom);
    2533           1 :             __int128 l(-27278901379601602040904188621408075183_int128);
    2534           1 :             CATCH_REQUIRE(l == -v);
    2535           1 :             __int128 s(-"27278901379601602040904188621408075183"_int128);
    2536           1 :             CATCH_REQUIRE(s == -v);
    2537             :         }
    2538             : 
    2539             :         // test an hexadecimal number of 128 bits
    2540             :         {
    2541           1 :             unsigned __int128 const top(0xFA83B93D5C387C22);
    2542           1 :             unsigned __int128 const bottom(0x1A94C329111A73AF);
    2543           1 :             unsigned __int128 const v((top << 64UL) | bottom);
    2544           1 :             unsigned __int128 l(0xFA83B93D5C387c221A94C329111a73AF_uint128);
    2545           1 :             CATCH_REQUIRE(l == v);
    2546           1 :             unsigned __int128 s("0xFA83B93D5C387c221A94C329111a73AF"_uint128);
    2547           1 :             CATCH_REQUIRE(s == v);
    2548             :         }
    2549             : 
    2550             :         // test an octal number of 126 bits
    2551             :         {
    2552           1 :             unsigned __int128 const top(0352035623653416076042); // this is only 63 bits (21 digits each representing 3 bits)
    2553           1 :             unsigned __int128 const bottom(0152246062442106471657);
    2554           1 :             unsigned __int128 const v((top << 63UL) | bottom);
    2555           1 :             unsigned __int128 l(0352035623653416076042152246062442106471657_uint128);
    2556           1 :             CATCH_REQUIRE(l == v);
    2557           1 :             unsigned __int128 s("0352035623653416076042152246062442106471657"_uint128);
    2558           1 :             CATCH_REQUIRE(s == v);
    2559             :         }
    2560             : 
    2561             :         // test a binary number of 126 bits
    2562             :         {
    2563           1 :             unsigned __int128 const top(0352535624657416076142); // this is only 63 bits (21 digits each representing 3 bits)
    2564           1 :             unsigned __int128 const bottom(0132245062742106471635);
    2565           1 :             unsigned __int128 const v((top << 63UL) | bottom);
    2566           1 :             unsigned __int128 l(0b11101010101011101110010100110101111100001110000111110001100010001011010010100101000110010111100010001000110100111001110011101_uint128);
    2567           1 :             CATCH_REQUIRE(l == v);
    2568           1 :             unsigned __int128 s("0b11101010101011101110010100110101111100001110000111110001100010001011010010100101000110010111100010001000110100111001110011101"_uint128);
    2569           1 :             CATCH_REQUIRE(s == v);
    2570             :         }
    2571             :     }
    2572           3 :     CATCH_END_SECTION()
    2573           3 : }
    2574             : 
    2575             : 
    2576           5 : CATCH_TEST_CASE("int128_powers", "[math][int128]")
    2577             : {
    2578           5 :     CATCH_START_SECTION("int128: 2^n with n from 0 to 127")
    2579             :     {
    2580             :         using namespace snapdev::literals;
    2581             : 
    2582           1 :         __int128 v(1);
    2583         129 :         for(int p(0); p < 128; ++p, v *= 2)
    2584             :         {
    2585         128 :             CATCH_REQUIRE(snapdev::pow(2_int128, p) == v);
    2586             :         }
    2587             :     }
    2588           5 :     CATCH_END_SECTION()
    2589             : 
    2590           5 :     CATCH_START_SECTION("uint128: 2^n with n from 0 to 127")
    2591             :     {
    2592             :         using namespace snapdev::literals;
    2593             : 
    2594           1 :         unsigned __int128 v(1);
    2595         129 :         for(int p(0); p < 128; ++p, v *= 2)
    2596             :         {
    2597         128 :             CATCH_REQUIRE(snapdev::pow(2_uint128, p) == v);
    2598             :         }
    2599             :     }
    2600           5 :     CATCH_END_SECTION()
    2601             : 
    2602           5 :     CATCH_START_SECTION("[u]int128: n^0 where n is a random number")
    2603             :     {
    2604             :         using namespace snapdev::literals;
    2605             : 
    2606          11 :         for(int repeat(0); repeat < 10; ++repeat)
    2607             :         {
    2608          10 :             unsigned __int128 u(0_uint128);
    2609         170 :             for(int p(0); p < 16; ++p)
    2610             :             {
    2611         160 :                 u <<= 8;
    2612         160 :                 u |= rand() & 0x00FF;
    2613             :             }
    2614          10 :             CATCH_REQUIRE(snapdev::pow(u, 0) == 1);
    2615             : 
    2616          10 :             __int128 v(0_uint128);
    2617         170 :             for(int p(0); p < 16; ++p)
    2618             :             {
    2619         160 :                 v <<= 8;
    2620         160 :                 v |= rand() & 0x00FF;
    2621             :             }
    2622          10 :             if((repeat & 1) == 0 && v > 0)
    2623             :             {
    2624             :                 // make sure the value is negative at times
    2625             :                 //
    2626           3 :                 v = -v;
    2627             :             }
    2628          10 :             CATCH_REQUIRE(snapdev::pow(v, 0) == 1);
    2629             :         }
    2630             :     }
    2631           5 :     CATCH_END_SECTION()
    2632             : 
    2633           5 :     CATCH_START_SECTION("int128: 1^n with n < 0")
    2634             :     {
    2635             :         using namespace snapdev::literals;
    2636             : 
    2637         129 :         for(int p(-128); p < 0; ++p)
    2638             :         {
    2639         128 :             CATCH_REQUIRE(snapdev::pow(1_int128, p) == 1);
    2640         128 :             CATCH_REQUIRE(snapdev::pow(1_uint128, p) == 1);
    2641             : 
    2642             :             // for any other number, it becomes 0
    2643             :             //
    2644         128 :             CATCH_REQUIRE(snapdev::pow(2_int128, p) == 0);
    2645         128 :             CATCH_REQUIRE(snapdev::pow(2_uint128, p) == 0);
    2646         128 :             CATCH_REQUIRE(snapdev::pow(3_int128, p) == 0);
    2647         128 :             CATCH_REQUIRE(snapdev::pow(3_uint128, p) == 0);
    2648         128 :             CATCH_REQUIRE(snapdev::pow(4_int128, p) == 0);
    2649         128 :             CATCH_REQUIRE(snapdev::pow(4_uint128, p) == 0);
    2650         128 :             CATCH_REQUIRE(snapdev::pow(5_int128, p) == 0);
    2651         128 :             CATCH_REQUIRE(snapdev::pow(5_uint128, p) == 0);
    2652             :         }
    2653             :     }
    2654           5 :     CATCH_END_SECTION()
    2655             : 
    2656           5 :     CATCH_START_SECTION("int128: -1^n with n < 0")
    2657             :     {
    2658             :         using namespace snapdev::literals;
    2659             : 
    2660         129 :         for(int p(-128); p < 0; ++p)
    2661             :         {
    2662         128 :             if((p & 1) == 0)
    2663             :             {
    2664          64 :                 CATCH_REQUIRE(snapdev::pow(-1_int128, p) == 1);
    2665             :             }
    2666             :             else
    2667             :             {
    2668          64 :                 CATCH_REQUIRE(snapdev::pow(-1_int128, p) == -1);
    2669             :             }
    2670             : 
    2671             :             // for any other number, it becomes 0
    2672             :             //
    2673         128 :             CATCH_REQUIRE(snapdev::pow(-2_int128, p) == 0);
    2674         128 :             CATCH_REQUIRE(snapdev::pow(-3_int128, p) == 0);
    2675         128 :             CATCH_REQUIRE(snapdev::pow(-4_int128, p) == 0);
    2676         128 :             CATCH_REQUIRE(snapdev::pow(-5_int128, p) == 0);
    2677             :         }
    2678             :     }
    2679           5 :     CATCH_END_SECTION()
    2680           5 : }
    2681             : 
    2682             : 
    2683             : 
    2684             : // vim: ts=4 sw=4 et

Generated by: LCOV version 1.14

Snap C++ | List of projects | List of versions