• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 // <string>
11 
12 // int stoi(const string& str, size_t *idx = 0, int base = 10);
13 // int stoi(const wstring& str, size_t *idx = 0, int base = 10);
14 
15 #include <string>
16 #include <cassert>
17 
18 #include "test_macros.h"
19 
main()20 int main()
21 {
22     assert(std::stoi("0") == 0);
23     assert(std::stoi(L"0") == 0);
24     assert(std::stoi("-0") == 0);
25     assert(std::stoi(L"-0") == 0);
26     assert(std::stoi("-10") == -10);
27     assert(std::stoi(L"-10") == -10);
28     assert(std::stoi(" 10") == 10);
29     assert(std::stoi(L" 10") == 10);
30     size_t idx = 0;
31     assert(std::stoi("10g", &idx, 16) == 16);
32     assert(idx == 2);
33     idx = 0;
34     assert(std::stoi(L"10g", &idx, 16) == 16);
35     assert(idx == 2);
36 #ifndef TEST_HAS_NO_EXCEPTIONS
37     if (std::numeric_limits<long>::max() > std::numeric_limits<int>::max())
38     {
39         try
40         {
41             std::stoi("0x100000000", &idx, 16);
42             assert(false);
43         }
44         catch (const std::out_of_range&)
45         {
46         }
47         try
48         {
49             std::stoi(L"0x100000000", &idx, 16);
50             assert(false);
51         }
52         catch (const std::out_of_range&)
53         {
54         }
55     }
56     idx = 0;
57     try
58     {
59         std::stoi("", &idx);
60         assert(false);
61     }
62     catch (const std::invalid_argument&)
63     {
64         assert(idx == 0);
65     }
66     try
67     {
68         std::stoi(L"", &idx);
69         assert(false);
70     }
71     catch (const std::invalid_argument&)
72     {
73         assert(idx == 0);
74     }
75     try
76     {
77         std::stoi("  - 8", &idx);
78         assert(false);
79     }
80     catch (const std::invalid_argument&)
81     {
82         assert(idx == 0);
83     }
84     try
85     {
86         std::stoi(L"  - 8", &idx);
87         assert(false);
88     }
89     catch (const std::invalid_argument&)
90     {
91         assert(idx == 0);
92     }
93     try
94     {
95         std::stoi("a1", &idx);
96         assert(false);
97     }
98     catch (const std::invalid_argument&)
99     {
100         assert(idx == 0);
101     }
102     try
103     {
104         std::stoi(L"a1", &idx);
105         assert(false);
106     }
107     catch (const std::invalid_argument&)
108     {
109         assert(idx == 0);
110     }
111 #endif
112 }
113