2 * PROJECT: ReactOS CRT regression tests
3 * LICENSE: GPL - See COPYING in the top level directory
4 * FILE: rostests/regtests/crt/iofuncs.c
5 * PURPOSE: Tests for input/output functions of the CRT
6 * PROGRAMMERS: Gregor Schneider
10 #include <wine/test.h>
12 #define _CRT_NON_CONFORMING_SWPRINTFS
22 { 45.0, 2, "+4.50E+001", "+4.5000E+001" }, /*0*/
23 { 0.0001, 1, "+1.0E-004", "+1.000E-004" },
24 { 0.0001, -10, "+1.000000E-004", "+1.000000E-004" },
25 { 0.0001, 10, "+1.0000000000E-004", "+1.000000000000E-004" },
26 { -111.0001, 5, "-1.11000E+002", "-1.1100010E+002" },
27 { 111.0001, 5, "+1.11000E+002", "+1.1100010E+002" }, /*5*/
28 { 3333.3, 2, "+3.33E+003", "+3.3333E+003" },
29 { 999999999999.9, 3, "+1.000E+012", "+1.00000E+012" },
30 { 0.0, 5, "+0.00000E+000", "+0.0000000E+000" },
31 { 0.0, 0, "+0E+000", "+0.00E+000" },
32 { 0.0, -1, "+0.000000E+000", "+0.0E+000" }, /*10*/
33 { -123.0001, 0, "-1E+002", "-1.23E+002" },
34 { -123.0001, -1, "-1.230001E+002", "-1.2E+002" },
35 { -123.0001, -2, "-1.230001E+002", "-1E+002" },
36 { -123.0001, -3, "-1.230001E+002", "-1.230001E+002" },
37 { 99.99, 1, "+1.0E+002", "+9.999E+001" }, /*15*/
38 { 0.0063, 2, "+6.30E-003", "+6.3000E-003" },
39 { 0.0063, 3, "+6.300E-003", "+6.30000E-003" },
40 { 0.09999999996, 2, "+1.00E-001", "+1.0000E-001" },
41 { 0.6, 1, "+6.0E-001", "+6.000E-001" },
42 { 0.6, 0, "+6E-001", "+6.00E-001" }, /*20*/
43 { 0.4, 0, "+4E-001", "+4.00E-001" },
44 { 0.49, 0, "+5E-001", "+4.90E-001" },
45 { 0.51, 0, "+5E-001", "+5.10E-001" }
53 /* Test exponential format */
54 buf
= malloc(30 * sizeof(char));
57 printf("Memory full, exiting\n");
60 for (i
= 0; i
< sizeof(ECVTTESTDATA
)/sizeof(ECVTTESTDATA
[0]); i
++)
62 sprintf(buf
, "%-+.*E", ECVTTESTDATA
[i
].prec
, ECVTTESTDATA
[i
].val
);
63 ok(!strcmp(buf
, ECVTTESTDATA
[i
].exp
),
64 "sprintf exp test %d failed: got %s, expected %s\n",
65 i
, buf
, ECVTTESTDATA
[i
].exp
);
67 for (i
= 0; i
< sizeof(ECVTTESTDATA
)/sizeof(ECVTTESTDATA
[0]); i
++)
69 sprintf(buf
, "%-+.*E", ECVTTESTDATA
[i
].prec
+ 2, ECVTTESTDATA
[i
].val
);
70 ok(!strcmp(buf
, ECVTTESTDATA
[i
].exp2
),
71 "sprintf exp +2 prec test %d failed: got %s, expected %s\n",
72 i
, buf
, ECVTTESTDATA
[i
].exp2
);
75 /* Test with negative number to be rounded */
76 sprintf(buf
, "%-+.*E", ECVTTESTDATA
[18].prec
+ 2, -ECVTTESTDATA
[18].val
);
77 ok(!strcmp(buf
, "-1.0000E-001"), "Negative number sprintf rounding failed: got %s, expected %s\n",
86 wchar_t wnum
[] = L
"12.3";
88 /* Test sscanf behaviour */
89 sscanf(cnum
, "%lf", &var
);
90 ok(var
== 12.3, "sscanf double conversion failed: got %f\n", var
);
91 swscanf(wnum
, L
"%lf", &var
);
92 ok(var
== 12.3, "swscanf double conversion failed: got %f\n", var
);