Permalink
Cannot retrieve contributors at this time
Name already in use
A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
glibc/localedata/tests-mbwc/dat_mbtowc.c
Go to fileThis commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
341 lines (338 sloc)
6.88 KB
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
* TEST SUITE FOR MB/WC FUNCTIONS IN C LIBRARY | |
* | |
* FILE: dat_mbtowc.c | |
* | |
* MBTOWC: int mbtowc (wchar_t *wp, char *s, size_t n); | |
*/ | |
/* NOTE: | |
* | |
* int mbtowc (wchar_t *wp, char *s, size_t n); | |
* | |
* where n: a maximum number of bytes | |
* return: the number of bytes | |
* | |
* | |
* o When you feed a null pointer for a string (s) to the function, | |
* set s_flg=0 instead of putting just a 'NULL' there. | |
* Even if you put a 'NULL', it means a null string as well as "". | |
* | |
* o When s is a null pointer, the function checks state dependency. | |
* | |
* state-dependent encoding - return NON-zero | |
* state-independent encoding - return 0 | |
* | |
* If state-dependent encoding is expected, set | |
* | |
* s_flg = 0, ret_flg = 0, ret_val = +1 | |
* | |
* If state-independent encoding is expected, set | |
* | |
* s_flg = 0, ret_flg = 0, ret_val = 0 | |
* | |
* | |
* When you set ret_flg=1, the test program simply compares | |
* an actual return value with an expected value. You can | |
* check state-independent case (return value is 0) in that | |
* way, but you can not check state-dependent case. So when | |
* you check state- dependency in this test function: | |
* tst_mbtowc(), set ret_flg=0 always. It's a special case | |
* and the test function takes care of it. | |
* | |
* w_flg | |
* | s: (a null string; can't be (char *)NULL) | |
* | | | |
* input. { 1, 0, (char)NULL, MB_LEN_MAX }, | |
* | | |
* s_flg=0: makes _s_ a null pointer. | |
* | |
* expect { 0,0,0,x, 0x0000 }, | |
* | | | |
* | ret_val: 0/+1 | |
* ret_flg=0 | |
* | |
* | |
* Test data for State dependent encodings: | |
* | |
* mbtowc( NULL, NULL, 0 ); ... first data | |
* mbtowc( &wc, s1, n1 ); ... second data | |
* mbtowc( &wc, s2, n2 ); ... third data | |
* */ | |
#include <limits.h> | |
TST_MBTOWC tst_mbtowc_loc [] = { | |
{ | |
{ Tmbtowc, TST_LOC_de }, | |
{ | |
{ /*----------------- #01 -----------------*/ | |
{ | |
{ | |
{ 1, 1, "\xfc\xe4\xf6", 1 }, | |
{ 1, 1, "\xfc\xe4\xf6", 2 }, | |
{ 1, 1, "\xfc\xe4\xf6", MB_LEN_MAX }, | |
} | |
}, | |
{ | |
{ | |
{ 0, 1, 1, 0x00FC }, | |
{ 0, 1, 1, 0x00FC }, | |
{ 0, 1, 1, 0x00FC }, | |
} | |
} | |
}, | |
{ /*----------------- #02 -----------------*/ | |
{ | |
{ | |
{ 1, 1, "\177", MB_LEN_MAX }, | |
{ 1, 1, "\200", MB_LEN_MAX }, | |
{ 1, 1, "\201", MB_LEN_MAX }, | |
} | |
}, | |
{ | |
{ | |
{ 0, 1, 1, 0x007F }, | |
{ 0, 1, 1, 0x0080 }, | |
{ 0, 1, 1, 0x0081 }, | |
} | |
} | |
}, | |
{ /*----------------- #03 -----------------*/ | |
{ | |
{ | |
{ 1, 1, "", MB_LEN_MAX }, | |
{ 0, 1, "\xfc\xe4\xf6", 1 }, | |
{ 0, 1, "\xfc\xe4\xf6", 2 }, | |
} | |
}, | |
{ | |
{ | |
{ 0, 1, 0, 0x0000 }, | |
{ 0, 1, 1, 0x0000 }, | |
{ 0, 1, 1, 0x0000 }, | |
} | |
} | |
}, | |
{ /*----------------- #04 -----------------*/ | |
{ | |
{ | |
{ 0, 1, "\xfc\xe4\xf6", MB_LEN_MAX }, | |
{ 0, 1, "\177", MB_LEN_MAX }, | |
{ 0, 1, "", MB_LEN_MAX }, | |
} | |
}, | |
{ | |
{ | |
{ 0, 1, 1, 0x0000 }, | |
{ 0, 1, 1, 0x0000 }, | |
{ 0, 1, 0, 0x0000 }, | |
} | |
} | |
}, | |
{ /*----------------- #05 -----------------*/ | |
{ | |
{ | |
{ 0, 1, "\xfc\xe4\xf6", MB_LEN_MAX }, | |
{ 0, 1, "\177", MB_LEN_MAX }, | |
{ 0, 0, NULL, MB_LEN_MAX }, | |
} | |
}, | |
{ | |
{ | |
{ 0, 1, 1, 0x0000 }, | |
{ 0, 1, 1, 0x0000 }, | |
{ 0, 0, 0, 0x0000 }, | |
} | |
} | |
}, | |
{ .is_last = 1 } | |
} | |
}, | |
{ | |
{ Tmbtowc, TST_LOC_enUS }, | |
{ | |
{ /*----------------- #01 -----------------*/ | |
{ | |
{ | |
{ 1, 1, "ABC", 1 }, | |
{ 1, 1, "ABC", 2 }, | |
{ 1, 1, "ABC", MB_LEN_MAX }, | |
} | |
}, | |
{ | |
{ | |
{ 0, 1, 1, 0x0041 }, | |
{ 0, 1, 1, 0x0041 }, | |
{ 0, 1, 1, 0x0041 }, | |
} | |
} | |
}, | |
{ /*----------------- #02 -----------------*/ | |
{ | |
{ | |
{ 1, 1, "\177", MB_LEN_MAX }, | |
{ 1, 1, "\200", MB_LEN_MAX }, | |
{ 1, 1, "\201", MB_LEN_MAX }, | |
} | |
}, | |
{ | |
{ | |
{ 0, 1, 1, 0x007F }, | |
{ EILSEQ, 1, -1, 0x0000 }, | |
{ EILSEQ, 1, -1, 0x0000 }, | |
} | |
} | |
}, | |
{ /*----------------- #03 -----------------*/ | |
{ | |
{ | |
{ 1, 1, "", MB_LEN_MAX }, | |
{ 0, 1, "ABC", 1 }, | |
{ 0, 1, "ABC", 2 }, | |
} | |
}, | |
{ | |
{ | |
{ 0, 1, 0, 0x0000 }, | |
{ 0, 1, 1, 0x0000 }, | |
{ 0, 1, 1, 0x0000 }, | |
} | |
} | |
}, | |
{ /*----------------- #04 -----------------*/ | |
{ | |
{ | |
{ 0, 1, "ABC", MB_LEN_MAX }, | |
{ 0, 1, "\177", MB_LEN_MAX }, | |
{ 0, 1, "", MB_LEN_MAX }, | |
} | |
}, | |
{ | |
{ | |
{ 0, 1, 1, 0x0000 }, | |
{ 0, 1, 1, 0x0000 }, | |
{ 0, 1, 0, 0x0000 }, | |
} | |
} | |
}, | |
{ /*----------------- #05 -----------------*/ | |
{ | |
{ | |
{ 0, 1, "ABC", MB_LEN_MAX }, | |
{ 0, 1, "\177", MB_LEN_MAX }, | |
{ 0, 0, NULL, MB_LEN_MAX }, | |
} | |
}, | |
{ | |
{ | |
{ 0, 1, 1, 0x0000 }, | |
{ 0, 1, 1, 0x0000 }, | |
{ 0, 0, 0, 0x0000 }, | |
} | |
} | |
}, | |
{ .is_last = 1 } | |
} | |
}, | |
{ | |
{ Tmbtowc, TST_LOC_eucJP }, | |
{ | |
{ /*----------------- #01 -----------------*/ | |
{ | |
{ | |
{ 1, 1, "\244\242A", 1 }, | |
{ 1, 1, "\244\242A", 2 }, | |
{ 1, 1, "\244\242A", MB_LEN_MAX }, | |
} | |
}, | |
{ | |
{ | |
#ifdef SHOJI_IS_RIGHT | |
{ EILSEQ, 1, -1, 0x0000 }, | |
#else | |
/* XXX EILSEQ was introduced in ISO C99. */ | |
{ 0, 1, -1, 0x0000 }, | |
#endif | |
{ 0, 1, 2, 0x3042 }, | |
{ 0, 1, 2, 0x3042 }, | |
} | |
} | |
}, | |
{ /*----------------- #02 -----------------*/ | |
{ | |
{ | |
{ 1, 1, "\177\244\242", MB_LEN_MAX }, | |
{ 1, 1, "\377\244\242", MB_LEN_MAX }, | |
{ 1, 1, "\201\244\242", MB_LEN_MAX }, | |
} | |
}, | |
{ | |
{ | |
{ 0, 1, +1, 0x007F }, | |
#ifdef SHOJI_IS_RIGHT | |
{ EILSEQ, 1, -1, 0x0000 }, | |
#else | |
{ 0, 1, -1, 0x0000 }, | |
#endif | |
{ 0, 1, +1, 0x0081 }, | |
} | |
} | |
}, | |
{ /*----------------- #03 -----------------*/ | |
{ | |
{ | |
{ 1, 1, "", MB_LEN_MAX }, | |
{ 0, 1, "\244\242A", 1 }, | |
{ 0, 1, "\244\242A", 2 }, | |
} | |
}, | |
{ | |
{ | |
{ 0, 1, 0, 0x0000 }, | |
#ifdef SHOJI_IS_RIGHT | |
{ EILSEQ, 1, -1, 0x0000 }, | |
#else | |
/* XXX EILSEQ was introduced in ISO C99. */ | |
{ 0, 1, -1, 0x0000 }, | |
#endif | |
{ 0, 1, 2, 0x0000 }, | |
} | |
} | |
}, | |
{ /*----------------- #04 -----------------*/ | |
{ | |
{ | |
{ 0, 1, "\244\242A", MB_LEN_MAX }, | |
{ 0, 1, "\177\244\242", MB_LEN_MAX }, | |
{ 0, 1, "", MB_LEN_MAX }, | |
} | |
}, | |
{ | |
{ | |
{ 0, 1, 2, 0x0000 }, | |
{ 0, 1, +1, 0x0000 }, | |
{ 0, 1, 0, 0x0000 }, | |
} | |
} | |
}, | |
{ /*----------------- #05 -----------------*/ | |
{ | |
{ | |
{ 0, 1, "\244\242A", MB_LEN_MAX }, | |
{ 0, 1, "\177\244\242", MB_LEN_MAX }, | |
{ 0, 0, NULL, MB_LEN_MAX }, | |
} | |
}, | |
{ | |
{ | |
{ 0, 1, 2, 0x0000 }, | |
{ 0, 1, +1, 0x0000 }, | |
{ 0, 0, 0, 0x0000 }, | |
} | |
} | |
}, | |
{ .is_last = 1 } | |
} | |
}, | |
{ | |
{ Tmbtowc, TST_LOC_end } | |
} | |
}; |