1 //===----------------------------------------------------------------------===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 
9 // test <cinttypes>
10 
11 #include <cinttypes>
12 #include <type_traits>
13 
14 #include "test_macros.h"
15 
16 #ifndef INT8_MIN
17 #error INT8_MIN not defined
18 #endif
19 
20 #ifndef INT16_MIN
21 #error INT16_MIN not defined
22 #endif
23 
24 #ifndef INT32_MIN
25 #error INT32_MIN not defined
26 #endif
27 
28 #ifndef INT64_MIN
29 #error INT64_MIN not defined
30 #endif
31 
32 #ifndef INT8_MAX
33 #error INT8_MAX not defined
34 #endif
35 
36 #ifndef INT16_MAX
37 #error INT16_MAX not defined
38 #endif
39 
40 #ifndef INT32_MAX
41 #error INT32_MAX not defined
42 #endif
43 
44 #ifndef INT64_MAX
45 #error INT64_MAX not defined
46 #endif
47 
48 #ifndef UINT8_MAX
49 #error UINT8_MAX not defined
50 #endif
51 
52 #ifndef UINT16_MAX
53 #error UINT16_MAX not defined
54 #endif
55 
56 #ifndef UINT32_MAX
57 #error UINT32_MAX not defined
58 #endif
59 
60 #ifndef UINT64_MAX
61 #error UINT64_MAX not defined
62 #endif
63 
64 #ifndef INT_LEAST8_MIN
65 #error INT_LEAST8_MIN not defined
66 #endif
67 
68 #ifndef INT_LEAST16_MIN
69 #error INT_LEAST16_MIN not defined
70 #endif
71 
72 #ifndef INT_LEAST32_MIN
73 #error INT_LEAST32_MIN not defined
74 #endif
75 
76 #ifndef INT_LEAST64_MIN
77 #error INT_LEAST64_MIN not defined
78 #endif
79 
80 #ifndef INT_LEAST8_MAX
81 #error INT_LEAST8_MAX not defined
82 #endif
83 
84 #ifndef INT_LEAST16_MAX
85 #error INT_LEAST16_MAX not defined
86 #endif
87 
88 #ifndef INT_LEAST32_MAX
89 #error INT_LEAST32_MAX not defined
90 #endif
91 
92 #ifndef INT_LEAST64_MAX
93 #error INT_LEAST64_MAX not defined
94 #endif
95 
96 #ifndef UINT_LEAST8_MAX
97 #error UINT_LEAST8_MAX not defined
98 #endif
99 
100 #ifndef UINT_LEAST16_MAX
101 #error UINT_LEAST16_MAX not defined
102 #endif
103 
104 #ifndef UINT_LEAST32_MAX
105 #error UINT_LEAST32_MAX not defined
106 #endif
107 
108 #ifndef UINT_LEAST64_MAX
109 #error UINT_LEAST64_MAX not defined
110 #endif
111 
112 #ifndef INT_FAST8_MIN
113 #error INT_FAST8_MIN not defined
114 #endif
115 
116 #ifndef INT_FAST16_MIN
117 #error INT_FAST16_MIN not defined
118 #endif
119 
120 #ifndef INT_FAST32_MIN
121 #error INT_FAST32_MIN not defined
122 #endif
123 
124 #ifndef INT_FAST64_MIN
125 #error INT_FAST64_MIN not defined
126 #endif
127 
128 #ifndef INT_FAST8_MAX
129 #error INT_FAST8_MAX not defined
130 #endif
131 
132 #ifndef INT_FAST16_MAX
133 #error INT_FAST16_MAX not defined
134 #endif
135 
136 #ifndef INT_FAST32_MAX
137 #error INT_FAST32_MAX not defined
138 #endif
139 
140 #ifndef INT_FAST64_MAX
141 #error INT_FAST64_MAX not defined
142 #endif
143 
144 #ifndef UINT_FAST8_MAX
145 #error UINT_FAST8_MAX not defined
146 #endif
147 
148 #ifndef UINT_FAST16_MAX
149 #error UINT_FAST16_MAX not defined
150 #endif
151 
152 #ifndef UINT_FAST32_MAX
153 #error UINT_FAST32_MAX not defined
154 #endif
155 
156 #ifndef UINT_FAST64_MAX
157 #error UINT_FAST64_MAX not defined
158 #endif
159 
160 #ifndef INTPTR_MIN
161 #error INTPTR_MIN not defined
162 #endif
163 
164 #ifndef INTPTR_MAX
165 #error INTPTR_MAX not defined
166 #endif
167 
168 #ifndef UINTPTR_MAX
169 #error UINTPTR_MAX not defined
170 #endif
171 
172 #ifndef INTMAX_MIN
173 #error INTMAX_MIN not defined
174 #endif
175 
176 #ifndef INTMAX_MAX
177 #error INTMAX_MAX not defined
178 #endif
179 
180 #ifndef UINTMAX_MAX
181 #error UINTMAX_MAX not defined
182 #endif
183 
184 #ifndef PTRDIFF_MIN
185 #error PTRDIFF_MIN not defined
186 #endif
187 
188 #ifndef PTRDIFF_MAX
189 #error PTRDIFF_MAX not defined
190 #endif
191 
192 #ifndef SIG_ATOMIC_MIN
193 #error SIG_ATOMIC_MIN not defined
194 #endif
195 
196 #ifndef SIG_ATOMIC_MAX
197 #error SIG_ATOMIC_MAX not defined
198 #endif
199 
200 #ifndef SIZE_MAX
201 #error SIZE_MAX not defined
202 #endif
203 
204 #ifndef WCHAR_MIN
205 #error WCHAR_MIN not defined
206 #endif
207 
208 #ifndef WCHAR_MAX
209 #error WCHAR_MAX not defined
210 #endif
211 
212 #ifndef WINT_MIN
213 #error WINT_MIN not defined
214 #endif
215 
216 #ifndef WINT_MAX
217 #error WINT_MAX not defined
218 #endif
219 
220 #ifndef INT8_C
221 #error INT8_C not defined
222 #endif
223 
224 #ifndef INT16_C
225 #error INT16_C not defined
226 #endif
227 
228 #ifndef INT32_C
229 #error INT32_C not defined
230 #endif
231 
232 #ifndef INT64_C
233 #error INT64_C not defined
234 #endif
235 
236 #ifndef UINT8_C
237 #error UINT8_C not defined
238 #endif
239 
240 #ifndef UINT16_C
241 #error UINT16_C not defined
242 #endif
243 
244 #ifndef UINT32_C
245 #error UINT32_C not defined
246 #endif
247 
248 #ifndef UINT64_C
249 #error UINT64_C not defined
250 #endif
251 
252 #ifndef INTMAX_C
253 #error INTMAX_C not defined
254 #endif
255 
256 #ifndef UINTMAX_C
257 #error UINTMAX_C not defined
258 #endif
259 
260 #ifndef PRId8
261 #error PRId8 not defined
262 #endif
263 
264 #ifndef PRId16
265 #error PRId16 not defined
266 #endif
267 
268 #ifndef PRId32
269 #error PRId32 not defined
270 #endif
271 
272 #ifndef PRId64
273 #error PRId64 not defined
274 #endif
275 
276 #ifndef PRIdLEAST8
277 #error PRIdLEAST8 not defined
278 #endif
279 
280 #ifndef PRIdLEAST16
281 #error PRIdLEAST16 not defined
282 #endif
283 
284 #ifndef PRIdLEAST32
285 #error PRIdLEAST32 not defined
286 #endif
287 
288 #ifndef PRIdLEAST64
289 #error PRIdLEAST64 not defined
290 #endif
291 
292 #ifndef PRIdFAST8
293 #error PRIdFAST8 not defined
294 #endif
295 
296 #ifndef PRIdFAST16
297 #error PRIdFAST16 not defined
298 #endif
299 
300 #ifndef PRIdFAST32
301 #error PRIdFAST32 not defined
302 #endif
303 
304 #ifndef PRIdFAST64
305 #error PRIdFAST64 not defined
306 #endif
307 
308 #ifndef PRIdMAX
309 #error PRIdMAX not defined
310 #endif
311 
312 #ifndef PRIdPTR
313 #error PRIdPTR not defined
314 #endif
315 
316 #ifndef PRIi8
317 #error PRIi8 not defined
318 #endif
319 
320 #ifndef PRIi16
321 #error PRIi16 not defined
322 #endif
323 
324 #ifndef PRIi32
325 #error PRIi32 not defined
326 #endif
327 
328 #ifndef PRIi64
329 #error PRIi64 not defined
330 #endif
331 
332 #ifndef PRIiLEAST8
333 #error PRIiLEAST8 not defined
334 #endif
335 
336 #ifndef PRIiLEAST16
337 #error PRIiLEAST16 not defined
338 #endif
339 
340 #ifndef PRIiLEAST32
341 #error PRIiLEAST32 not defined
342 #endif
343 
344 #ifndef PRIiLEAST64
345 #error PRIiLEAST64 not defined
346 #endif
347 
348 #ifndef PRIiFAST8
349 #error PRIiFAST8 not defined
350 #endif
351 
352 #ifndef PRIiFAST16
353 #error PRIiFAST16 not defined
354 #endif
355 
356 #ifndef PRIiFAST32
357 #error PRIiFAST32 not defined
358 #endif
359 
360 #ifndef PRIiFAST64
361 #error PRIiFAST64 not defined
362 #endif
363 
364 #ifndef PRIiMAX
365 #error PRIiMAX not defined
366 #endif
367 
368 #ifndef PRIiPTR
369 #error PRIiPTR not defined
370 #endif
371 
372 #ifndef PRIo8
373 #error PRIo8 not defined
374 #endif
375 
376 #ifndef PRIo16
377 #error PRIo16 not defined
378 #endif
379 
380 #ifndef PRIo32
381 #error PRIo32 not defined
382 #endif
383 
384 #ifndef PRIo64
385 #error PRIo64 not defined
386 #endif
387 
388 #ifndef PRIoLEAST8
389 #error PRIoLEAST8 not defined
390 #endif
391 
392 #ifndef PRIoLEAST16
393 #error PRIoLEAST16 not defined
394 #endif
395 
396 #ifndef PRIoLEAST32
397 #error PRIoLEAST32 not defined
398 #endif
399 
400 #ifndef PRIoLEAST64
401 #error PRIoLEAST64 not defined
402 #endif
403 
404 #ifndef PRIoFAST8
405 #error PRIoFAST8 not defined
406 #endif
407 
408 #ifndef PRIoFAST16
409 #error PRIoFAST16 not defined
410 #endif
411 
412 #ifndef PRIoFAST32
413 #error PRIoFAST32 not defined
414 #endif
415 
416 #ifndef PRIoFAST64
417 #error PRIoFAST64 not defined
418 #endif
419 
420 #ifndef PRIoMAX
421 #error PRIoMAX not defined
422 #endif
423 
424 #ifndef PRIoPTR
425 #error PRIoPTR not defined
426 #endif
427 
428 #ifndef PRIu8
429 #error PRIu8 not defined
430 #endif
431 
432 #ifndef PRIu16
433 #error PRIu16 not defined
434 #endif
435 
436 #ifndef PRIu32
437 #error PRIu32 not defined
438 #endif
439 
440 #ifndef PRIu64
441 #error PRIu64 not defined
442 #endif
443 
444 #ifndef PRIuLEAST8
445 #error PRIuLEAST8 not defined
446 #endif
447 
448 #ifndef PRIuLEAST16
449 #error PRIuLEAST16 not defined
450 #endif
451 
452 #ifndef PRIuLEAST32
453 #error PRIuLEAST32 not defined
454 #endif
455 
456 #ifndef PRIuLEAST64
457 #error PRIuLEAST64 not defined
458 #endif
459 
460 #ifndef PRIuFAST8
461 #error PRIuFAST8 not defined
462 #endif
463 
464 #ifndef PRIuFAST16
465 #error PRIuFAST16 not defined
466 #endif
467 
468 #ifndef PRIuFAST32
469 #error PRIuFAST32 not defined
470 #endif
471 
472 #ifndef PRIuFAST64
473 #error PRIuFAST64 not defined
474 #endif
475 
476 #ifndef PRIuMAX
477 #error PRIuMAX not defined
478 #endif
479 
480 #ifndef PRIuPTR
481 #error PRIuPTR not defined
482 #endif
483 
484 #ifndef PRIx8
485 #error PRIx8 not defined
486 #endif
487 
488 #ifndef PRIx16
489 #error PRIx16 not defined
490 #endif
491 
492 #ifndef PRIx32
493 #error PRIx32 not defined
494 #endif
495 
496 #ifndef PRIx64
497 #error PRIx64 not defined
498 #endif
499 
500 #ifndef PRIxLEAST8
501 #error PRIxLEAST8 not defined
502 #endif
503 
504 #ifndef PRIxLEAST16
505 #error PRIxLEAST16 not defined
506 #endif
507 
508 #ifndef PRIxLEAST32
509 #error PRIxLEAST32 not defined
510 #endif
511 
512 #ifndef PRIxLEAST64
513 #error PRIxLEAST64 not defined
514 #endif
515 
516 #ifndef PRIxFAST8
517 #error PRIxFAST8 not defined
518 #endif
519 
520 #ifndef PRIxFAST16
521 #error PRIxFAST16 not defined
522 #endif
523 
524 #ifndef PRIxFAST32
525 #error PRIxFAST32 not defined
526 #endif
527 
528 #ifndef PRIxFAST64
529 #error PRIxFAST64 not defined
530 #endif
531 
532 #ifndef PRIxMAX
533 #error PRIxMAX not defined
534 #endif
535 
536 #ifndef PRIxPTR
537 #error PRIxPTR not defined
538 #endif
539 
540 #ifndef PRIX8
541 #error PRIX8 not defined
542 #endif
543 
544 #ifndef PRIX16
545 #error PRIX16 not defined
546 #endif
547 
548 #ifndef PRIX32
549 #error PRIX32 not defined
550 #endif
551 
552 #ifndef PRIX64
553 #error PRIX64 not defined
554 #endif
555 
556 #ifndef PRIXLEAST8
557 #error PRIXLEAST8 not defined
558 #endif
559 
560 #ifndef PRIXLEAST16
561 #error PRIXLEAST16 not defined
562 #endif
563 
564 #ifndef PRIXLEAST32
565 #error PRIXLEAST32 not defined
566 #endif
567 
568 #ifndef PRIXLEAST64
569 #error PRIXLEAST64 not defined
570 #endif
571 
572 #ifndef PRIXFAST8
573 #error PRIXFAST8 not defined
574 #endif
575 
576 #ifndef PRIXFAST16
577 #error PRIXFAST16 not defined
578 #endif
579 
580 #ifndef PRIXFAST32
581 #error PRIXFAST32 not defined
582 #endif
583 
584 #ifndef PRIXFAST64
585 #error PRIXFAST64 not defined
586 #endif
587 
588 #ifndef PRIXMAX
589 #error PRIXMAX not defined
590 #endif
591 
592 #ifndef PRIXPTR
593 #error PRIXPTR not defined
594 #endif
595 
596 #ifndef SCNd8
597 #error SCNd8 not defined
598 #endif
599 
600 #ifndef SCNd16
601 #error SCNd16 not defined
602 #endif
603 
604 #ifndef SCNd32
605 #error SCNd32 not defined
606 #endif
607 
608 #ifndef SCNd64
609 #error SCNd64 not defined
610 #endif
611 
612 #ifndef SCNdLEAST8
613 #error SCNdLEAST8 not defined
614 #endif
615 
616 #ifndef SCNdLEAST16
617 #error SCNdLEAST16 not defined
618 #endif
619 
620 #ifndef SCNdLEAST32
621 #error SCNdLEAST32 not defined
622 #endif
623 
624 #ifndef SCNdLEAST64
625 #error SCNdLEAST64 not defined
626 #endif
627 
628 #ifndef SCNdFAST8
629 #error SCNdFAST8 not defined
630 #endif
631 
632 #ifndef SCNdFAST16
633 #error SCNdFAST16 not defined
634 #endif
635 
636 #ifndef SCNdFAST32
637 #error SCNdFAST32 not defined
638 #endif
639 
640 #ifndef SCNdFAST64
641 #error SCNdFAST64 not defined
642 #endif
643 
644 #ifndef SCNdMAX
645 #error SCNdMAX not defined
646 #endif
647 
648 #ifndef SCNdPTR
649 #error SCNdPTR not defined
650 #endif
651 
652 #ifndef SCNi8
653 #error SCNi8 not defined
654 #endif
655 
656 #ifndef SCNi16
657 #error SCNi16 not defined
658 #endif
659 
660 #ifndef SCNi32
661 #error SCNi32 not defined
662 #endif
663 
664 #ifndef SCNi64
665 #error SCNi64 not defined
666 #endif
667 
668 #ifndef SCNiLEAST8
669 #error SCNiLEAST8 not defined
670 #endif
671 
672 #ifndef SCNiLEAST16
673 #error SCNiLEAST16 not defined
674 #endif
675 
676 #ifndef SCNiLEAST32
677 #error SCNiLEAST32 not defined
678 #endif
679 
680 #ifndef SCNiLEAST64
681 #error SCNiLEAST64 not defined
682 #endif
683 
684 #ifndef SCNiFAST8
685 #error SCNiFAST8 not defined
686 #endif
687 
688 #ifndef SCNiFAST16
689 #error SCNiFAST16 not defined
690 #endif
691 
692 #ifndef SCNiFAST32
693 #error SCNiFAST32 not defined
694 #endif
695 
696 #ifndef SCNiFAST64
697 #error SCNiFAST64 not defined
698 #endif
699 
700 #ifndef SCNiMAX
701 #error SCNiMAX not defined
702 #endif
703 
704 #ifndef SCNiPTR
705 #error SCNiPTR not defined
706 #endif
707 
708 #ifndef SCNo8
709 #error SCNo8 not defined
710 #endif
711 
712 #ifndef SCNo16
713 #error SCNo16 not defined
714 #endif
715 
716 #ifndef SCNo32
717 #error SCNo32 not defined
718 #endif
719 
720 #ifndef SCNo64
721 #error SCNo64 not defined
722 #endif
723 
724 #ifndef SCNoLEAST8
725 #error SCNoLEAST8 not defined
726 #endif
727 
728 #ifndef SCNoLEAST16
729 #error SCNoLEAST16 not defined
730 #endif
731 
732 #ifndef SCNoLEAST32
733 #error SCNoLEAST32 not defined
734 #endif
735 
736 #ifndef SCNoLEAST64
737 #error SCNoLEAST64 not defined
738 #endif
739 
740 #ifndef SCNoFAST8
741 #error SCNoFAST8 not defined
742 #endif
743 
744 #ifndef SCNoFAST16
745 #error SCNoFAST16 not defined
746 #endif
747 
748 #ifndef SCNoFAST32
749 #error SCNoFAST32 not defined
750 #endif
751 
752 #ifndef SCNoFAST64
753 #error SCNoFAST64 not defined
754 #endif
755 
756 #ifndef SCNoMAX
757 #error SCNoMAX not defined
758 #endif
759 
760 #ifndef SCNoPTR
761 #error SCNoPTR not defined
762 #endif
763 
764 #ifndef SCNu8
765 #error SCNu8 not defined
766 #endif
767 
768 #ifndef SCNu16
769 #error SCNu16 not defined
770 #endif
771 
772 #ifndef SCNu32
773 #error SCNu32 not defined
774 #endif
775 
776 #ifndef SCNu64
777 #error SCNu64 not defined
778 #endif
779 
780 #ifndef SCNuLEAST8
781 #error SCNuLEAST8 not defined
782 #endif
783 
784 #ifndef SCNuLEAST16
785 #error SCNuLEAST16 not defined
786 #endif
787 
788 #ifndef SCNuLEAST32
789 #error SCNuLEAST32 not defined
790 #endif
791 
792 #ifndef SCNuLEAST64
793 #error SCNuLEAST64 not defined
794 #endif
795 
796 #ifndef SCNuFAST8
797 #error SCNuFAST8 not defined
798 #endif
799 
800 #ifndef SCNuFAST16
801 #error SCNuFAST16 not defined
802 #endif
803 
804 #ifndef SCNuFAST32
805 #error SCNuFAST32 not defined
806 #endif
807 
808 #ifndef SCNuFAST64
809 #error SCNuFAST64 not defined
810 #endif
811 
812 #ifndef SCNuMAX
813 #error SCNuMAX not defined
814 #endif
815 
816 #ifndef SCNuPTR
817 #error SCNuPTR not defined
818 #endif
819 
820 #ifndef SCNx8
821 #error SCNx8 not defined
822 #endif
823 
824 #ifndef SCNx16
825 #error SCNx16 not defined
826 #endif
827 
828 #ifndef SCNx32
829 #error SCNx32 not defined
830 #endif
831 
832 #ifndef SCNx64
833 #error SCNx64 not defined
834 #endif
835 
836 #ifndef SCNxLEAST8
837 #error SCNxLEAST8 not defined
838 #endif
839 
840 #ifndef SCNxLEAST16
841 #error SCNxLEAST16 not defined
842 #endif
843 
844 #ifndef SCNxLEAST32
845 #error SCNxLEAST32 not defined
846 #endif
847 
848 #ifndef SCNxLEAST64
849 #error SCNxLEAST64 not defined
850 #endif
851 
852 #ifndef SCNxFAST8
853 #error SCNxFAST8 not defined
854 #endif
855 
856 #ifndef SCNxFAST16
857 #error SCNxFAST16 not defined
858 #endif
859 
860 #ifndef SCNxFAST32
861 #error SCNxFAST32 not defined
862 #endif
863 
864 #ifndef SCNxFAST64
865 #error SCNxFAST64 not defined
866 #endif
867 
868 #ifndef SCNxMAX
869 #error SCNxMAX not defined
870 #endif
871 
872 #ifndef SCNxPTR
873 #error SCNxPTR not defined
874 #endif
875 
test()876 template <class T> void test()
877 {
878     T t = 0;
879     ((void)t); // Prevent unused warning
880 }
881 
main(int,char **)882 int main(int, char**)
883 {
884     test<std::int8_t >();
885     test<std::int16_t>();
886     test<std::int32_t>();
887     test<std::int64_t>();
888 
889     test<std::uint8_t >();
890     test<std::uint16_t>();
891     test<std::uint32_t>();
892     test<std::uint64_t>();
893 
894     test<std::int_least8_t >();
895     test<std::int_least16_t>();
896     test<std::int_least32_t>();
897     test<std::int_least64_t>();
898 
899     test<std::uint_least8_t >();
900     test<std::uint_least16_t>();
901     test<std::uint_least32_t>();
902     test<std::uint_least64_t>();
903 
904     test<std::int_fast8_t >();
905     test<std::int_fast16_t>();
906     test<std::int_fast32_t>();
907     test<std::int_fast64_t>();
908 
909     test<std::uint_fast8_t >();
910     test<std::uint_fast16_t>();
911     test<std::uint_fast32_t>();
912     test<std::uint_fast64_t>();
913 
914     test<std::intptr_t >();
915     test<std::uintptr_t>();
916     test<std::intmax_t >();
917     test<std::uintmax_t>();
918 
919     {
920     std::imaxdiv_t  i1 = {};
921     ((void)i1); // Prevent unused warning
922     }
923 
924     std::intmax_t i = 0;
925     ((void)i); // Prevent unused warning
926     static_assert((std::is_same<decltype(std::imaxabs(i)), std::intmax_t>::value), "");
927     static_assert((std::is_same<decltype(std::imaxdiv(i, i)), std::imaxdiv_t>::value), "");
928     static_assert((std::is_same<decltype(std::strtoimax("", (char**)0, 0)), std::intmax_t>::value), "");
929     static_assert((std::is_same<decltype(std::strtoumax("", (char**)0, 0)), std::uintmax_t>::value), "");
930     static_assert((std::is_same<decltype(std::wcstoimax(L"", (wchar_t**)0, 0)), std::intmax_t>::value), "");
931     static_assert((std::is_same<decltype(std::wcstoumax(L"", (wchar_t**)0, 0)), std::uintmax_t>::value), "");
932 
933   return 0;
934 }
935