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