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
|