123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499 |
- //===- unittests/Basic/CharInfoTest.cpp -- ASCII classification tests -----===//
- //
- // The LLVM Compiler Infrastructure
- //
- // This file is distributed under the University of Illinois Open Source
- // License. See LICENSE.TXT for details.
- //
- //===----------------------------------------------------------------------===//
- #include "clang/Basic/CharInfo.h"
- #include "gtest/gtest.h"
- using namespace llvm;
- using namespace clang;
- // Check that the CharInfo table has been constructed reasonably.
- TEST(CharInfoTest, validateInfoTable) {
- using namespace charinfo;
- EXPECT_EQ((unsigned)CHAR_SPACE, InfoTable[(unsigned)' ']);
- EXPECT_EQ((unsigned)CHAR_HORZ_WS, InfoTable[(unsigned)'\t']);
- EXPECT_EQ((unsigned)CHAR_HORZ_WS, InfoTable[(unsigned)'\f']); // ??
- EXPECT_EQ((unsigned)CHAR_HORZ_WS, InfoTable[(unsigned)'\v']); // ??
- EXPECT_EQ((unsigned)CHAR_VERT_WS, InfoTable[(unsigned)'\n']);
- EXPECT_EQ((unsigned)CHAR_VERT_WS, InfoTable[(unsigned)'\r']);
- EXPECT_EQ((unsigned)CHAR_UNDER, InfoTable[(unsigned)'_']);
- EXPECT_EQ((unsigned)CHAR_PERIOD, InfoTable[(unsigned)'.']);
- for (unsigned i = 'a'; i <= 'f'; ++i) {
- EXPECT_EQ((unsigned)CHAR_XLOWER, InfoTable[i]);
- EXPECT_EQ((unsigned)CHAR_XUPPER, InfoTable[i+'A'-'a']);
- }
- for (unsigned i = 'g'; i <= 'z'; ++i) {
- EXPECT_EQ((unsigned)CHAR_LOWER, InfoTable[i]);
- EXPECT_EQ((unsigned)CHAR_UPPER, InfoTable[i+'A'-'a']);
- }
- for (unsigned i = '0'; i <= '9'; ++i)
- EXPECT_EQ((unsigned)CHAR_DIGIT, InfoTable[i]);
- }
- // Check various predicates.
- TEST(CharInfoTest, isASCII) {
- EXPECT_TRUE(isASCII('\0'));
- EXPECT_TRUE(isASCII('\n'));
- EXPECT_TRUE(isASCII(' '));
- EXPECT_TRUE(isASCII('a'));
- EXPECT_TRUE(isASCII('\x7f'));
- EXPECT_FALSE(isASCII('\x80'));
- EXPECT_FALSE(isASCII('\xc2'));
- EXPECT_FALSE(isASCII('\xff'));
- }
- TEST(CharInfoTest, isIdentifierHead) {
- EXPECT_TRUE(isIdentifierHead('a'));
- EXPECT_TRUE(isIdentifierHead('A'));
- EXPECT_TRUE(isIdentifierHead('z'));
- EXPECT_TRUE(isIdentifierHead('Z'));
- EXPECT_TRUE(isIdentifierHead('_'));
- EXPECT_FALSE(isIdentifierHead('0'));
- EXPECT_FALSE(isIdentifierHead('.'));
- EXPECT_FALSE(isIdentifierHead('`'));
- EXPECT_FALSE(isIdentifierHead('\0'));
- EXPECT_FALSE(isIdentifierHead('$'));
- EXPECT_TRUE(isIdentifierHead('$', /*AllowDollar=*/true));
- EXPECT_FALSE(isIdentifierHead('\x80'));
- EXPECT_FALSE(isIdentifierHead('\xc2'));
- EXPECT_FALSE(isIdentifierHead('\xff'));
- }
- TEST(CharInfoTest, isIdentifierBody) {
- EXPECT_TRUE(isIdentifierBody('a'));
- EXPECT_TRUE(isIdentifierBody('A'));
- EXPECT_TRUE(isIdentifierBody('z'));
- EXPECT_TRUE(isIdentifierBody('Z'));
- EXPECT_TRUE(isIdentifierBody('_'));
- EXPECT_TRUE(isIdentifierBody('0'));
- EXPECT_FALSE(isIdentifierBody('.'));
- EXPECT_FALSE(isIdentifierBody('`'));
- EXPECT_FALSE(isIdentifierBody('\0'));
- EXPECT_FALSE(isIdentifierBody('$'));
- EXPECT_TRUE(isIdentifierBody('$', /*AllowDollar=*/true));
- EXPECT_FALSE(isIdentifierBody('\x80'));
- EXPECT_FALSE(isIdentifierBody('\xc2'));
- EXPECT_FALSE(isIdentifierBody('\xff'));
- }
- TEST(CharInfoTest, isHorizontalWhitespace) {
- EXPECT_FALSE(isHorizontalWhitespace('a'));
- EXPECT_FALSE(isHorizontalWhitespace('_'));
- EXPECT_FALSE(isHorizontalWhitespace('0'));
- EXPECT_FALSE(isHorizontalWhitespace('.'));
- EXPECT_FALSE(isHorizontalWhitespace('`'));
- EXPECT_FALSE(isHorizontalWhitespace('\0'));
- EXPECT_FALSE(isHorizontalWhitespace('\x7f'));
- EXPECT_TRUE(isHorizontalWhitespace(' '));
- EXPECT_TRUE(isHorizontalWhitespace('\t'));
- EXPECT_TRUE(isHorizontalWhitespace('\f')); // ??
- EXPECT_TRUE(isHorizontalWhitespace('\v')); // ??
- EXPECT_FALSE(isHorizontalWhitespace('\n'));
- EXPECT_FALSE(isHorizontalWhitespace('\r'));
- EXPECT_FALSE(isHorizontalWhitespace('\x80'));
- EXPECT_FALSE(isHorizontalWhitespace('\xc2'));
- EXPECT_FALSE(isHorizontalWhitespace('\xff'));
- }
- TEST(CharInfoTest, isVerticalWhitespace) {
- EXPECT_FALSE(isVerticalWhitespace('a'));
- EXPECT_FALSE(isVerticalWhitespace('_'));
- EXPECT_FALSE(isVerticalWhitespace('0'));
- EXPECT_FALSE(isVerticalWhitespace('.'));
- EXPECT_FALSE(isVerticalWhitespace('`'));
- EXPECT_FALSE(isVerticalWhitespace('\0'));
- EXPECT_FALSE(isVerticalWhitespace('\x7f'));
- EXPECT_FALSE(isVerticalWhitespace(' '));
- EXPECT_FALSE(isVerticalWhitespace('\t'));
- EXPECT_FALSE(isVerticalWhitespace('\f')); // ??
- EXPECT_FALSE(isVerticalWhitespace('\v')); // ??
- EXPECT_TRUE(isVerticalWhitespace('\n'));
- EXPECT_TRUE(isVerticalWhitespace('\r'));
- EXPECT_FALSE(isVerticalWhitespace('\x80'));
- EXPECT_FALSE(isVerticalWhitespace('\xc2'));
- EXPECT_FALSE(isVerticalWhitespace('\xff'));
- }
- TEST(CharInfoTest, isWhitespace) {
- EXPECT_FALSE(isWhitespace('a'));
- EXPECT_FALSE(isWhitespace('_'));
- EXPECT_FALSE(isWhitespace('0'));
- EXPECT_FALSE(isWhitespace('.'));
- EXPECT_FALSE(isWhitespace('`'));
- EXPECT_FALSE(isWhitespace('\0'));
- EXPECT_FALSE(isWhitespace('\x7f'));
- EXPECT_TRUE(isWhitespace(' '));
- EXPECT_TRUE(isWhitespace('\t'));
- EXPECT_TRUE(isWhitespace('\f'));
- EXPECT_TRUE(isWhitespace('\v'));
- EXPECT_TRUE(isWhitespace('\n'));
- EXPECT_TRUE(isWhitespace('\r'));
- EXPECT_FALSE(isWhitespace('\x80'));
- EXPECT_FALSE(isWhitespace('\xc2'));
- EXPECT_FALSE(isWhitespace('\xff'));
- }
- TEST(CharInfoTest, isDigit) {
- EXPECT_TRUE(isDigit('0'));
- EXPECT_TRUE(isDigit('9'));
- EXPECT_FALSE(isDigit('a'));
- EXPECT_FALSE(isDigit('A'));
- EXPECT_FALSE(isDigit('z'));
- EXPECT_FALSE(isDigit('Z'));
-
- EXPECT_FALSE(isDigit('.'));
- EXPECT_FALSE(isDigit('_'));
- EXPECT_FALSE(isDigit('/'));
- EXPECT_FALSE(isDigit('\0'));
- EXPECT_FALSE(isDigit('\x80'));
- EXPECT_FALSE(isDigit('\xc2'));
- EXPECT_FALSE(isDigit('\xff'));
- }
- TEST(CharInfoTest, isHexDigit) {
- EXPECT_TRUE(isHexDigit('0'));
- EXPECT_TRUE(isHexDigit('9'));
- EXPECT_TRUE(isHexDigit('a'));
- EXPECT_TRUE(isHexDigit('A'));
- EXPECT_FALSE(isHexDigit('z'));
- EXPECT_FALSE(isHexDigit('Z'));
-
- EXPECT_FALSE(isHexDigit('.'));
- EXPECT_FALSE(isHexDigit('_'));
- EXPECT_FALSE(isHexDigit('/'));
- EXPECT_FALSE(isHexDigit('\0'));
- EXPECT_FALSE(isHexDigit('\x80'));
- EXPECT_FALSE(isHexDigit('\xc2'));
- EXPECT_FALSE(isHexDigit('\xff'));
- }
- TEST(CharInfoTest, isLetter) {
- EXPECT_FALSE(isLetter('0'));
- EXPECT_FALSE(isLetter('9'));
- EXPECT_TRUE(isLetter('a'));
- EXPECT_TRUE(isLetter('A'));
- EXPECT_TRUE(isLetter('z'));
- EXPECT_TRUE(isLetter('Z'));
-
- EXPECT_FALSE(isLetter('.'));
- EXPECT_FALSE(isLetter('_'));
- EXPECT_FALSE(isLetter('/'));
- EXPECT_FALSE(isLetter('('));
- EXPECT_FALSE(isLetter('\0'));
- EXPECT_FALSE(isLetter('\x80'));
- EXPECT_FALSE(isLetter('\xc2'));
- EXPECT_FALSE(isLetter('\xff'));
- }
- TEST(CharInfoTest, isLowercase) {
- EXPECT_FALSE(isLowercase('0'));
- EXPECT_FALSE(isLowercase('9'));
- EXPECT_TRUE(isLowercase('a'));
- EXPECT_FALSE(isLowercase('A'));
- EXPECT_TRUE(isLowercase('z'));
- EXPECT_FALSE(isLowercase('Z'));
-
- EXPECT_FALSE(isLowercase('.'));
- EXPECT_FALSE(isLowercase('_'));
- EXPECT_FALSE(isLowercase('/'));
- EXPECT_FALSE(isLowercase('('));
- EXPECT_FALSE(isLowercase('\0'));
- EXPECT_FALSE(isLowercase('\x80'));
- EXPECT_FALSE(isLowercase('\xc2'));
- EXPECT_FALSE(isLowercase('\xff'));
- }
- TEST(CharInfoTest, isUppercase) {
- EXPECT_FALSE(isUppercase('0'));
- EXPECT_FALSE(isUppercase('9'));
- EXPECT_FALSE(isUppercase('a'));
- EXPECT_TRUE(isUppercase('A'));
- EXPECT_FALSE(isUppercase('z'));
- EXPECT_TRUE(isUppercase('Z'));
- EXPECT_FALSE(isUppercase('.'));
- EXPECT_FALSE(isUppercase('_'));
- EXPECT_FALSE(isUppercase('/'));
- EXPECT_FALSE(isUppercase('('));
- EXPECT_FALSE(isUppercase('\0'));
- EXPECT_FALSE(isUppercase('\x80'));
- EXPECT_FALSE(isUppercase('\xc2'));
- EXPECT_FALSE(isUppercase('\xff'));
- }
- TEST(CharInfoTest, isAlphanumeric) {
- EXPECT_TRUE(isAlphanumeric('0'));
- EXPECT_TRUE(isAlphanumeric('9'));
- EXPECT_TRUE(isAlphanumeric('a'));
- EXPECT_TRUE(isAlphanumeric('A'));
- EXPECT_TRUE(isAlphanumeric('z'));
- EXPECT_TRUE(isAlphanumeric('Z'));
- EXPECT_FALSE(isAlphanumeric('.'));
- EXPECT_FALSE(isAlphanumeric('_'));
- EXPECT_FALSE(isAlphanumeric('/'));
- EXPECT_FALSE(isAlphanumeric('('));
- EXPECT_FALSE(isAlphanumeric('\0'));
- EXPECT_FALSE(isAlphanumeric('\x80'));
- EXPECT_FALSE(isAlphanumeric('\xc2'));
- EXPECT_FALSE(isAlphanumeric('\xff'));
- }
- TEST(CharInfoTest, isPunctuation) {
- EXPECT_FALSE(isPunctuation('0'));
- EXPECT_FALSE(isPunctuation('9'));
- EXPECT_FALSE(isPunctuation('a'));
- EXPECT_FALSE(isPunctuation('A'));
- EXPECT_FALSE(isPunctuation('z'));
- EXPECT_FALSE(isPunctuation('Z'));
- EXPECT_TRUE(isPunctuation('.'));
- EXPECT_TRUE(isPunctuation('_'));
- EXPECT_TRUE(isPunctuation('/'));
- EXPECT_TRUE(isPunctuation('('));
- EXPECT_FALSE(isPunctuation(' '));
- EXPECT_FALSE(isPunctuation('\n'));
- EXPECT_FALSE(isPunctuation('\0'));
- EXPECT_FALSE(isPunctuation('\x80'));
- EXPECT_FALSE(isPunctuation('\xc2'));
- EXPECT_FALSE(isPunctuation('\xff'));
- }
- TEST(CharInfoTest, isPrintable) {
- EXPECT_TRUE(isPrintable('0'));
- EXPECT_TRUE(isPrintable('9'));
- EXPECT_TRUE(isPrintable('a'));
- EXPECT_TRUE(isPrintable('A'));
- EXPECT_TRUE(isPrintable('z'));
- EXPECT_TRUE(isPrintable('Z'));
- EXPECT_TRUE(isPrintable('.'));
- EXPECT_TRUE(isPrintable('_'));
- EXPECT_TRUE(isPrintable('/'));
- EXPECT_TRUE(isPrintable('('));
- EXPECT_TRUE(isPrintable(' '));
- EXPECT_FALSE(isPrintable('\t'));
- EXPECT_FALSE(isPrintable('\n'));
- EXPECT_FALSE(isPrintable('\0'));
- EXPECT_FALSE(isPrintable('\x80'));
- EXPECT_FALSE(isPrintable('\xc2'));
- EXPECT_FALSE(isPrintable('\xff'));
- }
- TEST(CharInfoTest, isPreprocessingNumberBody) {
- EXPECT_TRUE(isPreprocessingNumberBody('0'));
- EXPECT_TRUE(isPreprocessingNumberBody('9'));
- EXPECT_TRUE(isPreprocessingNumberBody('a'));
- EXPECT_TRUE(isPreprocessingNumberBody('A'));
- EXPECT_TRUE(isPreprocessingNumberBody('z'));
- EXPECT_TRUE(isPreprocessingNumberBody('Z'));
- EXPECT_TRUE(isPreprocessingNumberBody('.'));
- EXPECT_TRUE(isPreprocessingNumberBody('_'));
- EXPECT_FALSE(isPreprocessingNumberBody('/'));
- EXPECT_FALSE(isPreprocessingNumberBody('('));
- EXPECT_FALSE(isPreprocessingNumberBody('\0'));
- EXPECT_FALSE(isPreprocessingNumberBody('\x80'));
- EXPECT_FALSE(isPreprocessingNumberBody('\xc2'));
- EXPECT_FALSE(isPreprocessingNumberBody('\xff'));
- }
- TEST(CharInfoTest, isRawStringDelimBody) {
- EXPECT_TRUE(isRawStringDelimBody('0'));
- EXPECT_TRUE(isRawStringDelimBody('9'));
- EXPECT_TRUE(isRawStringDelimBody('a'));
- EXPECT_TRUE(isRawStringDelimBody('A'));
- EXPECT_TRUE(isRawStringDelimBody('z'));
- EXPECT_TRUE(isRawStringDelimBody('Z'));
- EXPECT_TRUE(isRawStringDelimBody('.'));
- EXPECT_TRUE(isRawStringDelimBody('_'));
- EXPECT_TRUE(isRawStringDelimBody('/'));
- EXPECT_FALSE(isRawStringDelimBody('('));
- EXPECT_FALSE(isRawStringDelimBody('\0'));
- EXPECT_FALSE(isRawStringDelimBody('\x80'));
- EXPECT_FALSE(isRawStringDelimBody('\xc2'));
- EXPECT_FALSE(isRawStringDelimBody('\xff'));
- }
- TEST(CharInfoTest, toLowercase) {
- EXPECT_EQ('0', toLowercase('0'));
- EXPECT_EQ('9', toLowercase('9'));
- EXPECT_EQ('a', toLowercase('a'));
- EXPECT_EQ('a', toLowercase('A'));
- EXPECT_EQ('z', toLowercase('z'));
- EXPECT_EQ('z', toLowercase('Z'));
- EXPECT_EQ('.', toLowercase('.'));
- EXPECT_EQ('_', toLowercase('_'));
- EXPECT_EQ('/', toLowercase('/'));
- EXPECT_EQ('\0', toLowercase('\0'));
- }
- TEST(CharInfoTest, toUppercase) {
- EXPECT_EQ('0', toUppercase('0'));
- EXPECT_EQ('9', toUppercase('9'));
- EXPECT_EQ('A', toUppercase('a'));
- EXPECT_EQ('A', toUppercase('A'));
- EXPECT_EQ('Z', toUppercase('z'));
- EXPECT_EQ('Z', toUppercase('Z'));
- EXPECT_EQ('.', toUppercase('.'));
- EXPECT_EQ('_', toUppercase('_'));
- EXPECT_EQ('/', toUppercase('/'));
- EXPECT_EQ('\0', toUppercase('\0'));
- }
- TEST(CharInfoTest, isValidIdentifier) {
- EXPECT_FALSE(isValidIdentifier(""));
- // 1 character
- EXPECT_FALSE(isValidIdentifier("."));
- EXPECT_FALSE(isValidIdentifier("\n"));
- EXPECT_FALSE(isValidIdentifier(" "));
- EXPECT_FALSE(isValidIdentifier("\x80"));
- EXPECT_FALSE(isValidIdentifier("\xc2"));
- EXPECT_FALSE(isValidIdentifier("\xff"));
- EXPECT_FALSE(isValidIdentifier("$"));
- EXPECT_FALSE(isValidIdentifier("1"));
- EXPECT_TRUE(isValidIdentifier("_"));
- EXPECT_TRUE(isValidIdentifier("a"));
- EXPECT_TRUE(isValidIdentifier("z"));
- EXPECT_TRUE(isValidIdentifier("A"));
- EXPECT_TRUE(isValidIdentifier("Z"));
- // 2 characters, '_' suffix
- EXPECT_FALSE(isValidIdentifier("._"));
- EXPECT_FALSE(isValidIdentifier("\n_"));
- EXPECT_FALSE(isValidIdentifier(" _"));
- EXPECT_FALSE(isValidIdentifier("\x80_"));
- EXPECT_FALSE(isValidIdentifier("\xc2_"));
- EXPECT_FALSE(isValidIdentifier("\xff_"));
- EXPECT_FALSE(isValidIdentifier("$_"));
- EXPECT_FALSE(isValidIdentifier("1_"));
- EXPECT_TRUE(isValidIdentifier("__"));
- EXPECT_TRUE(isValidIdentifier("a_"));
- EXPECT_TRUE(isValidIdentifier("z_"));
- EXPECT_TRUE(isValidIdentifier("A_"));
- EXPECT_TRUE(isValidIdentifier("Z_"));
- // 2 characters, '_' prefix
- EXPECT_FALSE(isValidIdentifier("_."));
- EXPECT_FALSE(isValidIdentifier("_\n"));
- EXPECT_FALSE(isValidIdentifier("_ "));
- EXPECT_FALSE(isValidIdentifier("_\x80"));
- EXPECT_FALSE(isValidIdentifier("_\xc2"));
- EXPECT_FALSE(isValidIdentifier("_\xff"));
- EXPECT_FALSE(isValidIdentifier("_$"));
- EXPECT_TRUE(isValidIdentifier("_1"));
- EXPECT_TRUE(isValidIdentifier("__"));
- EXPECT_TRUE(isValidIdentifier("_a"));
- EXPECT_TRUE(isValidIdentifier("_z"));
- EXPECT_TRUE(isValidIdentifier("_A"));
- EXPECT_TRUE(isValidIdentifier("_Z"));
- // 3 characters, '__' prefix
- EXPECT_FALSE(isValidIdentifier("__."));
- EXPECT_FALSE(isValidIdentifier("__\n"));
- EXPECT_FALSE(isValidIdentifier("__ "));
- EXPECT_FALSE(isValidIdentifier("__\x80"));
- EXPECT_FALSE(isValidIdentifier("__\xc2"));
- EXPECT_FALSE(isValidIdentifier("__\xff"));
- EXPECT_FALSE(isValidIdentifier("__$"));
- EXPECT_TRUE(isValidIdentifier("__1"));
- EXPECT_TRUE(isValidIdentifier("___"));
- EXPECT_TRUE(isValidIdentifier("__a"));
- EXPECT_TRUE(isValidIdentifier("__z"));
- EXPECT_TRUE(isValidIdentifier("__A"));
- EXPECT_TRUE(isValidIdentifier("__Z"));
- // 3 characters, '_' prefix and suffix
- EXPECT_FALSE(isValidIdentifier("_._"));
- EXPECT_FALSE(isValidIdentifier("_\n_"));
- EXPECT_FALSE(isValidIdentifier("_ _"));
- EXPECT_FALSE(isValidIdentifier("_\x80_"));
- EXPECT_FALSE(isValidIdentifier("_\xc2_"));
- EXPECT_FALSE(isValidIdentifier("_\xff_"));
- EXPECT_FALSE(isValidIdentifier("_$_"));
- EXPECT_TRUE(isValidIdentifier("_1_"));
- EXPECT_TRUE(isValidIdentifier("___"));
- EXPECT_TRUE(isValidIdentifier("_a_"));
- EXPECT_TRUE(isValidIdentifier("_z_"));
- EXPECT_TRUE(isValidIdentifier("_A_"));
- EXPECT_TRUE(isValidIdentifier("_Z_"));
- }
|