add an sscanf regression test
[libc-test] / src / functional / snprintf.c
index 2c94d02..70c1118 100644 (file)
@@ -36,11 +36,11 @@ static const struct {
        { "%0-5d", 12, "12   " },
        { "%-05d", 12, "12   " },
 
-       /* ...explicit precision of 0 shall be no characters. */
+       /* ...explicit precision of 0 shall be no characters except for alt-octal. */
        { "%.0d", 0, "" },
        { "%.0o", 0, "" },
        { "%#.0d", 0, "" },
-       { "%#.0o", 0, "" },
+       { "%#.0o", 0, "0" },
        { "%#.0x", 0, "" },
 
        /* ...but it still has to honor width and flags. */
@@ -60,6 +60,20 @@ static const struct {
        { "%o", 15, "17" },
        { "%#o", 15, "017" },
 
+       /* octal: corner cases */
+       { "%#o", 0, "0" },
+       { "%#.0o", 0, "0" },
+       { "%#.1o", 0, "0" },
+       { "%#o", 1, "01" },
+       { "%#.0o", 1, "01" },
+       { "%#.1o", 1, "01" },
+       { "%#04o", 1, "0001" },
+       { "%#04.0o", 1, "  01" },
+       { "%#04.1o", 1, "  01" },
+       { "%04o", 1, "0001" },
+       { "%04.0o", 1, "   1" },
+       { "%04.1o", 1, "   1" },
+
        { NULL, 0.0, NULL }
 };
 
@@ -86,7 +100,8 @@ static const struct {
        { "%f", 1.3, "1.300000" },
        { "%f", 1.4, "1.400000" },
        { "%f", 1.5, "1.500000" },
-       { "%.4f", 1.06125, "1.0612" },
+       { "%.4f", 1.06125, "1.0613" }, /* input is not representible exactly as double */
+       { "%.4f", 1.03125, "1.0312" }, /* 0x1.08p0 */
        { "%.2f", 1.375, "1.38" },
        { "%.1f", 1.375, "1.4" },
        { "%.1lf", 1.375, "1.4" },