diff options
-rw-r--r-- | localedata/tests-mbwc/dat_strfmon.c | 264 | ||||
-rw-r--r-- | localedata/tests-mbwc/tst_strfmon.c | 68 |
2 files changed, 332 insertions, 0 deletions
diff --git a/localedata/tests-mbwc/dat_strfmon.c b/localedata/tests-mbwc/dat_strfmon.c new file mode 100644 index 0000000000..1252ecfe4e --- /dev/null +++ b/localedata/tests-mbwc/dat_strfmon.c @@ -0,0 +1,264 @@ +/* + * TEST SUITE FOR MB/WC FUNCTIONS IN CLIBRARY + * + * FILE: dat_strfmon.c + * + * STRFMON: size_t strfmon (char *buf, size_t nbyte, char *fmt, ... ); + */ + +/* + * NOTE: + * + * The buffer size should be enough to contain a string including a + * null char. + * Returns the number of bytes of the string (NOT including a null char). + */ + +TST_STRFMON tst_strfmon_loc [] = { + { + { Tstrfmon, TST_LOC_de }, + { + { + /* #01 */ + /*inp*/ { 23, "%n %% %i", 123.00 }, + /*exp*/ { 1,0,1,22, "123,00 DM % 123,00 DEM" }, + }, + { + /* #02 */ + /*inp*/ { 23, "%n %% %i", 123.00 }, + /*exp*/ { 1,0,1,22, "123,00 DM % 123,00 DEM" }, + }, + { + /* #03 */ + /*inp*/ { 22, "%n %% %i", 123.00 }, + /*exp*/ { 1,E2BIG,1,-1, "" }, + }, + { + /* #04 */ + /*inp*/ { 30, "%n|%i", 1234.561 }, + /*exp*/ { 1,0,1,24, "1.234,56 DM|1.234,56 DEM" }, + }, + { + /* #05 */ + /*inp*/ { 32, "%n|%i", -1234.561 }, + /*exp*/ { 1,0,1,26, "-1.234,56 DM|-1.234,56 DEM"}, + }, + { + /* #06 */ + /*inp*/ { 32, "%12n|%12i", 1234.561 }, + /*exp*/ { 1,0,1,25, " 1.234,56 DM|1.234,56 DEM"}, + }, + { + /* #07 */ + /*inp*/ { 32, "%12n|%12i", -1234.561 }, + /*exp*/ { 1,0,1,26, "-1.234,56 DM|-1.234,56 DEM"}, + }, + { + /* #08 */ + /*inp*/ { 32, "%#5n|%#5i", 1234.561 }, + /*exp*/ { 1,0,1,28, " 1.234,56 DM| 1.234,56 DEM"}, + }, + { + /* #09 */ + /*inp*/ { 32, "%#5n|%#5i", -1234.561 }, + /*exp*/ { 1,0,1,28, "- 1.234,56 DM|- 1.234,56 DEM"}, + }, + { + /* #10 */ + /*inp*/ { 32, "%=*#5n|%=*#5i", 1234.561 }, + /*exp*/ { 1,0,1,28, " *1.234,56 DM| *1.234,56 DEM"}, + }, + { + /* #11 */ + /*inp*/ { 32, "%=0#5n|%=0#5i", -1234.561 }, + /*exp*/ { 1,0,1,28, "-01.234,56 DM|-01.234,56 DEM"}, + }, + { + /* #12 */ + /*inp*/ { 32, "%^#5n|%^#5i", -1234.561 }, + /*exp*/ { 1,0,1,26, "- 1234,56 DM|- 1234,56 DEM"}, + }, + { + /* #13 */ + /*inp*/ { 32, "%#5.0n|%#5.0i", 1234.444 }, + /*exp*/ { 1,0,1,22, " 1.234 DM| 1.234 DEM" }, + }, + { + /* #14 */ + /*inp*/ { 32, "%#5.0n|%#5.4i", -1234.555 }, + /*exp*/ { 1,0,1,27, "- 1.235 DM|- 1.234,5550 DEM"}, + }, + { + /* #15 */ + /*inp*/ { 32, "%(#5n|%!(#5i", -1234.561 }, + /*exp*/ { 1,0,1,26, "( 1.234,56 DM)|( 1.234,56)"}, + }, + { is_last: 1 } + } + }, + { + { Tstrfmon, TST_LOC_enUS }, + { + { + /* #01 */ + /*inp*/ { 22, "%n %% %i", 123.00 }, + /*exp*/ { 1,0,1,20, "$123.00 % USD 123.00" }, + }, + { + /* #02 */ + /*inp*/ { 21, "%n %% %i", 123.00 }, + /*exp*/ { 1,0,1,20, "$123.00 % USD 123.00" }, + }, + { + /* #03 */ + /*inp*/ { 20, "%n %% %i", 123.00 }, + /*exp*/ { 1,E2BIG,1,-1, "" }, + }, + { + /* #04 */ + /*inp*/ { 30, "%n|%i", 1234.561 }, + /*exp*/ { 1,0,1,22, "$1,234.56|USD 1,234.56" }, + }, + { + /* #05 */ + /*inp*/ { 32, "%n|%i", -1234.561 }, + /*exp*/ { 1,0,1,24, "-$1,234.56|-USD 1,234.56" }, + }, + { + /* #06 */ + /*inp*/ { 30, "%12n|%12i", 1234.561 }, + /*exp*/ { 1,0,1,25, " $1,234.56|USD 1,234.56"}, + }, + { + /* #07 */ + /*inp*/ { 32, "%12n|%12i", -1234.561 }, + /*exp*/ { 1,0,1,26, " -$1,234.56|-USD 1,234.56"}, + }, + { + /* #08 */ + /*inp*/ { 32, "%#5n|%#5i", 1234.561 }, + /*exp*/ { 1,0,1,26, " $ 1,234.56| USD 1,234.56"}, + }, + { + /* #09 */ + /*inp*/ { 32, "%#5n|%#5i", -1234.561 }, + /*exp*/ { 1,0,1,26, "-$ 1,234.56|-USD 1,234.56"}, + }, + { + /* #10 */ + /*inp*/ { 32, "%=*#5n|%=*#5i", 1234.561 }, + /*exp*/ { 1,0,1,26, " $*1,234.56| USD *1,234.56"}, + }, + { + /* #11 */ + /*inp*/ { 32, "%=0#5n|%=0#5i", -1234.561 }, + /*exp*/ { 1,0,1,26, "-$01,234.56|-USD 01,234.56"}, + }, + { + /* #12 */ + /*inp*/ { 32, "%^#5n|%^#5i", -1234.561 }, + /*exp*/ { 1,0,1,24, "-$ 1234.56|-USD 1234.56" }, + }, + { + /* #13 */ + /*inp*/ { 32, "%#5.0n|%#5.0i", 1234.444 }, + /*exp*/ { 1,0,1,20, " $ 1,234| USD 1,234" }, + }, + { + /* #14 */ + /*inp*/ { 32, "%#5.0n|%#5.4i", -1234.555 }, + /*exp*/ { 1,0,1,25, "-$ 1,235|-USD 1,234.5550"}, + }, + { + /* #15 */ + /*inp*/ { 32, "%(#5n|%!(#5i", -1234.561 }, + /*exp*/ { 1,0,1,24, "($ 1,234.56)|( 1,234.56)" }, + }, + { is_last: 1 } + } + }, + { + { Tstrfmon, TST_LOC_eucJP }, + { + { + /* #01 */ + /*inp*/ { 17, "%n %% %i", 123.00 }, + /*exp*/ { 1,0,1,15, "\241\357123 % JPY 123" }, + }, + { + /* #02 */ + /*inp*/ { 16, "%n %% %i", 123.00 }, + /*exp*/ { 1,0,1,15, "\241\357123 % JPY 123" }, + }, + { + /* #03 */ + /*inp*/ { 15, "%n %% %i", 123.00 }, + /*exp*/ { 1,E2BIG,1,-1, "" }, + }, + { + /* #04 */ + /*inp*/ { 30, "%n|%i", 1234.561 }, + /*exp*/ { 1,0,1,17, "\241\3571,235|JPY 1,235" }, + }, + { + /* #05 */ + /*inp*/ { 32, "%n|%i", -1234.561 }, + /*exp*/ { 1,0,1,19, "\241\357-1,235|JPY -1,235" }, + }, + { + /* #06 */ + /*inp*/ { 32, "%12n|%12i", 1234.561 }, + /*exp*/ { 1,0,1,25, " \241\3571,235| JPY 1,235" }, + }, + { + /* #07 */ + /*inp*/ { 32, "%12n|%12i", -1234.561 }, + /*exp*/ { 1,0,1,25, " \241\357-1,235| JPY -1,235" }, + }, + { + /* #08 */ + /*inp*/ { 32, "%#5n|%#5i", 1234.561 }, + /*exp*/ { 1,0,1,21, " \241\357 1,235| JPY 1,235" }, + }, + { + /* #09 */ + /*inp*/ { 32, "%#5n|%#5i", -1234.561 }, + /*exp*/ { 1,0,1,21, "\241\357- 1,235|JPY - 1,235" }, + }, + { + /* #10 */ + /*inp*/ { 32, "%=*#5n|%=*#5i", 1234.561 }, + /*exp*/ { 1,0,1,21, " \241\357*1,235| JPY *1,235" }, + }, + { + /* #11 */ + /*inp*/ { 32, "%=0#5n|%=0#5i", -1234.561 }, + /*exp*/ { 1,0,1,21, "\241\357-01,235|JPY -01,235" }, + }, + { + /* #12 */ + /*inp*/ { 32, "%^#5n|%^#5i", -1234.561 }, + /*exp*/ { 1,0,1,19, "\241\357- 1235|JPY - 1235" }, + }, + { + /* #13 */ + /*inp*/ { 32, "%#5.0n|%#5.0i", 1234.444 }, + /*exp*/ { 1,0,1,21, " \241\357 1,234| JPY 1,234" }, + }, + { + /* #14 */ + /*inp*/ { 32, "%#5.0n|%#5.4i", -1234.555 }, + /*exp*/ { 1,0,1,26, "\241\357- 1,235|JPY - 1,234.5550"}, + }, + { + /* #15 */ + /*inp*/ { 32, "%(#5n|%!(#5i", -1234.561 }, + /*exp*/ { 1,0,1,19, "(\241\357 1,235)|( 1,235)" }, + }, + { is_last: 1 } + } + }, + { + { Tstrfmon, TST_LOC_end } + } +}; diff --git a/localedata/tests-mbwc/tst_strfmon.c b/localedata/tests-mbwc/tst_strfmon.c new file mode 100644 index 0000000000..8413f2cc51 --- /dev/null +++ b/localedata/tests-mbwc/tst_strfmon.c @@ -0,0 +1,68 @@ +/* + STRFMON: size_t strfmon (char *buf, size_t nbyte, const char *fmt, ...) +*/ + +#define TST_FUNCTION strfmon + +#include "tsp_common.c" +#include "dat_strfmon.c" +#include <monetary.h> + +int +tst_strfmon (FILE * fp, int debug_flg) +{ + TST_DECL_VARS (size_t); + char buf[MONSIZE], *mon; + size_t nbt; + char *fmt; + double val; + + TST_DO_TEST (strfmon) + { + TST_HEAD_LOCALE (strfmon, S_STRFMON); + TST_DO_REC (strfmon) + { + TST_GET_ERRET (strfmon); + nbt = TST_INPUT (strfmon).nbytes; + fmt = TST_INPUT (strfmon).fmt; + val = TST_INPUT (strfmon).val; + memset (buf, 0, MONSIZE); + + TST_CLEAR_ERRNO; + ret = strfmon (buf, nbt, fmt, val, val, val); + TST_SAVE_ERRNO; + + if (debug_flg) /* seems fprintf doesn't update the errno */ + { + fprintf (stdout, "strfmon() [ %s : %d ]\n", locale, rec + 1); + fprintf (stdout, " : err = %d | %s\n", errno_save, + strerror (errno)); + fprintf (stdout, " : ret = %d; \t fmt = |%s|\n", ret, fmt); + fprintf (stdout, " : buf = |%s|\n\n", buf); + } + + TST_IF_RETURN (S_STRFMON) + { + }; + if (errno != 0 || ret == -1) + { + continue; + } + + mon = TST_EXPECT (strfmon).mon; + + if (!strcmp (buf, mon)) + { + Result (C_SUCCESS, S_STRFMON, CASE_3, MS_PASSED); + } + else + { + err_count++; + Result (C_FAILURE, S_STRFMON, CASE_3, "the formatted string is " + "different from an expected result"); + } + } + } + + return err_count; +} |