printf %g regression tests
authorSzabolcs Nagy <nsz@port70.net>
Mon, 7 Apr 2014 21:15:31 +0000 (23:15 +0200)
committerSzabolcs Nagy <nsz@port70.net>
Mon, 7 Apr 2014 21:15:31 +0000 (23:15 +0200)
src/regression/printf-1e9-oob.c
src/regression/printf-fmt-g-round.c [new file with mode: 0644]
src/regression/printf-fmt-g-zeros.c [new file with mode: 0644]

index 3d7dccf..d1d0b2e 100644 (file)
@@ -1,3 +1,5 @@
+// commit 109048e031f39fbb370211fde44ababf6c04c8fb 2014-04-07
+// float printf out-of-bounds access
 #include <stdio.h>
 #include <string.h>
 #include "test.h"
diff --git a/src/regression/printf-fmt-g-round.c b/src/regression/printf-fmt-g-round.c
new file mode 100644 (file)
index 0000000..c5f9a08
--- /dev/null
@@ -0,0 +1,21 @@
+// commit e94d0692864ecf9522fd6a97610a47a2f718d3de 2014-04-07
+// %g midpoint cases should be rounded to even
+#include <stdio.h>
+#include <string.h>
+#include "test.h"
+
+static void t(const char *fmt, double d, const char *want)
+{
+       char buf[256];
+       int n = strlen(want);
+       int r = snprintf(buf, sizeof buf, fmt, d);
+       if (r != n || memcmp(buf, want, n+1) != 0)
+               t_error("snprintf(\"%s\", %f) want %s got %s\n", fmt, d, want, buf);
+}
+
+int main()
+{
+       t("%.12g", 1000000000005.0, "1e+12");
+       t("%.12g", 100000000002500.0, "1.00000000002e+14");
+       return t_status;
+}
diff --git a/src/regression/printf-fmt-g-zeros.c b/src/regression/printf-fmt-g-zeros.c
new file mode 100644 (file)
index 0000000..2b08691
--- /dev/null
@@ -0,0 +1,21 @@
+// commit 89740868c9f1c84b8ee528468d12df1fa72cd392 2014-04-07
+// %g should not print trailing zeros
+#include <stdio.h>
+#include <string.h>
+#include "test.h"
+
+static void t(const char *fmt, double d, const char *want)
+{
+       char buf[256];
+       int n = strlen(want);
+       int r = snprintf(buf, sizeof buf, fmt, d);
+       if (r != n || memcmp(buf, want, n+1) != 0)
+               t_error("snprintf(\"%s\",%f) want %s got %s\n", fmt, d, want, buf);
+}
+
+int main()
+{
+       t("%.50g", 100000000000000.5, "100000000000000.5");
+       t("%.50g", 987654321098765.0, "987654321098765");
+       return t_status;
+}