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