92{
93 enum {
94 NO_ARG,
95 INT_ARG,
96 ULONGLONG_ARG,
97 DOUBLE_ARG,
98 PTR_ARG,
99 TODO_FLAG = 0x1000
100 };
101
102 struct {
107 int arg_i;
109 double arg_d;
110 const void *arg_ptr;
112 { "%+#23.15e", "+7.894561230000000e+008", 0, DOUBLE_ARG, 0, 0, 789456123 },
113 { "%-#23.15e", "7.894561230000000e+008 ", 0, DOUBLE_ARG, 0, 0, 789456123 },
114 { "%#23.15e", " 7.894561230000000e+008", 0, DOUBLE_ARG, 0, 0, 789456123 },
115 { "%#1.1g", "8.e+008", 0, DOUBLE_ARG, 0, 0, 789456123 },
116 {
"%I64d",
"-8589934591", 0, ULONGLONG_ARG, 0, ((
ULONGLONG)0xffffffff)*0xffffffff },
117 { "%+8I64d", " +100", 0, ULONGLONG_ARG, 0, 100 },
118 { "%+.8I64d", "+00000100", 0, ULONGLONG_ARG, 0, 100 },
119 { "%+10.8I64d", " +00000100", 0, ULONGLONG_ARG, 0, 100 },
120 { "%_1I64d", "_1I64d", 0, ULONGLONG_ARG, 0, 100 },
121 { "%-1.5I64d", "-00100", 0, ULONGLONG_ARG, 0, -100 },
122 { "%5I64d", " 100", 0, ULONGLONG_ARG, 0, 100 },
123 { "%5I64d", " -100", 0, ULONGLONG_ARG, 0, -100 },
124 { "%-5I64d", "100 ", 0, ULONGLONG_ARG, 0, 100 },
125 { "%-5I64d", "-100 ", 0, ULONGLONG_ARG, 0, -100 },
126 { "%-.5I64d", "00100", 0, ULONGLONG_ARG, 0, 100 },
127 { "%-.5I64d", "-00100", 0, ULONGLONG_ARG, 0, -100 },
128 { "%-8.5I64d", "00100 ", 0, ULONGLONG_ARG, 0, 100 },
129 { "%-8.5I64d", "-00100 ", 0, ULONGLONG_ARG, 0, -100 },
130 { "%05I64d", "00100", 0, ULONGLONG_ARG, 0, 100 },
131 { "%05I64d", "-0100", 0, ULONGLONG_ARG, 0, -100 },
132 { "% I64d", " 100", 0, ULONGLONG_ARG, 0, 100 },
133 { "% I64d", "-100", 0, ULONGLONG_ARG, 0, -100 },
134 { "% 5I64d", " 100", 0, ULONGLONG_ARG, 0, 100 },
135 { "% 5I64d", " -100", 0, ULONGLONG_ARG, 0, -100 },
136 { "% .5I64d", " 00100", 0, ULONGLONG_ARG, 0, 100 },
137 { "% .5I64d", "-00100", 0, ULONGLONG_ARG, 0, -100 },
138 { "% 8.5I64d", " 00100", 0, ULONGLONG_ARG, 0, 100 },
139 { "% 8.5I64d", " -00100", 0, ULONGLONG_ARG, 0, -100 },
140 { "%.0I64d", "", 0, ULONGLONG_ARG },
141 { "%#+21.18I64x", " 0x00ffffffffffffff9c", 0, ULONGLONG_ARG, 0, -100 },
142 { "%#.25I64o", "0001777777777777777777634", 0, ULONGLONG_ARG, 0, -100 },
143 { "%#+24.20I64o", " 01777777777777777777634", 0, ULONGLONG_ARG, 0, -100 },
144 { "%#+18.21I64X", "0X00000FFFFFFFFFFFFFF9C", 0, ULONGLONG_ARG, 0, -100 },
145 { "%#+20.24I64o", "001777777777777777777634", 0, ULONGLONG_ARG, 0, -100 },
146 { "%#+25.22I64u", " 0018446744073709551615", 0, ULONGLONG_ARG, 0, -1 },
147 { "%#+25.22I64u", " 0018446744073709551615", 0, ULONGLONG_ARG, 0, -1 },
148 { "%#+30.25I64u", " 0000018446744073709551615", 0, ULONGLONG_ARG, 0, -1 },
149 { "%+#25.22I64d", " -0000000000000000000001", 0, ULONGLONG_ARG, 0, -1 },
150 { "%#-8.5I64o", "00144 ", 0, ULONGLONG_ARG, 0, 100 },
151 { "%#-+ 08.5I64d", "+00100 ", 0, ULONGLONG_ARG, 0, 100 },
152 { "%.80I64d",
153 "00000000000000000000000000000000000000000000000000000000000000000000000000000001",
154 0, ULONGLONG_ARG, 0, 1 },
155 { "% .80I64d",
156 " 00000000000000000000000000000000000000000000000000000000000000000000000000000001",
157 0, ULONGLONG_ARG, 0, 1 },
158 { "% .80d",
159 " 00000000000000000000000000000000000000000000000000000000000000000000000000000001",
160 0, INT_ARG, 1 },
161 { "%I", "I", 0, INT_ARG, 1 },
162 { "%Iq", "Iq", 0, INT_ARG, 1 },
163 { "%Ihd", "Ihd", 0, INT_ARG, 1 },
164 { "%I0d", "I0d", 0, INT_ARG, 1 },
165 { "%I64D", "D", 0, ULONGLONG_ARG, 0, -1 },
166 { "%zx", "1", "zx", INT_ARG, 1 },
167 { "%z", "z", 0, INT_ARG, 1 },
168 { "%tx", "1", "tx", INT_ARG, 1 },
169 { "%t", "t", 0, INT_ARG, 1 },
170 { "% d", " 1", 0, INT_ARG, 1 },
171 { "%+ d", "+1", 0, INT_ARG, 1 },
172 {
"%S",
"wide", 0, PTR_ARG, 0, 0, 0,
L"wide" },
173 { "%04c", "0001", 0, INT_ARG, '1' },
174 { "%-04c", "1 ", 0, INT_ARG, '1' },
175 { "%#012x", "0x0000000001", 0, INT_ARG, 1 },
176 { "%#012x", "000000000000", 0, INT_ARG, 0 },
177 { "%#04.8x", "0x00000001", 0, INT_ARG, 1 },
178 { "%#04.8x", "00000000", 0, INT_ARG, 0 },
179 { "%#-08.2x", "0x01 ", 0, INT_ARG, 1 },
180 { "%#-08.2x", "00 ", 0, INT_ARG, 0 },
181 { "%#.0x", "0x1", 0, INT_ARG, 1 },
182 { "%#.0x", "", 0, INT_ARG, 0 },
183 { "%#08o", "00000001", 0, INT_ARG, 1 },
184 { "%#o", "01", 0, INT_ARG, 1 },
185 { "%#o", "0", 0, INT_ARG, 0 },
186 { "%04s", "0foo", 0, PTR_ARG, 0, 0, 0, "foo" },
187 { "%.1s", "f", 0, PTR_ARG, 0, 0, 0, "foo" },
188 { "hello", "hello", 0, NO_ARG },
189 {
"%ws",
"wide", 0, PTR_ARG, 0, 0, 0,
L"wide" },
190 {
"%-10ws",
"wide ", 0, PTR_ARG, 0, 0, 0,
L"wide" },
191 {
"%10ws",
" wide", 0, PTR_ARG, 0, 0, 0,
L"wide" },
192 {
"%#+ -03whlls",
"wide", 0, PTR_ARG, 0, 0, 0,
L"wide" },
193 {
"%w0s",
"0s", 0, PTR_ARG, 0, 0, 0,
L"wide" },
194 {
"%w-s",
"-s", 0, PTR_ARG, 0, 0, 0,
L"wide" },
195 {
"%ls",
"wide", 0, PTR_ARG, 0, 0, 0,
L"wide" },
196 { "%Ls", "not wide", 0, PTR_ARG, 0, 0, 0, "not wide" },
197 { "%b", "b", 0, NO_ARG },
198 { "%3c", " a", 0, INT_ARG, 'a' },
199 { "%3d", "1234", 0, INT_ARG, 1234 },
200 { "%3h", "", 0, NO_ARG },
201 { "%k%m%q%r%t%v%y%z", "kmqrtvyz", 0, NO_ARG },
202 { "%-1d", "2", 0, INT_ARG, 2 },
203 { "%2.4f", "8.6000", 0, DOUBLE_ARG, 0, 0, 8.6 },
204 { "%0f", "0.600000", 0, DOUBLE_ARG, 0, 0, 0.6 },
205 { "%.0f", "1", 0, DOUBLE_ARG, 0, 0, 0.6 },
206 { "%2.4e", "8.6000e+000", 0, DOUBLE_ARG, 0, 0, 8.6 },
207 { "% 2.4e", " 8.6000e+000", 0, DOUBLE_ARG, 0, 0, 8.6 },
208 { "% 014.4e", " 008.6000e+000", 0, DOUBLE_ARG, 0, 0, 8.6 },
209 { "% 2.4e", "-8.6000e+000", 0, DOUBLE_ARG, 0, 0, -8.6 },
210 { "%+2.4e", "+8.6000e+000", 0, DOUBLE_ARG, 0, 0, 8.6 },
211 { "%2.4g", "8.6", 0, DOUBLE_ARG, 0, 0, 8.6 },
212 { "%-i", "-1", 0, INT_ARG, -1 },
213 { "%-i", "1", 0, INT_ARG, 1 },
214 { "%+i", "+1", 0, INT_ARG, 1 },
215 { "%o", "12", 0, INT_ARG, 10 },
216 {
"%s",
"(null)", 0, PTR_ARG, 0, 0, 0,
NULL },
217 { "%s", "%%%%", 0, PTR_ARG, 0, 0, 0, "%%%%" },
218 { "%u", "4294967295", 0, INT_ARG, -1 },
219 { "%w", "", 0, INT_ARG, -1 },
220 { "%h", "", 0, INT_ARG, -1 },
221 { "%j", "", "j", ULONGLONG_ARG, 0, -1 },
222 { "%jd", "-1", "jd", ULONGLONG_ARG, 0, -1 },
223 { "%F", "", 0, INT_ARG, -1 },
224 { "%N", "", 0, INT_ARG, -1 },
225 { "%H", "H", 0, INT_ARG, -1 },
226 { "x%cx", "xXx", 0, INT_ARG, 0x100+'X' },
227 { "%%0", "%0", 0, NO_ARG },
228 { "%hx", "2345", 0, INT_ARG, 0x12345 },
229 { "%hhx", "123", 0, INT_ARG, 0x123 },
230 { "%hhx", "2345", 0, INT_ARG, 0x12345 },
231 {
"%lf",
"-1.#IND00", 0, DOUBLE_ARG, 0, 0,
IND },
232 {
"%lf",
"1.#QNAN0", 0, DOUBLE_ARG, 0, 0,
NAN },
233 {
"%lf",
"1.#INF00", 0, DOUBLE_ARG, 0, 0,
INFINITY },
234 {
"%le",
"-1.#IND00e+000", 0, DOUBLE_ARG, 0, 0,
IND },
235 {
"%le",
"1.#QNAN0e+000", 0, DOUBLE_ARG, 0, 0,
NAN },
236 {
"%le",
"1.#INF00e+000", 0, DOUBLE_ARG, 0, 0,
INFINITY },
237 {
"%lg",
"-1.#IND", 0, DOUBLE_ARG, 0, 0,
IND },
238 {
"%lg",
"1.#QNAN", 0, DOUBLE_ARG, 0, 0,
NAN },
239 {
"%lg",
"1.#INF", 0, DOUBLE_ARG, 0, 0,
INFINITY },
240 {
"%010.2lf",
"-000001.#J", 0, DOUBLE_ARG, 0, 0,
IND },
241 {
"%010.2lf",
"0000001.#R", 0, DOUBLE_ARG, 0, 0,
NAN },
242 {
"%010.2lf",
"0000001.#J", 0, DOUBLE_ARG, 0, 0,
INFINITY },
243 { "%c", "a", 0, INT_ARG, 'a' },
244 { "%c", "\x82", 0, INT_ARG, 0xa082 },
245 { "%C", "a", 0, INT_ARG, 'a' },
246 { "%C", "", 0, INT_ARG, 0x3042 },
247 { "a%Cb", "ab", 0, INT_ARG, 0x3042 },
248 {
"%lld",
"-8589934591",
"1", ULONGLONG_ARG, 0, ((
ULONGLONG)0xffffffff)*0xffffffff },
249 { "%I32d", "1", "I32d", INT_ARG, 1 },
250 { "%.0f", "-2", 0, DOUBLE_ARG, 0, 0, -1.5 },
251 { "%.0f", "-1", 0, DOUBLE_ARG, 0, 0, -0.5 },
252 { "%.0f", "1", 0, DOUBLE_ARG, 0, 0, 0.5 },
253 { "%.0f", "2", 0, DOUBLE_ARG, 0, 0, 1.5 },
254 { "%.30f", "0.333333333333333310000000000000", 0, TODO_FLAG | DOUBLE_ARG, 0, 0, 1.0/3.0 },
255 {
"%.30lf",
"1.414213562373095100000000000000", 0, TODO_FLAG | DOUBLE_ARG, 0, 0,
sqrt(2) },
256 { "%f", "3.141593", 0, DOUBLE_ARG, 0, 0, 3.141592653590000 },
257 { "%.10f", "3.1415926536", 0, DOUBLE_ARG, 0, 0, 3.141592653590000 },
258 { "%.11f", "3.14159265359", 0, DOUBLE_ARG, 0, 0, 3.141592653590000 },
259 { "%.15f", "3.141592653590000", 0, DOUBLE_ARG, 0, 0, 3.141592653590000 },
260 {
"%.15f",
"3.141592653589793", 0, DOUBLE_ARG, 0, 0,
M_PI },
261 { "%.13f", "37.8662615745371", 0, DOUBLE_ARG, 0, 0, 37.866261574537077 },
262 { "%.14f", "37.86626157453708", 0, DOUBLE_ARG, 0, 0, 37.866261574537077 },
263 { "%.15f", "37.866261574537077", 0, DOUBLE_ARG, 0, 0, 37.866261574537077 },
264 { "%g", "0.0005", 0, DOUBLE_ARG, 0, 0, 0.0005 },
265 { "%g", "5e-005", 0, DOUBLE_ARG, 0, 0, 0.00005 },
266 { "%g", "5e-006", 0, DOUBLE_ARG, 0, 0, 0.000005 },
267 { "%g", "1e+015", 0, DOUBLE_ARG, 0, 0, 999999999999999.0 },
268 { "%g", "1e+015", 0, DOUBLE_ARG, 0, 0, 1000000000000000.0 },
269 { "%.15g", "0.0005", 0, DOUBLE_ARG, 0, 0, 0.0005 },
270 { "%.15g", "5e-005", 0, DOUBLE_ARG, 0, 0, 0.00005 },
271 { "%.15g", "5e-006", 0, DOUBLE_ARG, 0, 0, 0.000005 },
272 { "%.15g", "999999999999999", 0, DOUBLE_ARG, 0, 0, 999999999999999.0 },
273 { "%.15g", "1e+015", 0, DOUBLE_ARG, 0, 0, 1000000000000000.0 },
274 };
275
278
282 case NO_ARG:
284 break;
285 case INT_ARG:
287 break;
288 case ULONGLONG_ARG:
290 break;
291 case DOUBLE_ARG:
293 break;
294 case PTR_ARG:
296 break;
297 default:
299 continue;
300 }
301
304 {
307 "%d) buffer = \"%s\"\n",
i,
buffer);
308 }
309 }
310
311 if (sizeof(void *) == 8)
312 {
313 r = p_sprintf(
buffer,
"%p", (
void *)57);
315 ok(
r==16,
"return count wrong\n");
316
317 r = p_sprintf(
buffer,
"%#020p", (
void *)57);
318 ok(!
strcmp(
buffer,
" 0X0000000000000039"),
"Pointer formatted incorrectly\n");
319 ok(
r==20,
"return count wrong\n");
320
321 r = p_sprintf(
buffer,
"%Fp", (
void *)57);
323 ok(
r==16,
"return count wrong\n");
324
325 r = p_sprintf(
buffer,
"%Np", (
void *)57);
327 ok(
r==16,
"return count wrong\n");
328
329 r = p_sprintf(
buffer,
"%#-020p", (
void *)57);
330 ok(!
strcmp(
buffer,
"0X0000000000000039 "),
"Pointer formatted incorrectly\n");
331 ok(
r==20,
"return count wrong\n");
332
333 r = p_sprintf(
buffer,
"%Ix %d", (
size_t)0x12345678123456,1);
335 ok(
r==16,
"return count wrong\n");
336
337 r = p_sprintf(
buffer,
"%p", 0);
339 ok(
r==16,
"return count wrong\n");
340 }
341 else
342 {
343 r = p_sprintf(
buffer,
"%p", (
void *)57);
345 ok(
r==8,
"return count wrong\n");
346
347 r = p_sprintf(
buffer,
"%#012p", (
void *)57);
348 ok(!
strcmp(
buffer,
" 0X00000039"),
"Pointer formatted incorrectly\n");
349 ok(
r==12,
"return count wrong\n");
350
351 r = p_sprintf(
buffer,
"%Fp", (
void *)57);
353 ok(
r==8,
"return count wrong\n");
354
355 r = p_sprintf(
buffer,
"%Np",(
void *)57);
357 ok(
r==8,
"return count wrong\n");
358
359 r = p_sprintf(
buffer,
"%#-012p", (
void *)57);
360 ok(!
strcmp(
buffer,
"0X00000039 "),
"Pointer formatted incorrectly\n");
361 ok(
r==12,
"return count wrong\n");
362
363 r = p_sprintf(
buffer,
"%Ix %d", 0x123456, 1);
365 ok(
r==8,
"return count wrong\n");
366
367 r = p_sprintf(
buffer,
"%p", 0);
369 ok(
r==8,
"return count wrong\n");
370 }
371
372 r = p_sprintf(
buffer,
"%.*s", 1,
"foo");
374 ok(
r==1,
"return count wrong\n");
375
376 r = p_sprintf(
buffer,
"%*s", -5,
"foo");
378 ok(
r==5,
"return count wrong\n");
379
381 r = p_sprintf(
buffer,
"asdf%n", &
x );
383 {
384
385
386 ok(
x == 0,
"should not write to x: %d\n",
x);
387 }
388 else
389 {
390 ok(
x == 4,
"should write to x: %d\n",
x);
392 ok(
r==4,
"return count wrong: %d\n",
r);
393 }
394
395 r = p_sprintf(
buffer,
"%S",
L"\x3042");
397
399 win_skip(
"Japanese_Japan.932 locale not available\n");
400 return;
401 }
402
403 r = p_sprintf(
buffer,
"%c", 0xa082);
404 ok(
r==1,
"r = %d\n",
r);
406
407 r = p_sprintf(
buffer,
"%C", 0x3042);
408 ok(
r==2,
"r = %d\n",
r);
410
413 ok(
r==14,
"r = %d\n",
r);
415
417
418 r = p_sprintf(
buffer,
"%*1d", 1, 3);
419 ok(
r==11,
"r = %d\n",
r);
421
422 r = p_sprintf(
buffer,
"%0*0d", 1, 2);
423 ok(
r==10,
"r = %d\n",
r);
425
426 r = p_sprintf(
buffer,
"% *2d", 0, 7);
427 ok(
r==2,
"r = %d\n",
r);
429}
_STLP_DECLSPEC complex< float > _STLP_CALL sqrt(const complex< float > &)
ACPI_SIZE strlen(const char *String)
GLint GLint GLint GLint GLint x
GLuint GLuint GLsizei GLenum type
GLdouble GLdouble GLdouble r
#define todo_wine_if(is_todo)
static size_t size_t const wchar_t * format
wchar_t tm const _CrtWcstime_Writes_and_advances_ptr_ count wchar_t ** out