1a2100d75SJordan Rose //===- unittests/Basic/CharInfoTest.cpp -- ASCII classification tests -----===//
2a2100d75SJordan Rose //
32946cd70SChandler Carruth // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
42946cd70SChandler Carruth // See https://llvm.org/LICENSE.txt for license information.
52946cd70SChandler Carruth // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6a2100d75SJordan Rose //
7a2100d75SJordan Rose //===----------------------------------------------------------------------===//
8a2100d75SJordan Rose
9a2100d75SJordan Rose #include "clang/Basic/CharInfo.h"
10a2100d75SJordan Rose #include "gtest/gtest.h"
11a2100d75SJordan Rose
12a2100d75SJordan Rose using namespace llvm;
13a2100d75SJordan Rose using namespace clang;
14a2100d75SJordan Rose
15a2100d75SJordan Rose // Check that the CharInfo table has been constructed reasonably.
TEST(CharInfoTest,validateInfoTable)16a2100d75SJordan Rose TEST(CharInfoTest, validateInfoTable) {
17a2100d75SJordan Rose using namespace charinfo;
18a2100d75SJordan Rose EXPECT_EQ((unsigned)CHAR_SPACE, InfoTable[(unsigned)' ']);
19a2100d75SJordan Rose EXPECT_EQ((unsigned)CHAR_HORZ_WS, InfoTable[(unsigned)'\t']);
20a2100d75SJordan Rose EXPECT_EQ((unsigned)CHAR_HORZ_WS, InfoTable[(unsigned)'\f']); // ??
21a2100d75SJordan Rose EXPECT_EQ((unsigned)CHAR_HORZ_WS, InfoTable[(unsigned)'\v']); // ??
22a2100d75SJordan Rose EXPECT_EQ((unsigned)CHAR_VERT_WS, InfoTable[(unsigned)'\n']);
23a2100d75SJordan Rose EXPECT_EQ((unsigned)CHAR_VERT_WS, InfoTable[(unsigned)'\r']);
24a2100d75SJordan Rose EXPECT_EQ((unsigned)CHAR_UNDER, InfoTable[(unsigned)'_']);
25a2100d75SJordan Rose EXPECT_EQ((unsigned)CHAR_PERIOD, InfoTable[(unsigned)'.']);
26a2100d75SJordan Rose
27a2100d75SJordan Rose for (unsigned i = 'a'; i <= 'f'; ++i) {
28a2100d75SJordan Rose EXPECT_EQ((unsigned)CHAR_XLOWER, InfoTable[i]);
29a2100d75SJordan Rose EXPECT_EQ((unsigned)CHAR_XUPPER, InfoTable[i+'A'-'a']);
30a2100d75SJordan Rose }
31a2100d75SJordan Rose
32a2100d75SJordan Rose for (unsigned i = 'g'; i <= 'z'; ++i) {
33a2100d75SJordan Rose EXPECT_EQ((unsigned)CHAR_LOWER, InfoTable[i]);
34a2100d75SJordan Rose EXPECT_EQ((unsigned)CHAR_UPPER, InfoTable[i+'A'-'a']);
35a2100d75SJordan Rose }
36a2100d75SJordan Rose
37a2100d75SJordan Rose for (unsigned i = '0'; i <= '9'; ++i)
38a2100d75SJordan Rose EXPECT_EQ((unsigned)CHAR_DIGIT, InfoTable[i]);
39a2100d75SJordan Rose }
40a2100d75SJordan Rose
41a2100d75SJordan Rose // Check various predicates.
TEST(CharInfoTest,isASCII)42a2100d75SJordan Rose TEST(CharInfoTest, isASCII) {
43a2100d75SJordan Rose EXPECT_TRUE(isASCII('\0'));
44a2100d75SJordan Rose EXPECT_TRUE(isASCII('\n'));
45a2100d75SJordan Rose EXPECT_TRUE(isASCII(' '));
46a2100d75SJordan Rose EXPECT_TRUE(isASCII('a'));
47a2100d75SJordan Rose EXPECT_TRUE(isASCII('\x7f'));
48a2100d75SJordan Rose EXPECT_FALSE(isASCII('\x80'));
49a2100d75SJordan Rose EXPECT_FALSE(isASCII('\xc2'));
50a2100d75SJordan Rose EXPECT_FALSE(isASCII('\xff'));
51a2100d75SJordan Rose }
52a2100d75SJordan Rose
TEST(CharInfoTest,isAsciiIdentifierStart)53*601102d2SCorentin Jabot TEST(CharInfoTest, isAsciiIdentifierStart) {
54*601102d2SCorentin Jabot EXPECT_TRUE(isAsciiIdentifierStart('a'));
55*601102d2SCorentin Jabot EXPECT_TRUE(isAsciiIdentifierStart('A'));
56*601102d2SCorentin Jabot EXPECT_TRUE(isAsciiIdentifierStart('z'));
57*601102d2SCorentin Jabot EXPECT_TRUE(isAsciiIdentifierStart('Z'));
58*601102d2SCorentin Jabot EXPECT_TRUE(isAsciiIdentifierStart('_'));
59a2100d75SJordan Rose
60*601102d2SCorentin Jabot EXPECT_FALSE(isAsciiIdentifierStart('0'));
61*601102d2SCorentin Jabot EXPECT_FALSE(isAsciiIdentifierStart('.'));
62*601102d2SCorentin Jabot EXPECT_FALSE(isAsciiIdentifierStart('`'));
63*601102d2SCorentin Jabot EXPECT_FALSE(isAsciiIdentifierStart('\0'));
64a2100d75SJordan Rose
65*601102d2SCorentin Jabot EXPECT_FALSE(isAsciiIdentifierStart('$'));
66*601102d2SCorentin Jabot EXPECT_TRUE(isAsciiIdentifierStart('$', /*AllowDollar=*/true));
67a2100d75SJordan Rose
68*601102d2SCorentin Jabot EXPECT_FALSE(isAsciiIdentifierStart('\x80'));
69*601102d2SCorentin Jabot EXPECT_FALSE(isAsciiIdentifierStart('\xc2'));
70*601102d2SCorentin Jabot EXPECT_FALSE(isAsciiIdentifierStart('\xff'));
71a2100d75SJordan Rose }
72a2100d75SJordan Rose
TEST(CharInfoTest,isAsciiIdentifierContinue)73*601102d2SCorentin Jabot TEST(CharInfoTest, isAsciiIdentifierContinue) {
74*601102d2SCorentin Jabot EXPECT_TRUE(isAsciiIdentifierContinue('a'));
75*601102d2SCorentin Jabot EXPECT_TRUE(isAsciiIdentifierContinue('A'));
76*601102d2SCorentin Jabot EXPECT_TRUE(isAsciiIdentifierContinue('z'));
77*601102d2SCorentin Jabot EXPECT_TRUE(isAsciiIdentifierContinue('Z'));
78*601102d2SCorentin Jabot EXPECT_TRUE(isAsciiIdentifierContinue('_'));
79a2100d75SJordan Rose
80*601102d2SCorentin Jabot EXPECT_TRUE(isAsciiIdentifierContinue('0'));
81*601102d2SCorentin Jabot EXPECT_FALSE(isAsciiIdentifierContinue('.'));
82*601102d2SCorentin Jabot EXPECT_FALSE(isAsciiIdentifierContinue('`'));
83*601102d2SCorentin Jabot EXPECT_FALSE(isAsciiIdentifierContinue('\0'));
84a2100d75SJordan Rose
85*601102d2SCorentin Jabot EXPECT_FALSE(isAsciiIdentifierContinue('$'));
86*601102d2SCorentin Jabot EXPECT_TRUE(isAsciiIdentifierContinue('$', /*AllowDollar=*/true));
87a2100d75SJordan Rose
88*601102d2SCorentin Jabot EXPECT_FALSE(isAsciiIdentifierContinue('\x80'));
89*601102d2SCorentin Jabot EXPECT_FALSE(isAsciiIdentifierContinue('\xc2'));
90*601102d2SCorentin Jabot EXPECT_FALSE(isAsciiIdentifierContinue('\xff'));
91a2100d75SJordan Rose }
92a2100d75SJordan Rose
TEST(CharInfoTest,isHorizontalWhitespace)93a2100d75SJordan Rose TEST(CharInfoTest, isHorizontalWhitespace) {
94a2100d75SJordan Rose EXPECT_FALSE(isHorizontalWhitespace('a'));
95a2100d75SJordan Rose EXPECT_FALSE(isHorizontalWhitespace('_'));
96a2100d75SJordan Rose EXPECT_FALSE(isHorizontalWhitespace('0'));
97a2100d75SJordan Rose EXPECT_FALSE(isHorizontalWhitespace('.'));
98a2100d75SJordan Rose EXPECT_FALSE(isHorizontalWhitespace('`'));
99a2100d75SJordan Rose EXPECT_FALSE(isHorizontalWhitespace('\0'));
100a2100d75SJordan Rose EXPECT_FALSE(isHorizontalWhitespace('\x7f'));
101a2100d75SJordan Rose
102a2100d75SJordan Rose EXPECT_TRUE(isHorizontalWhitespace(' '));
103a2100d75SJordan Rose EXPECT_TRUE(isHorizontalWhitespace('\t'));
104a2100d75SJordan Rose EXPECT_TRUE(isHorizontalWhitespace('\f')); // ??
105a2100d75SJordan Rose EXPECT_TRUE(isHorizontalWhitespace('\v')); // ??
106a2100d75SJordan Rose
107a2100d75SJordan Rose EXPECT_FALSE(isHorizontalWhitespace('\n'));
108a2100d75SJordan Rose EXPECT_FALSE(isHorizontalWhitespace('\r'));
109a2100d75SJordan Rose
110a2100d75SJordan Rose EXPECT_FALSE(isHorizontalWhitespace('\x80'));
111a2100d75SJordan Rose EXPECT_FALSE(isHorizontalWhitespace('\xc2'));
112a2100d75SJordan Rose EXPECT_FALSE(isHorizontalWhitespace('\xff'));
113a2100d75SJordan Rose }
114a2100d75SJordan Rose
TEST(CharInfoTest,isVerticalWhitespace)115a2100d75SJordan Rose TEST(CharInfoTest, isVerticalWhitespace) {
116a2100d75SJordan Rose EXPECT_FALSE(isVerticalWhitespace('a'));
117a2100d75SJordan Rose EXPECT_FALSE(isVerticalWhitespace('_'));
118a2100d75SJordan Rose EXPECT_FALSE(isVerticalWhitespace('0'));
119a2100d75SJordan Rose EXPECT_FALSE(isVerticalWhitespace('.'));
120a2100d75SJordan Rose EXPECT_FALSE(isVerticalWhitespace('`'));
121a2100d75SJordan Rose EXPECT_FALSE(isVerticalWhitespace('\0'));
122a2100d75SJordan Rose EXPECT_FALSE(isVerticalWhitespace('\x7f'));
123a2100d75SJordan Rose
124a2100d75SJordan Rose EXPECT_FALSE(isVerticalWhitespace(' '));
125a2100d75SJordan Rose EXPECT_FALSE(isVerticalWhitespace('\t'));
126a2100d75SJordan Rose EXPECT_FALSE(isVerticalWhitespace('\f')); // ??
127a2100d75SJordan Rose EXPECT_FALSE(isVerticalWhitespace('\v')); // ??
128a2100d75SJordan Rose
129a2100d75SJordan Rose EXPECT_TRUE(isVerticalWhitespace('\n'));
130a2100d75SJordan Rose EXPECT_TRUE(isVerticalWhitespace('\r'));
131a2100d75SJordan Rose
132a2100d75SJordan Rose EXPECT_FALSE(isVerticalWhitespace('\x80'));
133a2100d75SJordan Rose EXPECT_FALSE(isVerticalWhitespace('\xc2'));
134a2100d75SJordan Rose EXPECT_FALSE(isVerticalWhitespace('\xff'));
135a2100d75SJordan Rose }
136a2100d75SJordan Rose
TEST(CharInfoTest,isWhitespace)137a2100d75SJordan Rose TEST(CharInfoTest, isWhitespace) {
138a2100d75SJordan Rose EXPECT_FALSE(isWhitespace('a'));
139a2100d75SJordan Rose EXPECT_FALSE(isWhitespace('_'));
140a2100d75SJordan Rose EXPECT_FALSE(isWhitespace('0'));
141a2100d75SJordan Rose EXPECT_FALSE(isWhitespace('.'));
142a2100d75SJordan Rose EXPECT_FALSE(isWhitespace('`'));
143a2100d75SJordan Rose EXPECT_FALSE(isWhitespace('\0'));
144a2100d75SJordan Rose EXPECT_FALSE(isWhitespace('\x7f'));
145a2100d75SJordan Rose
146a2100d75SJordan Rose EXPECT_TRUE(isWhitespace(' '));
147a2100d75SJordan Rose EXPECT_TRUE(isWhitespace('\t'));
148a2100d75SJordan Rose EXPECT_TRUE(isWhitespace('\f'));
149a2100d75SJordan Rose EXPECT_TRUE(isWhitespace('\v'));
150a2100d75SJordan Rose
151a2100d75SJordan Rose EXPECT_TRUE(isWhitespace('\n'));
152a2100d75SJordan Rose EXPECT_TRUE(isWhitespace('\r'));
153a2100d75SJordan Rose
154a2100d75SJordan Rose EXPECT_FALSE(isWhitespace('\x80'));
155a2100d75SJordan Rose EXPECT_FALSE(isWhitespace('\xc2'));
156a2100d75SJordan Rose EXPECT_FALSE(isWhitespace('\xff'));
157a2100d75SJordan Rose }
158a2100d75SJordan Rose
TEST(CharInfoTest,isDigit)159a2100d75SJordan Rose TEST(CharInfoTest, isDigit) {
160a2100d75SJordan Rose EXPECT_TRUE(isDigit('0'));
161a2100d75SJordan Rose EXPECT_TRUE(isDigit('9'));
162a2100d75SJordan Rose
163a2100d75SJordan Rose EXPECT_FALSE(isDigit('a'));
164a2100d75SJordan Rose EXPECT_FALSE(isDigit('A'));
165a2100d75SJordan Rose
166a2100d75SJordan Rose EXPECT_FALSE(isDigit('z'));
167a2100d75SJordan Rose EXPECT_FALSE(isDigit('Z'));
168a2100d75SJordan Rose
169a2100d75SJordan Rose EXPECT_FALSE(isDigit('.'));
170a2100d75SJordan Rose EXPECT_FALSE(isDigit('_'));
171a2100d75SJordan Rose
172a2100d75SJordan Rose EXPECT_FALSE(isDigit('/'));
173a2100d75SJordan Rose EXPECT_FALSE(isDigit('\0'));
174a2100d75SJordan Rose
175a2100d75SJordan Rose EXPECT_FALSE(isDigit('\x80'));
176a2100d75SJordan Rose EXPECT_FALSE(isDigit('\xc2'));
177a2100d75SJordan Rose EXPECT_FALSE(isDigit('\xff'));
178a2100d75SJordan Rose }
179a2100d75SJordan Rose
TEST(CharInfoTest,isHexDigit)180a2100d75SJordan Rose TEST(CharInfoTest, isHexDigit) {
181a2100d75SJordan Rose EXPECT_TRUE(isHexDigit('0'));
182a2100d75SJordan Rose EXPECT_TRUE(isHexDigit('9'));
183a2100d75SJordan Rose
184a2100d75SJordan Rose EXPECT_TRUE(isHexDigit('a'));
185a2100d75SJordan Rose EXPECT_TRUE(isHexDigit('A'));
186a2100d75SJordan Rose
187a2100d75SJordan Rose EXPECT_FALSE(isHexDigit('z'));
188a2100d75SJordan Rose EXPECT_FALSE(isHexDigit('Z'));
189a2100d75SJordan Rose
190a2100d75SJordan Rose EXPECT_FALSE(isHexDigit('.'));
191a2100d75SJordan Rose EXPECT_FALSE(isHexDigit('_'));
192a2100d75SJordan Rose
193a2100d75SJordan Rose EXPECT_FALSE(isHexDigit('/'));
194a2100d75SJordan Rose EXPECT_FALSE(isHexDigit('\0'));
195a2100d75SJordan Rose
196a2100d75SJordan Rose EXPECT_FALSE(isHexDigit('\x80'));
197a2100d75SJordan Rose EXPECT_FALSE(isHexDigit('\xc2'));
198a2100d75SJordan Rose EXPECT_FALSE(isHexDigit('\xff'));
199a2100d75SJordan Rose }
200a2100d75SJordan Rose
TEST(CharInfoTest,isLetter)201a2100d75SJordan Rose TEST(CharInfoTest, isLetter) {
202a2100d75SJordan Rose EXPECT_FALSE(isLetter('0'));
203a2100d75SJordan Rose EXPECT_FALSE(isLetter('9'));
204a2100d75SJordan Rose
205a2100d75SJordan Rose EXPECT_TRUE(isLetter('a'));
206a2100d75SJordan Rose EXPECT_TRUE(isLetter('A'));
207a2100d75SJordan Rose
208a2100d75SJordan Rose EXPECT_TRUE(isLetter('z'));
209a2100d75SJordan Rose EXPECT_TRUE(isLetter('Z'));
210a2100d75SJordan Rose
211a2100d75SJordan Rose EXPECT_FALSE(isLetter('.'));
212a2100d75SJordan Rose EXPECT_FALSE(isLetter('_'));
213a2100d75SJordan Rose
214a2100d75SJordan Rose EXPECT_FALSE(isLetter('/'));
215a2100d75SJordan Rose EXPECT_FALSE(isLetter('('));
216a2100d75SJordan Rose EXPECT_FALSE(isLetter('\0'));
217a2100d75SJordan Rose
218a2100d75SJordan Rose EXPECT_FALSE(isLetter('\x80'));
219a2100d75SJordan Rose EXPECT_FALSE(isLetter('\xc2'));
220a2100d75SJordan Rose EXPECT_FALSE(isLetter('\xff'));
221a2100d75SJordan Rose }
222a2100d75SJordan Rose
TEST(CharInfoTest,isLowercase)223a2100d75SJordan Rose TEST(CharInfoTest, isLowercase) {
224a2100d75SJordan Rose EXPECT_FALSE(isLowercase('0'));
225a2100d75SJordan Rose EXPECT_FALSE(isLowercase('9'));
226a2100d75SJordan Rose
227a2100d75SJordan Rose EXPECT_TRUE(isLowercase('a'));
228a2100d75SJordan Rose EXPECT_FALSE(isLowercase('A'));
229a2100d75SJordan Rose
230a2100d75SJordan Rose EXPECT_TRUE(isLowercase('z'));
231a2100d75SJordan Rose EXPECT_FALSE(isLowercase('Z'));
232a2100d75SJordan Rose
233a2100d75SJordan Rose EXPECT_FALSE(isLowercase('.'));
234a2100d75SJordan Rose EXPECT_FALSE(isLowercase('_'));
235a2100d75SJordan Rose
236a2100d75SJordan Rose EXPECT_FALSE(isLowercase('/'));
237a2100d75SJordan Rose EXPECT_FALSE(isLowercase('('));
238a2100d75SJordan Rose EXPECT_FALSE(isLowercase('\0'));
239a2100d75SJordan Rose
240a2100d75SJordan Rose EXPECT_FALSE(isLowercase('\x80'));
241a2100d75SJordan Rose EXPECT_FALSE(isLowercase('\xc2'));
242a2100d75SJordan Rose EXPECT_FALSE(isLowercase('\xff'));
243a2100d75SJordan Rose }
244a2100d75SJordan Rose
TEST(CharInfoTest,isUppercase)245a2100d75SJordan Rose TEST(CharInfoTest, isUppercase) {
246a2100d75SJordan Rose EXPECT_FALSE(isUppercase('0'));
247a2100d75SJordan Rose EXPECT_FALSE(isUppercase('9'));
248a2100d75SJordan Rose
249a2100d75SJordan Rose EXPECT_FALSE(isUppercase('a'));
250a2100d75SJordan Rose EXPECT_TRUE(isUppercase('A'));
251a2100d75SJordan Rose
252a2100d75SJordan Rose EXPECT_FALSE(isUppercase('z'));
253a2100d75SJordan Rose EXPECT_TRUE(isUppercase('Z'));
254a2100d75SJordan Rose
255a2100d75SJordan Rose EXPECT_FALSE(isUppercase('.'));
256a2100d75SJordan Rose EXPECT_FALSE(isUppercase('_'));
257a2100d75SJordan Rose
258a2100d75SJordan Rose EXPECT_FALSE(isUppercase('/'));
259a2100d75SJordan Rose EXPECT_FALSE(isUppercase('('));
260a2100d75SJordan Rose EXPECT_FALSE(isUppercase('\0'));
261a2100d75SJordan Rose
262a2100d75SJordan Rose EXPECT_FALSE(isUppercase('\x80'));
263a2100d75SJordan Rose EXPECT_FALSE(isUppercase('\xc2'));
264a2100d75SJordan Rose EXPECT_FALSE(isUppercase('\xff'));
265a2100d75SJordan Rose }
266a2100d75SJordan Rose
TEST(CharInfoTest,isAlphanumeric)267a2100d75SJordan Rose TEST(CharInfoTest, isAlphanumeric) {
268a2100d75SJordan Rose EXPECT_TRUE(isAlphanumeric('0'));
269a2100d75SJordan Rose EXPECT_TRUE(isAlphanumeric('9'));
270a2100d75SJordan Rose
271a2100d75SJordan Rose EXPECT_TRUE(isAlphanumeric('a'));
272a2100d75SJordan Rose EXPECT_TRUE(isAlphanumeric('A'));
273a2100d75SJordan Rose
274a2100d75SJordan Rose EXPECT_TRUE(isAlphanumeric('z'));
275a2100d75SJordan Rose EXPECT_TRUE(isAlphanumeric('Z'));
276a2100d75SJordan Rose
277a2100d75SJordan Rose EXPECT_FALSE(isAlphanumeric('.'));
278a2100d75SJordan Rose EXPECT_FALSE(isAlphanumeric('_'));
279a2100d75SJordan Rose
280a2100d75SJordan Rose EXPECT_FALSE(isAlphanumeric('/'));
281a2100d75SJordan Rose EXPECT_FALSE(isAlphanumeric('('));
282a2100d75SJordan Rose EXPECT_FALSE(isAlphanumeric('\0'));
283a2100d75SJordan Rose
284a2100d75SJordan Rose EXPECT_FALSE(isAlphanumeric('\x80'));
285a2100d75SJordan Rose EXPECT_FALSE(isAlphanumeric('\xc2'));
286a2100d75SJordan Rose EXPECT_FALSE(isAlphanumeric('\xff'));
287a2100d75SJordan Rose }
288a2100d75SJordan Rose
TEST(CharInfoTest,isPunctuation)289a2100d75SJordan Rose TEST(CharInfoTest, isPunctuation) {
290a2100d75SJordan Rose EXPECT_FALSE(isPunctuation('0'));
291a2100d75SJordan Rose EXPECT_FALSE(isPunctuation('9'));
292a2100d75SJordan Rose
293a2100d75SJordan Rose EXPECT_FALSE(isPunctuation('a'));
294a2100d75SJordan Rose EXPECT_FALSE(isPunctuation('A'));
295a2100d75SJordan Rose
296a2100d75SJordan Rose EXPECT_FALSE(isPunctuation('z'));
297a2100d75SJordan Rose EXPECT_FALSE(isPunctuation('Z'));
298a2100d75SJordan Rose
299a2100d75SJordan Rose EXPECT_TRUE(isPunctuation('.'));
300a2100d75SJordan Rose EXPECT_TRUE(isPunctuation('_'));
301a2100d75SJordan Rose
302a2100d75SJordan Rose EXPECT_TRUE(isPunctuation('/'));
303a2100d75SJordan Rose EXPECT_TRUE(isPunctuation('('));
304a2100d75SJordan Rose
305a2100d75SJordan Rose EXPECT_FALSE(isPunctuation(' '));
306a2100d75SJordan Rose EXPECT_FALSE(isPunctuation('\n'));
307a2100d75SJordan Rose EXPECT_FALSE(isPunctuation('\0'));
308a2100d75SJordan Rose
309a2100d75SJordan Rose EXPECT_FALSE(isPunctuation('\x80'));
310a2100d75SJordan Rose EXPECT_FALSE(isPunctuation('\xc2'));
311a2100d75SJordan Rose EXPECT_FALSE(isPunctuation('\xff'));
312a2100d75SJordan Rose }
313a2100d75SJordan Rose
TEST(CharInfoTest,isPrintable)314a2100d75SJordan Rose TEST(CharInfoTest, isPrintable) {
315a2100d75SJordan Rose EXPECT_TRUE(isPrintable('0'));
316a2100d75SJordan Rose EXPECT_TRUE(isPrintable('9'));
317a2100d75SJordan Rose
318a2100d75SJordan Rose EXPECT_TRUE(isPrintable('a'));
319a2100d75SJordan Rose EXPECT_TRUE(isPrintable('A'));
320a2100d75SJordan Rose
321a2100d75SJordan Rose EXPECT_TRUE(isPrintable('z'));
322a2100d75SJordan Rose EXPECT_TRUE(isPrintable('Z'));
323a2100d75SJordan Rose
324a2100d75SJordan Rose EXPECT_TRUE(isPrintable('.'));
325a2100d75SJordan Rose EXPECT_TRUE(isPrintable('_'));
326a2100d75SJordan Rose
327a2100d75SJordan Rose EXPECT_TRUE(isPrintable('/'));
328a2100d75SJordan Rose EXPECT_TRUE(isPrintable('('));
329a2100d75SJordan Rose
330a2100d75SJordan Rose EXPECT_TRUE(isPrintable(' '));
331a2100d75SJordan Rose EXPECT_FALSE(isPrintable('\t'));
332a2100d75SJordan Rose EXPECT_FALSE(isPrintable('\n'));
333a2100d75SJordan Rose EXPECT_FALSE(isPrintable('\0'));
334a2100d75SJordan Rose
335a2100d75SJordan Rose EXPECT_FALSE(isPrintable('\x80'));
336a2100d75SJordan Rose EXPECT_FALSE(isPrintable('\xc2'));
337a2100d75SJordan Rose EXPECT_FALSE(isPrintable('\xff'));
338a2100d75SJordan Rose }
339a2100d75SJordan Rose
TEST(CharInfoTest,isPreprocessingNumberBody)340a2100d75SJordan Rose TEST(CharInfoTest, isPreprocessingNumberBody) {
341a2100d75SJordan Rose EXPECT_TRUE(isPreprocessingNumberBody('0'));
342a2100d75SJordan Rose EXPECT_TRUE(isPreprocessingNumberBody('9'));
343a2100d75SJordan Rose
344a2100d75SJordan Rose EXPECT_TRUE(isPreprocessingNumberBody('a'));
345a2100d75SJordan Rose EXPECT_TRUE(isPreprocessingNumberBody('A'));
346a2100d75SJordan Rose
347a2100d75SJordan Rose EXPECT_TRUE(isPreprocessingNumberBody('z'));
348a2100d75SJordan Rose EXPECT_TRUE(isPreprocessingNumberBody('Z'));
349a2100d75SJordan Rose EXPECT_TRUE(isPreprocessingNumberBody('.'));
350a2100d75SJordan Rose EXPECT_TRUE(isPreprocessingNumberBody('_'));
351a2100d75SJordan Rose
352a2100d75SJordan Rose EXPECT_FALSE(isPreprocessingNumberBody('/'));
353a2100d75SJordan Rose EXPECT_FALSE(isPreprocessingNumberBody('('));
354a2100d75SJordan Rose EXPECT_FALSE(isPreprocessingNumberBody('\0'));
355a2100d75SJordan Rose
356a2100d75SJordan Rose EXPECT_FALSE(isPreprocessingNumberBody('\x80'));
357a2100d75SJordan Rose EXPECT_FALSE(isPreprocessingNumberBody('\xc2'));
358a2100d75SJordan Rose EXPECT_FALSE(isPreprocessingNumberBody('\xff'));
359a2100d75SJordan Rose }
360a2100d75SJordan Rose
TEST(CharInfoTest,isRawStringDelimBody)361a2100d75SJordan Rose TEST(CharInfoTest, isRawStringDelimBody) {
362a2100d75SJordan Rose EXPECT_TRUE(isRawStringDelimBody('0'));
363a2100d75SJordan Rose EXPECT_TRUE(isRawStringDelimBody('9'));
364a2100d75SJordan Rose
365a2100d75SJordan Rose EXPECT_TRUE(isRawStringDelimBody('a'));
366a2100d75SJordan Rose EXPECT_TRUE(isRawStringDelimBody('A'));
367a2100d75SJordan Rose
368a2100d75SJordan Rose EXPECT_TRUE(isRawStringDelimBody('z'));
369a2100d75SJordan Rose EXPECT_TRUE(isRawStringDelimBody('Z'));
370a2100d75SJordan Rose EXPECT_TRUE(isRawStringDelimBody('.'));
371a2100d75SJordan Rose EXPECT_TRUE(isRawStringDelimBody('_'));
372a2100d75SJordan Rose
373a2100d75SJordan Rose EXPECT_TRUE(isRawStringDelimBody('/'));
374a2100d75SJordan Rose EXPECT_FALSE(isRawStringDelimBody('('));
375a2100d75SJordan Rose EXPECT_FALSE(isRawStringDelimBody('\0'));
376a7d03840SJordan Rose
377a7d03840SJordan Rose EXPECT_FALSE(isRawStringDelimBody('\x80'));
378a7d03840SJordan Rose EXPECT_FALSE(isRawStringDelimBody('\xc2'));
379a7d03840SJordan Rose EXPECT_FALSE(isRawStringDelimBody('\xff'));
380a7d03840SJordan Rose }
381a7d03840SJordan Rose
TEST(CharInfoTest,toLowercase)382a7d03840SJordan Rose TEST(CharInfoTest, toLowercase) {
383a7d03840SJordan Rose EXPECT_EQ('0', toLowercase('0'));
384a7d03840SJordan Rose EXPECT_EQ('9', toLowercase('9'));
385a7d03840SJordan Rose
386a7d03840SJordan Rose EXPECT_EQ('a', toLowercase('a'));
387a7d03840SJordan Rose EXPECT_EQ('a', toLowercase('A'));
388a7d03840SJordan Rose
389a7d03840SJordan Rose EXPECT_EQ('z', toLowercase('z'));
390a7d03840SJordan Rose EXPECT_EQ('z', toLowercase('Z'));
391a7d03840SJordan Rose
392a7d03840SJordan Rose EXPECT_EQ('.', toLowercase('.'));
393a7d03840SJordan Rose EXPECT_EQ('_', toLowercase('_'));
394a7d03840SJordan Rose
395a7d03840SJordan Rose EXPECT_EQ('/', toLowercase('/'));
396a7d03840SJordan Rose EXPECT_EQ('\0', toLowercase('\0'));
397a7d03840SJordan Rose }
398a7d03840SJordan Rose
TEST(CharInfoTest,toUppercase)399a7d03840SJordan Rose TEST(CharInfoTest, toUppercase) {
400a7d03840SJordan Rose EXPECT_EQ('0', toUppercase('0'));
401a7d03840SJordan Rose EXPECT_EQ('9', toUppercase('9'));
402a7d03840SJordan Rose
403a7d03840SJordan Rose EXPECT_EQ('A', toUppercase('a'));
404a7d03840SJordan Rose EXPECT_EQ('A', toUppercase('A'));
405a7d03840SJordan Rose
406a7d03840SJordan Rose EXPECT_EQ('Z', toUppercase('z'));
407a7d03840SJordan Rose EXPECT_EQ('Z', toUppercase('Z'));
408a7d03840SJordan Rose
409a7d03840SJordan Rose EXPECT_EQ('.', toUppercase('.'));
410a7d03840SJordan Rose EXPECT_EQ('_', toUppercase('_'));
411a7d03840SJordan Rose
412a7d03840SJordan Rose EXPECT_EQ('/', toUppercase('/'));
413a7d03840SJordan Rose EXPECT_EQ('\0', toUppercase('\0'));
414a7d03840SJordan Rose }
415a7d03840SJordan Rose
TEST(CharInfoTest,isValidAsciiIdentifier)416*601102d2SCorentin Jabot TEST(CharInfoTest, isValidAsciiIdentifier) {
417*601102d2SCorentin Jabot EXPECT_FALSE(isValidAsciiIdentifier(""));
418a7d03840SJordan Rose
419a7d03840SJordan Rose // 1 character
420*601102d2SCorentin Jabot EXPECT_FALSE(isValidAsciiIdentifier("."));
421*601102d2SCorentin Jabot EXPECT_FALSE(isValidAsciiIdentifier("\n"));
422*601102d2SCorentin Jabot EXPECT_FALSE(isValidAsciiIdentifier(" "));
423*601102d2SCorentin Jabot EXPECT_FALSE(isValidAsciiIdentifier("\x80"));
424*601102d2SCorentin Jabot EXPECT_FALSE(isValidAsciiIdentifier("\xc2"));
425*601102d2SCorentin Jabot EXPECT_FALSE(isValidAsciiIdentifier("\xff"));
426*601102d2SCorentin Jabot EXPECT_FALSE(isValidAsciiIdentifier("$"));
427*601102d2SCorentin Jabot EXPECT_FALSE(isValidAsciiIdentifier("1"));
428a7d03840SJordan Rose
429*601102d2SCorentin Jabot EXPECT_TRUE(isValidAsciiIdentifier("_"));
430*601102d2SCorentin Jabot EXPECT_TRUE(isValidAsciiIdentifier("a"));
431*601102d2SCorentin Jabot EXPECT_TRUE(isValidAsciiIdentifier("z"));
432*601102d2SCorentin Jabot EXPECT_TRUE(isValidAsciiIdentifier("A"));
433*601102d2SCorentin Jabot EXPECT_TRUE(isValidAsciiIdentifier("Z"));
434*601102d2SCorentin Jabot EXPECT_TRUE(isValidAsciiIdentifier("$", /*AllowDollar=*/true));
435a7d03840SJordan Rose
436a7d03840SJordan Rose // 2 characters, '_' suffix
437*601102d2SCorentin Jabot EXPECT_FALSE(isValidAsciiIdentifier("._"));
438*601102d2SCorentin Jabot EXPECT_FALSE(isValidAsciiIdentifier("\n_"));
439*601102d2SCorentin Jabot EXPECT_FALSE(isValidAsciiIdentifier(" _"));
440*601102d2SCorentin Jabot EXPECT_FALSE(isValidAsciiIdentifier("\x80_"));
441*601102d2SCorentin Jabot EXPECT_FALSE(isValidAsciiIdentifier("\xc2_"));
442*601102d2SCorentin Jabot EXPECT_FALSE(isValidAsciiIdentifier("\xff_"));
443*601102d2SCorentin Jabot EXPECT_FALSE(isValidAsciiIdentifier("$_"));
444*601102d2SCorentin Jabot EXPECT_FALSE(isValidAsciiIdentifier("1_"));
445a7d03840SJordan Rose
446*601102d2SCorentin Jabot EXPECT_TRUE(isValidAsciiIdentifier("__"));
447*601102d2SCorentin Jabot EXPECT_TRUE(isValidAsciiIdentifier("a_"));
448*601102d2SCorentin Jabot EXPECT_TRUE(isValidAsciiIdentifier("z_"));
449*601102d2SCorentin Jabot EXPECT_TRUE(isValidAsciiIdentifier("A_"));
450*601102d2SCorentin Jabot EXPECT_TRUE(isValidAsciiIdentifier("Z_"));
451*601102d2SCorentin Jabot EXPECT_TRUE(isValidAsciiIdentifier("$_", /*AllowDollar=*/true));
452a7d03840SJordan Rose
453a7d03840SJordan Rose // 2 characters, '_' prefix
454*601102d2SCorentin Jabot EXPECT_FALSE(isValidAsciiIdentifier("_."));
455*601102d2SCorentin Jabot EXPECT_FALSE(isValidAsciiIdentifier("_\n"));
456*601102d2SCorentin Jabot EXPECT_FALSE(isValidAsciiIdentifier("_ "));
457*601102d2SCorentin Jabot EXPECT_FALSE(isValidAsciiIdentifier("_\x80"));
458*601102d2SCorentin Jabot EXPECT_FALSE(isValidAsciiIdentifier("_\xc2"));
459*601102d2SCorentin Jabot EXPECT_FALSE(isValidAsciiIdentifier("_\xff"));
460*601102d2SCorentin Jabot EXPECT_FALSE(isValidAsciiIdentifier("_$"));
461*601102d2SCorentin Jabot EXPECT_TRUE(isValidAsciiIdentifier("_1"));
462a7d03840SJordan Rose
463*601102d2SCorentin Jabot EXPECT_TRUE(isValidAsciiIdentifier("__"));
464*601102d2SCorentin Jabot EXPECT_TRUE(isValidAsciiIdentifier("_a"));
465*601102d2SCorentin Jabot EXPECT_TRUE(isValidAsciiIdentifier("_z"));
466*601102d2SCorentin Jabot EXPECT_TRUE(isValidAsciiIdentifier("_A"));
467*601102d2SCorentin Jabot EXPECT_TRUE(isValidAsciiIdentifier("_Z"));
468*601102d2SCorentin Jabot EXPECT_TRUE(isValidAsciiIdentifier("_$", /*AllowDollar=*/true));
469a7d03840SJordan Rose
470a7d03840SJordan Rose // 3 characters, '__' prefix
471*601102d2SCorentin Jabot EXPECT_FALSE(isValidAsciiIdentifier("__."));
472*601102d2SCorentin Jabot EXPECT_FALSE(isValidAsciiIdentifier("__\n"));
473*601102d2SCorentin Jabot EXPECT_FALSE(isValidAsciiIdentifier("__ "));
474*601102d2SCorentin Jabot EXPECT_FALSE(isValidAsciiIdentifier("__\x80"));
475*601102d2SCorentin Jabot EXPECT_FALSE(isValidAsciiIdentifier("__\xc2"));
476*601102d2SCorentin Jabot EXPECT_FALSE(isValidAsciiIdentifier("__\xff"));
477*601102d2SCorentin Jabot EXPECT_FALSE(isValidAsciiIdentifier("__$"));
478*601102d2SCorentin Jabot EXPECT_TRUE(isValidAsciiIdentifier("__1"));
479a7d03840SJordan Rose
480*601102d2SCorentin Jabot EXPECT_TRUE(isValidAsciiIdentifier("___"));
481*601102d2SCorentin Jabot EXPECT_TRUE(isValidAsciiIdentifier("__a"));
482*601102d2SCorentin Jabot EXPECT_TRUE(isValidAsciiIdentifier("__z"));
483*601102d2SCorentin Jabot EXPECT_TRUE(isValidAsciiIdentifier("__A"));
484*601102d2SCorentin Jabot EXPECT_TRUE(isValidAsciiIdentifier("__Z"));
485*601102d2SCorentin Jabot EXPECT_TRUE(isValidAsciiIdentifier("__$", /*AllowDollar=*/true));
486a7d03840SJordan Rose
487a7d03840SJordan Rose // 3 characters, '_' prefix and suffix
488*601102d2SCorentin Jabot EXPECT_FALSE(isValidAsciiIdentifier("_._"));
489*601102d2SCorentin Jabot EXPECT_FALSE(isValidAsciiIdentifier("_\n_"));
490*601102d2SCorentin Jabot EXPECT_FALSE(isValidAsciiIdentifier("_ _"));
491*601102d2SCorentin Jabot EXPECT_FALSE(isValidAsciiIdentifier("_\x80_"));
492*601102d2SCorentin Jabot EXPECT_FALSE(isValidAsciiIdentifier("_\xc2_"));
493*601102d2SCorentin Jabot EXPECT_FALSE(isValidAsciiIdentifier("_\xff_"));
494*601102d2SCorentin Jabot EXPECT_FALSE(isValidAsciiIdentifier("_$_"));
495*601102d2SCorentin Jabot EXPECT_TRUE(isValidAsciiIdentifier("_1_"));
496a7d03840SJordan Rose
497*601102d2SCorentin Jabot EXPECT_TRUE(isValidAsciiIdentifier("___"));
498*601102d2SCorentin Jabot EXPECT_TRUE(isValidAsciiIdentifier("_a_"));
499*601102d2SCorentin Jabot EXPECT_TRUE(isValidAsciiIdentifier("_z_"));
500*601102d2SCorentin Jabot EXPECT_TRUE(isValidAsciiIdentifier("_A_"));
501*601102d2SCorentin Jabot EXPECT_TRUE(isValidAsciiIdentifier("_Z_"));
502*601102d2SCorentin Jabot EXPECT_TRUE(isValidAsciiIdentifier("_$_", /*AllowDollar=*/true));
503a2100d75SJordan Rose }
504