@@ -79,15 +79,6 @@ main(int argc, char **argv)
79
79
char buf [256 ];
80
80
int errors = 0 ;
81
81
82
- float v ;
83
- double dv ;
84
-
85
- #define STR "0x1.7a27cc3ed6cf7p+124"
86
- sscanf (STR , "%f" , & v );
87
- printf ("%s = %.17e %.17a\n" , STR , printf_float (v ), printf_float (v ));
88
- sscanf (STR , "%lf" , & dv );
89
- printf ("%s = %.17e %.17a\n" , STR , printf_float (dv ), printf_float (dv ));
90
-
91
82
#if 0
92
83
double a ;
93
84
@@ -153,32 +144,45 @@ main(int argc, char **argv)
153
144
}
154
145
}
155
146
}
156
- for (x = 0 ; x < 32 ; x ++ ) {
157
- unsigned int v = 0x12345678 >> x ;
158
- unsigned int r ;
159
147
160
- sprintf (buf , "%u" , v );
161
- sscanf (buf , "%u" , & r );
162
- if (v != r ) {
163
- printf ("\t%3d: wanted %u got %u\n" , x , v , r );
164
- errors ++ ;
165
- fflush (stdout );
166
- }
167
- sprintf (buf , "%x" , v );
168
- sscanf (buf , "%x" , & r );
169
- if (v != r ) {
170
- printf ("\t%3d: wanted %u got %u\n" , x , v , r );
171
- errors ++ ;
172
- fflush (stdout );
173
- }
174
- sprintf (buf , "%o" , v );
175
- sscanf (buf , "%o" , & r );
176
- if (v != r ) {
177
- printf ("\t%3d: wanted %u got %u\n" , x , v , r );
178
- errors ++ ;
179
- fflush (stdout );
180
- }
148
+ #define FMT (prefix ,conv ) "%" prefix conv
149
+
150
+ #define VERIFY (prefix , conv ) do { \
151
+ sprintf(buf, FMT(prefix, conv), v); \
152
+ sscanf(buf, FMT(prefix, conv), &r); \
153
+ if (v != r) { \
154
+ printf("\t%3d: " prefix " " conv " wanted " FMT(prefix, conv) " got " FMT(prefix, conv) "\n", x, v, r); \
155
+ errors++; \
156
+ fflush(stdout); \
157
+ } \
158
+ } while(0)
159
+
160
+ #define CHECK_RT (type , prefix ) do { \
161
+ for (x = 0; x < sizeof(type) * 8; x++) { \
162
+ type v = (type) (0x123456789abcdef0LL >> (64 - sizeof(type) * 8)) >> x; \
163
+ type r; \
164
+ VERIFY(prefix, "d"); \
165
+ VERIFY(prefix, "u"); \
166
+ VERIFY(prefix, "x"); \
167
+ VERIFY(prefix, "o"); \
168
+ } \
169
+ } while(0)
170
+
171
+ CHECK_RT (unsigned char , "hh" );
172
+ CHECK_RT (unsigned short, "h" );
173
+ CHECK_RT (unsigned int , "");
174
+ CHECK_RT (unsigned long , "l ");
175
+ #if defined(_WANT_IO_LONG_LONG ) || defined(TINY_STDIO )
176
+ CHECK_RT (unsigned long long, "ll" );
177
+ #endif
178
+ #if !defined(_WANT_IO_LONG_LONG ) && !defined(TINY_STDIO )
179
+ if (sizeof (intmax_t ) <= sizeof (long ))
180
+ #endif
181
+ {
182
+ CHECK_RT (intmax_t , "j" );
181
183
}
184
+ CHECK_RT (size_t , "z" );
185
+ CHECK_RT (ptrdiff_t , "t" );
182
186
183
187
#if defined(TINY_STDIO ) || !defined(NO_FLOATING_POINT )
184
188
#ifdef PICOLIBC_FLOAT_PRINTF_SCANF
0 commit comments