@@ -204,8 +204,20 @@ static mp_obj_t extra_coverage(void) {
204204 mp_printf (& mp_plat_print , "%d %+d % d\n" , -123 , 123 , 123 ); // sign
205205 mp_printf (& mp_plat_print , "%05d\n" , -123 ); // negative number with zero padding
206206 mp_printf (& mp_plat_print , "%ld\n" , 123 ); // long
207- mp_printf (& mp_plat_print , "%lx\n" , 0x123 ); // long hex
208- mp_printf (& mp_plat_print , "%X\n" , 0x1abcdef ); // capital hex
207+ mp_printf (& mp_plat_print , "%lx\n" , 0x123fl ); // long hex
208+ mp_printf (& mp_plat_print , "%lX\n" , 0x123fl ); // capital long hex
209+ if (sizeof (mp_int_t ) == 8 ) {
210+ mp_printf (& mp_plat_print , "%llx\n" , LLONG_MAX ); // long long hex
211+ mp_printf (& mp_plat_print , "%llX\n" , LLONG_MAX ); // capital long long hex
212+ mp_printf (& mp_plat_print , "%llu\n" , ULLONG_MAX ); // unsigned long long
213+ } else {
214+ // fake for platforms without narrower mp_int_t
215+ mp_printf (& mp_plat_print , "7fffffffffffffff\n" , LLONG_MAX );
216+ mp_printf (& mp_plat_print , "7FFFFFFFFFFFFFFF\n" , LLONG_MAX );
217+ mp_printf (& mp_plat_print , "18446744073709551615\n" , ULLONG_MAX );
218+ }
219+ mp_printf (& mp_plat_print , "%p\n" , (void * )0x789f ); // pointer
220+ mp_printf (& mp_plat_print , "%P\n" , (void * )0x789f ); // pointer uppercase
209221 mp_printf (& mp_plat_print , "%.2s %.3s '%4.4s' '%5.5q' '%.3q'\n" , "abc" , "abc" , "abc" , MP_QSTR_True , MP_QSTR_True ); // fixed string precision
210222 mp_printf (& mp_plat_print , "%.*s\n" , -1 , "abc" ); // negative string precision
211223 mp_printf (& mp_plat_print , "%b %b\n" , 0 , 1 ); // bools
@@ -216,11 +228,31 @@ static mp_obj_t extra_coverage(void) {
216228 #endif
217229 mp_printf (& mp_plat_print , "%d\n" , 0x80000000 ); // should print signed
218230 mp_printf (& mp_plat_print , "%u\n" , 0x80000000 ); // should print unsigned
219- mp_printf (& mp_plat_print , "%x\n" , 0x80000000 ); // should print unsigned
220- mp_printf (& mp_plat_print , "%X\n" , 0x80000000 ); // should print unsigned
231+ mp_printf (& mp_plat_print , "%x\n" , 0x8000000f ); // should print unsigned
232+ mp_printf (& mp_plat_print , "%X\n" , 0x8000000f ); // should print unsigned
221233 mp_printf (& mp_plat_print , "abc\n%" ); // string ends in middle of format specifier
222234 mp_printf (& mp_plat_print , "%%\n" ); // literal % character
223235 mp_printf (& mp_plat_print , ".%-3s.\n" , "a" ); // left adjust
236+
237+ // Check that all kinds of mp_printf arguments are parsed out
238+ // correctly, by having a char argument before and after each main type
239+ // of value that can be formatted.
240+ mp_printf (& mp_plat_print , "%c%%%c\n" , '<' , '>' );
241+ mp_printf (& mp_plat_print , "%c%p%c\n" , '<' , (void * )0xaaaa , '>' );
242+ mp_printf (& mp_plat_print , "%c%b%c\n" , '<' , true, '>' );
243+ mp_printf (& mp_plat_print , "%c%d%c\n" , '<' , 0xaaaa , '>' );
244+ mp_printf (& mp_plat_print , "%c%ld%c\n" , '<' , 0xaaaal , '>' );
245+ mp_printf (& mp_plat_print , "%c" INT_FMT "%c\n" , '<' , (mp_int_t )0xaaaa , '>' );
246+ mp_printf (& mp_plat_print , "%c%s%c\n" , '<' , "test" , '>' );
247+ mp_printf (& mp_plat_print , "%c%f%c\n" , '<' , MICROPY_FLOAT_CONST (1000. ), '>' );
248+ mp_printf (& mp_plat_print , "%c%q%c\n" , '<' , (qstr )MP_QSTR_True , '>' );
249+ if (sizeof (mp_int_t ) == 8 ) {
250+ mp_printf (& mp_plat_print , "%c%lld%c\n" , '<' , LLONG_MAX , '>' );
251+ } else {
252+ mp_printf (& mp_plat_print , "<9223372036854775807>\n" );
253+ }
254+
255+
224256 }
225257
226258 // GC
0 commit comments