diff --git a/src/tests/system/libroot/posix/Jamfile b/src/tests/system/libroot/posix/Jamfile index 0c8da1c546..05171df207 100644 --- a/src/tests/system/libroot/posix/Jamfile +++ b/src/tests/system/libroot/posix/Jamfile @@ -72,6 +72,10 @@ SimpleTest mbtest : mbtest.c ; +SimpleTest testmb + : testmb.c +; + SimpleTest tst-btowc : tst-btowc.c ; diff --git a/src/tests/system/libroot/posix/testmb.c b/src/tests/system/libroot/posix/testmb.c new file mode 100644 index 0000000000..297373b945 --- /dev/null +++ b/src/tests/system/libroot/posix/testmb.c @@ -0,0 +1,58 @@ +#include +#include + + +int +main(int argc, char *argv[]) +{ + wchar_t w[10]; + char c[10]; + int i; + int lose = 0; + + i = mbstowcs(w, "bar", 4); + if (!(i == 3 && w[1] == 'a')) { + puts("mbstowcs FAILED!"); + lose = 1; + } + + mbstowcs(w, "blah", 5); + i = wcstombs(c, w, 10); + if (i != 4) { + puts("wcstombs FAILED!"); + lose = 1; + } + + if (mblen("foobar", 7) != 1) { + puts("mblen 1 FAILED!"); + lose = 1; + } + + if (mblen("", 1) != 0) { + puts("mblen 2 FAILED!"); + lose = 1; + } + + { + int r; + char c = 'x'; + wchar_t wc; + char mbc[MB_CUR_MAX]; + + if ((r = mbtowc(&wc, &c, MB_CUR_MAX)) <= 0) { + printf("conversion to wide failed, result: %d\n", r); + lose = 1; + } else { + printf("wide value: 0x%04lx\n", (unsigned long) wc); + mbc[0] = '\0'; + if ((r = wctomb(mbc, wc)) <= 0) { + printf("conversion to multibyte failed, result: %d\n", r); + lose = 1; + } + } + + } + + puts(lose ? "Test FAILED!" : "Test succeeded."); + return lose; +}