+ int rc;
+ puts( "- Signed min / max -\n" );
+ test( SIZE_MAX, "%hhd", CHAR_MIN );
+ test( SIZE_MAX, "%hhd", CHAR_MAX );
+ test( SIZE_MAX, "%hhd", 0 );
+ test( SIZE_MAX, "%hd", SHRT_MIN );
+ test( SIZE_MAX, "%hd", SHRT_MAX );
+ test( SIZE_MAX, "%hd", 0 );
+ test( SIZE_MAX, "%d", INT_MIN );
+ test( SIZE_MAX, "%d", INT_MAX );
+ test( SIZE_MAX, "%d", 0 );
+ test( SIZE_MAX, "%ld", LONG_MIN );
+ test( SIZE_MAX, "%ld", LONG_MAX );
+ test( SIZE_MAX, "%ld", 0l );
+ test( SIZE_MAX, "%lld", LLONG_MIN );
+ test( SIZE_MAX, "%lld", LLONG_MAX );
+ test( SIZE_MAX, "%lld", 0ll );
+ puts( "- Unsigned min / max -\n" );
+ test( SIZE_MAX, "%hhu", UCHAR_MAX );
+ test( SIZE_MAX, "%hhu", (unsigned char)-1 );
+ test( SIZE_MAX, "%hu", USHRT_MAX );
+ test( SIZE_MAX, "%hu", (unsigned short)-1 );
+ test( SIZE_MAX, "%u", UINT_MAX );
+ test( SIZE_MAX, "%u", -1u );
+ test( SIZE_MAX, "%lu", ULONG_MAX );
+ test( SIZE_MAX, "%lu", -1ul );
+ test( SIZE_MAX, "%llu", ULLONG_MAX );
+ test( SIZE_MAX, "%llu", -1ull );
+ puts( "- Hex and Octal, normal and alternative, upper and lowercase -\n" );
+ test( SIZE_MAX, "%X", UINT_MAX );
+ test( SIZE_MAX, "%#X", -1u );
+ test( SIZE_MAX, "%x", UINT_MAX );
+ test( SIZE_MAX, "%#x", -1u );
+ test( SIZE_MAX, "%o", UINT_MAX );
+ test( SIZE_MAX, "%#o", -1u );
+ puts( "- Plus flag -\n" );
+ test( SIZE_MAX, "%+d", INT_MIN );
+ test( SIZE_MAX, "%+d", INT_MAX );
+ test( SIZE_MAX, "%+d", 0 );
+ test( SIZE_MAX, "%+u", UINT_MAX );
+ test( SIZE_MAX, "%+u", -1u );
+ puts( "- Space flag -\n" );
+ test( SIZE_MAX, "% d", INT_MIN );
+ test( SIZE_MAX, "% d", INT_MAX );
+ test( SIZE_MAX, "% d", 0 );
+ test( SIZE_MAX, "% u", UINT_MAX );
+ test( SIZE_MAX, "% u", -1u );
+ puts( "- Field width -\n" );
+ test( SIZE_MAX, "%9d", INT_MIN );
+ test( SIZE_MAX, "%9d", INT_MAX );
+ test( SIZE_MAX, "%10d", INT_MIN );
+ test( SIZE_MAX, "%10d", INT_MAX );
+ test( SIZE_MAX, "%11d", INT_MIN );
+ test( SIZE_MAX, "%11d", INT_MAX );
+ test( SIZE_MAX, "%12d", INT_MIN );
+ test( SIZE_MAX, "%12d", INT_MAX );
+ puts( "- Field width (left bound) -\n" );
+ test( SIZE_MAX, "%-9d", INT_MIN );
+ test( SIZE_MAX, "%-9d", INT_MAX );
+ test( SIZE_MAX, "%-10d", INT_MIN );
+ test( SIZE_MAX, "%-10d", INT_MAX );
+ test( SIZE_MAX, "%-11d", INT_MIN );
+ test( SIZE_MAX, "%-11d", INT_MAX );
+ test( SIZE_MAX, "%-12d", INT_MIN );
+ test( SIZE_MAX, "%-12d", INT_MAX );
+ puts( "- Field width, zero padding -\n");
+ test( SIZE_MAX, "%09d", INT_MIN );
+ test( SIZE_MAX, "%09d", INT_MAX );
+ test( SIZE_MAX, "%010d", INT_MIN );
+ test( SIZE_MAX, "%010d", INT_MAX );
+ test( SIZE_MAX, "%011d", INT_MIN );
+ test( SIZE_MAX, "%011d", INT_MAX );
+ test( SIZE_MAX, "%012d", INT_MIN );
+ test( SIZE_MAX, "%012d", INT_MAX );
+ puts( "- Field width, zero padding (left bound) -\n" );
+ test( SIZE_MAX, "%-09d", INT_MIN );
+ test( SIZE_MAX, "%-09d", INT_MAX );
+ test( SIZE_MAX, "%-010d", INT_MIN );
+ test( SIZE_MAX, "%-010d", INT_MAX );
+ test( SIZE_MAX, "%-011d", INT_MIN );
+ test( SIZE_MAX, "%-011d", INT_MAX );
+ test( SIZE_MAX, "%-012d", INT_MIN );
+ test( SIZE_MAX, "%-012d", INT_MAX );
+ puts( "- Limited n -\n" );
+ test( 8, "%9d", INT_MAX );
+ test( 8, "%9d", INT_MIN );
+ test( 9, "%9d", INT_MAX );
+ test( 9, "%9d", INT_MIN );
+ test( 10, "%9d", INT_MAX );
+ test( 10, "%9d", INT_MIN );
+ test( 9, "%10d", INT_MAX );
+ test( 9, "%10d", INT_MIN );
+ test( 10, "%10d", INT_MAX );
+ test( 10, "%10d", INT_MIN );
+ test( 11, "%10d", INT_MAX );
+ test( 11, "%10d", INT_MIN );
+ test( 10, "%11d", INT_MAX );
+ test( 10, "%11d", INT_MIN );
+ test( 11, "%11d", INT_MAX );
+ test( 11, "%11d", INT_MIN );
+ test( 12, "%11d", INT_MAX );
+ test( 12, "%11d", INT_MIN );
+ test( 11, "%12d", INT_MAX );
+ test( 11, "%12d", INT_MIN );
+ test( 12, "%12d", INT_MAX );
+ test( 12, "%12d", INT_MIN );
+ test( 13, "%12d", INT_MAX );
+ test( 13, "%12d", INT_MIN );
+ puts( "- Precision (tbd) -\n" );
+ {
+ const char * format = "%030.20d";
+ printf( "glibc '" );
+ rc = printf( format, INT_MAX );
+ printf( "', RC %d\n", rc );
+ test( SIZE_MAX, format, INT_MAX );
+ }
+ puts( "- vanilla -" );
+ printf( "No width, no precision: %#x\n", 42 );
+ printf( "Width, no precision: %#6x\n", 42 );
+ printf( "No width, precision: %#.6x\n", 42 );
+ printf( "Big width, small precision: %#6.3x\n", 42 );
+ printf( "Small width, big precision: %#3.6x\n", 42 );
+ printf( "No width, no precision: %#d\n", 42 );
+ printf( "Width, no precision: %#6d\n", 42 );
+ printf( "No width, precision: %#.6d\n", 42 );
+ printf( "Big width, small precision: %#6.3d\n", 42 );
+ printf( "Small width, big precision: %#3.6d\n", 42 );
+ puts( "- zero flag -" );
+ printf( "No width, no precision: %#0x\n", 42 );
+ printf( "Width, no precision: %#06x\n", 42 );
+ printf( "No width, precision: %#0.6x\n", 42 );
+ printf( "Big width, small precision: %#06.3x\n", 42 );
+ printf( "Small width, big precision: %#03.6x\n", 42 );
+ printf( "No width, no precision: %#0d\n", 42 );
+ printf( "Width, no precision: %#06d\n", 42 );
+ printf( "No width, precision: %#0.6d\n", 42 );
+ printf( "Big width, small precision: %#06.3d\n", 42 );
+ printf( "Small width, big precision: %#03.6d\n", 42 );
+ puts( "- plus flag -" );
+ printf( "No width, no precision: %#+d\n", 42 );
+ printf( "Width, no precision: %#+6d\n", 42 );
+ printf( "No width, precision: %#+.6d\n", 42 );
+ printf( "Big width, small precision: %#+6.3d\n", 42 );
+ printf( "Small width, big precision: %#+3.6d\n", 42 );
+ puts( "- plus and zero flag -" );
+ printf( "No width, no precision: %#+0d\n", 42 );
+ printf( "Width, no precision: %#+06d\n", 42 );
+ printf( "No width, precision: %#+0.6d\n", 42 );
+ printf( "Big width, small precision: %#+06.3d\n", 42 );
+ printf( "Small width, big precision: %#+03.6d\n", 42 );
+ return 0;
+}