xref: /llvm-project/libcxx/test/std/re/re.traits/value.pass.cpp (revision f4c1258d5633fcf06385ff3fd1f4bf57ab971964)
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 // <regex>
10 
11 // template <class charT> struct regex_traits;
12 
13 // int value(charT ch, int radix) const;
14 
15 #include <regex>
16 #include <cassert>
17 #include "test_macros.h"
18 
main(int,char **)19 int main(int, char**)
20 {
21     {
22         std::regex_traits<char> t;
23 
24         for (char c = 0; c < '0'; ++c)
25         {
26             assert(t.value(c, 8) == -1);
27             assert(t.value(c, 10) == -1);
28             assert(t.value(c, 16) == -1);
29         }
30         for (char c = '0'; c < '8'; ++c)
31         {
32             assert(t.value(c, 8) == c - '0');
33             assert(t.value(c, 10) == c - '0');
34             assert(t.value(c, 16) == c - '0');
35         }
36         for (char c = '8'; c < ':'; ++c)
37         {
38             assert(t.value(c, 8) == -1);
39             assert(t.value(c, 10) == c - '0');
40             assert(t.value(c, 16) == c - '0');
41         }
42         for (char c = ':'; c < 'A'; ++c)
43         {
44             assert(t.value(c, 8) == -1);
45             assert(t.value(c, 10) == -1);
46             assert(t.value(c, 16) == -1);
47         }
48         for (char c = 'A'; c < 'G'; ++c)
49         {
50             assert(t.value(c, 8) == -1);
51             assert(t.value(c, 10) == -1);
52             assert(t.value(c, 16) == c - 'A' +10);
53         }
54         for (char c = 'G'; c < 'a'; ++c)
55         {
56             assert(t.value(c, 8) == -1);
57             assert(t.value(c, 10) == -1);
58             assert(t.value(c, 16) == -1);
59         }
60         for (char c = 'a'; c < 'g'; ++c)
61         {
62             assert(t.value(c, 8) == -1);
63             assert(t.value(c, 10) == -1);
64             assert(t.value(c, 16) == c - 'a' +10);
65         }
66         for (int c = 'g'; c < 256; ++c)
67         {
68             assert(t.value(char(c), 8) == -1);
69             assert(t.value(char(c), 10) == -1);
70             assert(t.value(char(c), 16) == -1);
71         }
72     }
73 #ifndef TEST_HAS_NO_WIDE_CHARACTERS
74     {
75         std::regex_traits<wchar_t> t;
76 
77         for (wchar_t c = 0; c < '0'; ++c)
78         {
79             assert(t.value(c, 8) == -1);
80             assert(t.value(c, 10) == -1);
81             assert(t.value(c, 16) == -1);
82         }
83         for (wchar_t c = '0'; c < '8'; ++c)
84         {
85             assert(t.value(c, 8) ==  static_cast<int>(c - '0'));
86             assert(t.value(c, 10) == static_cast<int>(c - '0'));
87             assert(t.value(c, 16) == static_cast<int>(c - '0'));
88         }
89         for (wchar_t c = '8'; c < ':'; ++c)
90         {
91             assert(t.value(c, 8) == -1);
92             assert(t.value(c, 10) == static_cast<int>(c - '0'));
93             assert(t.value(c, 16) == static_cast<int>(c - '0'));
94         }
95         for (wchar_t c = ':'; c < 'A'; ++c)
96         {
97             assert(t.value(c, 8) == -1);
98             assert(t.value(c, 10) == -1);
99             assert(t.value(c, 16) == -1);
100         }
101         for (wchar_t c = 'A'; c < 'G'; ++c)
102         {
103             assert(t.value(c, 8) == -1);
104             assert(t.value(c, 10) == -1);
105             assert(t.value(c, 16) == static_cast<int>(c - 'A' +10));
106         }
107         for (wchar_t c = 'G'; c < 'a'; ++c)
108         {
109             assert(t.value(c, 8) == -1);
110             assert(t.value(c, 10) == -1);
111             assert(t.value(c, 16) == -1);
112         }
113         for (wchar_t c = 'a'; c < 'g'; ++c)
114         {
115             assert(t.value(c, 8) == -1);
116             assert(t.value(c, 10) == -1);
117             assert(t.value(c, 16) == static_cast<int>(c - 'a' +10));
118         }
119         for (wchar_t c = 'g'; c < 0xFFFF; ++c)
120         {
121             assert(t.value(c, 8) == -1);
122             assert(t.value(c, 10) == -1);
123             assert(t.value(c, 16) == -1);
124         }
125     }
126 #endif
127 
128   return 0;
129 }
130