1 //===----------------------------------------------------------------------===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is dual licensed under the MIT and the University of Illinois Open
6 // Source Licenses. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 
10 // UNSUPPORTED: c++98, c++03, c++11
11 
12 // XFAIL: with_system_cxx_lib=macosx10.14
13 // XFAIL: with_system_cxx_lib=macosx10.13
14 // XFAIL: with_system_cxx_lib=macosx10.12
15 // XFAIL: with_system_cxx_lib=macosx10.11
16 // XFAIL: with_system_cxx_lib=macosx10.10
17 // XFAIL: with_system_cxx_lib=macosx10.9
18 // XFAIL: with_system_cxx_lib=macosx10.8
19 // XFAIL: with_system_cxx_lib=macosx10.7
20 
21 // <charconv>
22 
23 // to_chars_result to_chars(char* first, char* last, Integral value,
24 //                          int base = 10)
25 
26 #include "charconv_test_helpers.h"
27 
28 template <typename T>
29 struct test_basics : to_chars_test_base<T>
30 {
31     using to_chars_test_base<T>::test;
32     using to_chars_test_base<T>::test_value;
33 
operator ()test_basics34     void operator()()
35     {
36         test(0, "0");
37         test(42, "42");
38         test(32768, "32768");
39         test(0, "0", 10);
40         test(42, "42", 10);
41         test(32768, "32768", 10);
42         test(0xf, "f", 16);
43         test(0xdeadbeaf, "deadbeaf", 16);
44         test(0755, "755", 8);
45 
46         for (int b = 2; b < 37; ++b)
47         {
48             using xl = std::numeric_limits<T>;
49 
50             test_value(1, b);
51             test_value(xl::lowest(), b);
52             test_value((xl::max)(), b);
53             test_value((xl::max)() / 2, b);
54         }
55     }
56 };
57 
58 template <typename T>
59 struct test_signed : to_chars_test_base<T>
60 {
61     using to_chars_test_base<T>::test;
62     using to_chars_test_base<T>::test_value;
63 
operator ()test_signed64     void operator()()
65     {
66         test(-1, "-1");
67         test(-12, "-12");
68         test(-1, "-1", 10);
69         test(-12, "-12", 10);
70         test(-21734634, "-21734634", 10);
71         test(-2647, "-101001010111", 2);
72         test(-0xcc1, "-cc1", 16);
73 
74         for (int b = 2; b < 37; ++b)
75         {
76             using xl = std::numeric_limits<T>;
77 
78             test_value(0, b);
79             test_value(xl::lowest(), b);
80             test_value((xl::max)(), b);
81         }
82     }
83 };
84 
main()85 int main()
86 {
87     run<test_basics>(integrals);
88     run<test_signed>(all_signed);
89 }
90