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 // UNSUPPORTED: c++03
10 // UNSUPPORTED: !libc++ && c++11
11 // UNSUPPORTED: !libc++ && c++14
12 
13 // The roundtrip test uses to_chars, which requires functions in the dylib
14 // that were introduced in Mac OS 10.15.
15 //
16 // XFAIL: with_system_cxx_lib=macosx10.14
17 // XFAIL: with_system_cxx_lib=macosx10.13
18 // XFAIL: with_system_cxx_lib=macosx10.12
19 // XFAIL: with_system_cxx_lib=macosx10.11
20 // XFAIL: with_system_cxx_lib=macosx10.10
21 // XFAIL: with_system_cxx_lib=macosx10.9
22 
23 // <charconv>
24 
25 // from_chars_result from_chars(const char* first, const char* last,
26 //                              Integral& value, int base = 10)
27 
28 #include <charconv>
29 #include "test_macros.h"
30 #include "charconv_test_helpers.h"
31 
32 template <typename T>
33 struct test_basics : roundtrip_test_base<T>
34 {
35     using roundtrip_test_base<T>::test;
36 
operator ()test_basics37     void operator()()
38     {
39         test(0);
40         test(42);
41         test(32768);
42         test(0, 10);
43         test(42, 10);
44         test(32768, 10);
45         test(0xf, 16);
46         test(0xdeadbeaf, 16);
47         test(0755, 8);
48 
49         for (int b = 2; b < 37; ++b)
50         {
51             using xl = std::numeric_limits<T>;
52 
53             test(1, b);
54             test(-1, b);
55             test(xl::lowest(), b);
56             test((xl::max)(), b);
57             test((xl::max)() / 2, b);
58         }
59     }
60 };
61 
62 template <typename T>
63 struct test_signed : roundtrip_test_base<T>
64 {
65     using roundtrip_test_base<T>::test;
66 
operator ()test_signed67     void operator()()
68     {
69         test(-1);
70         test(-12);
71         test(-1, 10);
72         test(-12, 10);
73         test(-21734634, 10);
74         test(-2647, 2);
75         test(-0xcc1, 16);
76 
77         for (int b = 2; b < 37; ++b)
78         {
79             using xl = std::numeric_limits<T>;
80 
81             test(0, b);
82             test(xl::lowest(), b);
83             test((xl::max)(), b);
84         }
85     }
86 };
87 
main(int,char **)88 int main(int, char**)
89 {
90     run<test_basics>(integrals);
91     run<test_signed>(all_signed);
92 
93     return 0;
94 }
95