* added tests for wcwidth() to locale_test that expose the pretty

drastic failure to handle anything else than ascii chars.

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38934 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Oliver Tappe
2010-10-10 15:07:36 +00:00
parent 3b939cb0b6
commit fdb863b626
@@ -1130,6 +1130,9 @@ test_wctype()
}
// #pragma mark - wctrans ------------------------------------------------------
void
test_wctrans(const char* locale, const wchar_t* text, wctrans_t transition,
const wchar_t* expectedResult)
@@ -1222,6 +1225,70 @@ test_wctrans()
}
// #pragma mark - wcwidth ------------------------------------------------------
void
test_wcwidth()
{
setlocale(LC_ALL, "fr_FR.UTF-8");
printf("wcwidth()\n");
/* many of the following tests have been copied from gnulib */
int problemCount = 0;
int result = 0;
/* Test width of ASCII characters. */
for (wchar_t wc = 0x20; wc < 0x7F; wc++) {
result = wcwidth(wc);
if (result != 1) {
printf("\tPROBLEM: wcwidth(%x)=%x (expected %x)\n", wc, result, 1);
problemCount++;
}
}
struct {
wchar_t wc;
int result;
} data[] = {
{ 0x0, 0 },
{ 0x1, -1 },
{ 0x1F, -1 },
{ 0x80, -1 },
{ 0x9F, -1 },
{ 0xA0, 1 },
{ 0x0301, 0 },
{ 0x05B0, 0 },
{ 0x200E, 0 },
{ 0x2060, 0 },
{ 0xE0001, 0 },
{ 0xE0044, 0 },
{ 0x200B, 0 },
{ 0xFEFF, 0 },
{ 0x3000, 2 },
{ 0xB250, 2 },
{ 0xFF1A, 2 },
{ 0x20369, 2 },
{ 0x2F876, 2 },
{ 0x0, 0 },
};
for (int i = 0; data[i].wc != 0 || i == 0; i++) {
result = wcwidth(data[i].wc);
if (result != data[i].result) {
printf("\tPROBLEM: wcwidth(%x)=%x (expected %x)\n", data[i].wc,
result, data[i].result);
problemCount++;
}
}
if (problemCount)
printf("\t%d problem(s) found!\n", problemCount);
else
printf("\tall fine\n");
}
// #pragma mark - nl_langinfo --------------------------------------------------
@@ -1961,6 +2028,7 @@ main(void)
test_ctype();
test_wctype();
test_wctrans();
test_wcwidth();
test_langinfo();
test_collation();
test_timeconversions();