#include <stdio.h>
#include <errno.h>
-#include <math.h>
#include "windef.h"
#include "winbase.h"
#include "wine/test.h"
+static inline float __port_infinity(void)
+{
+ static const unsigned __inf_bytes = 0x7f800000;
+ return *(const float *)&__inf_bytes;
+}
+#define INFINITY __port_infinity()
+
+static inline float __port_nan(void)
+{
+ static const unsigned __nan_bytes = 0x7fc00000;
+ return *(const float *)&__nan_bytes;
+}
+#define NAN __port_nan()
+
+static inline float __port_ind(void)
+{
+ static const unsigned __ind_bytes = 0xffc00000;
+ return *(const float *)&__ind_bytes;
+}
+#define IND __port_ind()
+
static int (__cdecl *p__vscprintf)(const char *format, __ms_va_list valist);
static int (__cdecl *p__vscwprintf)(const wchar_t *format, __ms_va_list valist);
static int (__cdecl *p__vsnwprintf_s)(wchar_t *str, size_t sizeOfBuffer,
{
char buffer[100];
const char *format;
- double pnumber=789456123, inf, nan;
+ double pnumber=789456123;
int x, r;
WCHAR wide[] = { 'w','i','d','e',0};
ok(!strcmp(buffer,"D"),"I64D failed: %s\n",buffer);
ok( r==1, "return count wrong\n");
+ format = "%zx";
+ r = sprintf(buffer,format,1);
+ ok(!strcmp(buffer, "zx"), "Problem with \"z\" interpretation\n");
+ ok( r==2, "return count wrong\n");
+
format = "% d";
r = sprintf(buffer,format,1);
ok(!strcmp(buffer, " 1"),"Problem with sign place-holder: '%s'\n",buffer);
ok(!strcmp(buffer,"0000000000000039"),"Pointer formatted incorrectly \"%s\"\n",buffer);
ok( r==16, "return count wrong\n");
+ format = "%Np";
+ r = sprintf(buffer,format,(void *)57);
+ ok(!strcmp(buffer,"0000000000000039"),"Pointer formatted incorrectly \"%s\"\n",buffer);
+ ok( r==16, "return count wrong\n");
+
format = "%#-020p";
r = sprintf(buffer,format,(void *)57);
ok(!strcmp(buffer,"0X0000000000000039 "),"Pointer formatted incorrectly\n");
ok( r==20, "return count wrong\n");
+
+ format = "%Ix %d";
+ r = sprintf(buffer,format,(size_t)0x12345678123456,1);
+ ok(!strcmp(buffer,"12345678123456 1"),"buffer = %s\n",buffer);
+ ok( r==16, "return count wrong\n");
}
else
{
ok(!strcmp(buffer,"00000039"),"Pointer formatted incorrectly \"%s\"\n",buffer);
ok( r==8, "return count wrong\n");
+ format = "%Np";
+ r = sprintf(buffer,format,(void *)57);
+ ok(!strcmp(buffer,"00000039"),"Pointer formatted incorrectly \"%s\"\n",buffer);
+ ok( r==8, "return count wrong\n");
+
format = "%#-012p";
r = sprintf(buffer,format,(void *)57);
ok(!strcmp(buffer,"0X00000039 "),"Pointer formatted incorrectly\n");
ok( r==12, "return count wrong\n");
+
+ format = "%Ix %d";
+ r = sprintf(buffer,format,0x123456,1);
+ ok(!strcmp(buffer,"123456 1"),"buffer = %s\n",buffer);
+ ok( r==8, "return count wrong\n");
}
format = "%04s";
ok(!strcmp(buffer,""), "failed\n");
ok( r==0, "return count wrong\n");
+ format = "%N";
+ r = sprintf(buffer, format,-1);
+ ok(!strcmp(buffer,""), "failed\n");
+ ok( r==0, "return count wrong\n");
+
format = "%H";
r = sprintf(buffer, format,-1);
ok(!strcmp(buffer,"H"), "failed\n");
r = sprintf(buffer, format, 0x12345);
ok(!strcmp(buffer,"2345"), "failed \"%s\"\n", buffer);
- nan = 0.0;
- inf = 1.0/nan;
- nan = sqrt(-1);
format = "%lf";
- r = sprintf(buffer, format, nan);
+ r = sprintf(buffer, format, IND);
ok(r==9, "r = %d\n", r);
ok(!strcmp(buffer, "-1.#IND00"), "failed: \"%s\"\n", buffer);
- r = sprintf(buffer, format, inf);
+ r = sprintf(buffer, format, NAN);
+ ok(r==8, "r = %d\n", r);
+ ok(!strcmp(buffer, "1.#QNAN0"), "failed: \"%s\"\n", buffer);
+ r = sprintf(buffer, format, INFINITY);
ok(r==8, "r = %d\n", r);
ok(!strcmp(buffer, "1.#INF00"), "failed: \"%s\"\n", buffer);
format = "%le";
- r = sprintf(buffer, format, nan);
+ r = sprintf(buffer, format, IND);
ok(r==14, "r = %d\n", r);
ok(!strcmp(buffer, "-1.#IND00e+000"), "failed: \"%s\"\n", buffer);
- r = sprintf(buffer, format, inf);
+ r = sprintf(buffer, format, NAN);
+ ok(r==13, "r = %d\n", r);
+ ok(!strcmp(buffer, "1.#QNAN0e+000"), "failed: \"%s\"\n", buffer);
+ r = sprintf(buffer, format, INFINITY);
ok(r==13, "r = %d\n", r);
ok(!strcmp(buffer, "1.#INF00e+000"), "failed: \"%s\"\n", buffer);
format = "%lg";
- r = sprintf(buffer, format, nan);
+ r = sprintf(buffer, format, IND);
ok(r==7, "r = %d\n", r);
ok(!strcmp(buffer, "-1.#IND"), "failed: \"%s\"\n", buffer);
- r = sprintf(buffer, format, inf);
+ r = sprintf(buffer, format, NAN);
+ ok(r==7, "r = %d\n", r);
+ ok(!strcmp(buffer, "1.#QNAN"), "failed: \"%s\"\n", buffer);
+ r = sprintf(buffer, format, INFINITY);
ok(r==6, "r = %d\n", r);
ok(!strcmp(buffer, "1.#INF"), "failed: \"%s\"\n", buffer);
format = "%010.2lf";
- r = sprintf(buffer, format, nan);
+ r = sprintf(buffer, format, IND);
ok(r==10, "r = %d\n", r);
ok(!strcmp(buffer, "-000001.#J"), "failed: \"%s\"\n", buffer);
- r = sprintf(buffer, format, inf);
+ r = sprintf(buffer, format, NAN);
+ ok(r==10, "r = %d\n", r);
+ ok(!strcmp(buffer, "0000001.#R"), "failed: \"%s\"\n", buffer);
+ r = sprintf(buffer, format, INFINITY);
ok(r==10, "r = %d\n", r);
ok(!strcmp(buffer, "0000001.#J"), "failed: \"%s\"\n", buffer);
}
fmt, expect, n);
ok (!memcmp (fmt, buffer, valid),
"\"%s\": rendered \"%.*s\"\n", fmt, valid, buffer);
- };
+ }
}
static void test_fprintf(void)
ok( ret == 11, "got %d expected 11\n", ret );
WideCharToMultiByte( CP_ACP, 0, str, -1, buf, sizeof(buf), NULL, NULL );
ok( !strcmp(buf, "onetwothree"), "got %s expected 'onetwothree'\n", buf );
+
+ ret = _vsnwprintf_wrapper( str, 0, format, one, two, three );
+ ok( ret == -1, "got %d, expected -1\n", ret );
+
+ ret = _vsnwprintf_wrapper( NULL, 0, format, one, two, three );
+ ok( ret == 11 || broken(ret == -1 /* Win2k */), "got %d, expected 11\n", ret );
}
static int __cdecl vswprintf_wrapper(wchar_t *str, const wchar_t *format, ...)