brintos

brintos / llvm-project-archived public Read only

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