1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-27 12:37:44 +00:00

LibC: Implement iswctype

This commit is contained in:
Tim Schumacher 2021-09-17 18:28:28 +02:00 committed by Brian Gianforcaro
parent ff0ab8b9a9
commit 8c7b566629
2 changed files with 68 additions and 3 deletions

View file

@ -39,3 +39,30 @@ TEST_CASE(wctrans)
EXPECT(wctrans("") == 0); EXPECT(wctrans("") == 0);
EXPECT(wctrans("abc") == 0); EXPECT(wctrans("abc") == 0);
} }
TEST_CASE(iswctype)
{
const wint_t test_chars[] = { L'A', L'a', L'F', L'f', L'Z', L'z', L'0', L'\n', L'.', L'\x00' };
// Test that valid properties are wired to the correct implementation.
for (unsigned int i = 0; i < sizeof(test_chars) / sizeof(test_chars[0]); i++) {
EXPECT(iswctype(test_chars[i], wctype("alnum")) == iswalnum(test_chars[i]));
EXPECT(iswctype(test_chars[i], wctype("alpha")) == iswalpha(test_chars[i]));
EXPECT(iswctype(test_chars[i], wctype("blank")) == iswblank(test_chars[i]));
EXPECT(iswctype(test_chars[i], wctype("cntrl")) == iswcntrl(test_chars[i]));
EXPECT(iswctype(test_chars[i], wctype("digit")) == iswdigit(test_chars[i]));
EXPECT(iswctype(test_chars[i], wctype("graph")) == iswgraph(test_chars[i]));
EXPECT(iswctype(test_chars[i], wctype("lower")) == iswlower(test_chars[i]));
EXPECT(iswctype(test_chars[i], wctype("print")) == iswprint(test_chars[i]));
EXPECT(iswctype(test_chars[i], wctype("punct")) == iswpunct(test_chars[i]));
EXPECT(iswctype(test_chars[i], wctype("space")) == iswspace(test_chars[i]));
EXPECT(iswctype(test_chars[i], wctype("upper")) == iswupper(test_chars[i]));
EXPECT(iswctype(test_chars[i], wctype("xdigit")) == iswxdigit(test_chars[i]));
}
// Test that invalid properties always return zero.
for (unsigned int i = 0; i < sizeof(test_chars) / sizeof(test_chars[0]); i++) {
EXPECT(iswctype(test_chars[i], 0) == 0);
EXPECT(iswctype(test_chars[i], -1) == 0);
}
}

View file

@ -92,10 +92,48 @@ int iswblank(wint_t wc)
return __inline_isblank(wc); return __inline_isblank(wc);
} }
int iswctype(wint_t, wctype_t) int iswctype(wint_t wc, wctype_t charclass)
{ {
dbgln("FIXME: Implement iswctype()"); switch (charclass) {
TODO(); case WCTYPE_ALNUM:
return iswalnum(wc);
case WCTYPE_ALPHA:
return iswalpha(wc);
case WCTYPE_BLANK:
return iswblank(wc);
case WCTYPE_CNTRL:
return iswcntrl(wc);
case WCTYPE_DIGIT:
return iswdigit(wc);
case WCTYPE_GRAPH:
return iswgraph(wc);
case WCTYPE_LOWER:
return iswlower(wc);
case WCTYPE_PRINT:
return iswprint(wc);
case WCTYPE_PUNCT:
return iswpunct(wc);
case WCTYPE_SPACE:
return iswspace(wc);
case WCTYPE_UPPER:
return iswupper(wc);
case WCTYPE_XDIGIT:
return iswxdigit(wc);
default:
return 0;
}
} }
wctype_t wctype(const char* property) wctype_t wctype(const char* property)