Piotr Caban : ucrtbase: Add printf %a format tests.
Alexandre Julliard
julliard at winehq.org
Mon Jun 8 15:19:56 CDT 2020
Module: wine
Branch: master
Commit: e30b853e3f810da4ab11742f46111a40d8df8cc9
URL: https://source.winehq.org/git/wine.git/?a=commit;h=e30b853e3f810da4ab11742f46111a40d8df8cc9
Author: Piotr Caban <piotr at codeweavers.com>
Date: Mon Jun 8 17:20:57 2020 +0200
ucrtbase: Add printf %a format tests.
Signed-off-by: Piotr Caban <piotr at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/ucrtbase/tests/printf.c | 62 ++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 62 insertions(+)
diff --git a/dlls/ucrtbase/tests/printf.c b/dlls/ucrtbase/tests/printf.c
index 7647ac57e2..64ccd4ca5d 100644
--- a/dlls/ucrtbase/tests/printf.c
+++ b/dlls/ucrtbase/tests/printf.c
@@ -648,6 +648,67 @@ static void test_printf_natural_string(void)
ok(!lstrcmpW(wbuffer, wide_out), "buffer wrong, got=%s\n", wine_dbgstr_w(wbuffer));
}
+static void test_printf_fp(void)
+{
+ static const int flags[] = {
+ 0,
+ _CRT_INTERNAL_PRINTF_LEGACY_MSVCRT_COMPATIBILITY,
+ _CRT_INTERNAL_PRINTF_LEGACY_THREE_DIGIT_EXPONENTS,
+ _CRT_INTERNAL_PRINTF_LEGACY_MSVCRT_COMPATIBILITY
+ | _CRT_INTERNAL_PRINTF_LEGACY_THREE_DIGIT_EXPONENTS
+ };
+ static const struct {
+ const char *fmt;
+ double d;
+ const char *res[ARRAY_SIZE(flags)];
+ } tests[] = {
+ { "%a", 0, { "0x0.0000000000000p+0" }},
+ { "%A", 0, { "0X0.0000000000000P+0" }},
+ { "%a", 0.5, { "0x1.0000000000000p-1" }},
+ { "%a", 1, { "0x1.0000000000000p+0" }},
+ { "%a", 20, { "0x1.4000000000000p+4" }},
+ { "%a", -1, { "-0x1.0000000000000p+0" }},
+ { "%a", 0.1, { "0x1.999999999999ap-4" }},
+ { "%24a", 0.1, { " 0x1.999999999999ap-4" }},
+ { "%024a", 0.1, { "0x00001.999999999999ap-4" }},
+ { "%.2a", 0.1, { "0x1.9ap-4" }},
+ { "%.20a", 0.1, { "0x1.999999999999a0000000p-4" }},
+ { "%.a", 0.1e-20, { "0x1p-70" }},
+ { "%a", 0.1e-20, { "0x1.2e3b40a0e9b4fp-70" }},
+ { "%a", 4.9406564584124654e-324, { "0x0.0000000000001p-1022" }},
+ { "%.0a", -1.5, { "-0x1p+0" }},
+ { "%.0a", -0.5, { "-0x1p-1" }},
+ { "%.0a", 0.5, { "0x1p-1" }},
+ { "%.0a", 1.5, { "0x1p+0" }},
+ { "%.0a", 1.99, { "0x2p+0" }},
+ { "%.0a", 2, { "0x1p+1" }},
+ { "%.0a", 9.5, { "0x1p+3" }},
+ { "%.0a", 10.5, { "0x1p+3" }},
+ { "%#.0a", -1.5, { "-0x1.p+0" }},
+ { "%#.0a", -0.5, { "-0x1.p-1" }},
+ { "%#.0a", 0.5, { "0x1.p-1" }},
+ { "%#.0a", 1.5, { "0x1.p+0" }},
+ };
+
+ const char *res = NULL;
+ char buf[100];
+ int i, j, r;
+
+ for (i = 0; i < ARRAY_SIZE(tests); i++)
+ {
+ for (j = 0; j < ARRAY_SIZE(flags); j++)
+ {
+ if (tests[i].res[j]) res = tests[i].res[j];
+
+ r = vsprintf_wrapper(flags[j], buf, sizeof(buf), tests[i].fmt, tests[i].d);
+ ok(r == strlen(res), "%d,%d) r = %d, expected %d\n",
+ i, j, r, strlen(res));
+ ok(!strcmp(buf, res), "%d,%d) buf = %s, expected %s\n",
+ i, j, buf, res);
+ }
+ }
+}
+
START_TEST(printf)
{
ok(_set_invalid_parameter_handler(test_invalid_parameter_handler) == NULL,
@@ -664,4 +725,5 @@ START_TEST(printf)
test_printf_legacy_three_digit_exp();
test_printf_c99();
test_printf_natural_string();
+ test_printf_fp();
}
More information about the wine-cvs
mailing list