From d7e168428bc9fd7524dd83b973c283b3488bfd3b Mon Sep 17 00:00:00 2001
From: Rami Ali <flowergrass@users.noreply.github.com>
Date: Thu, 5 Jan 2017 11:12:05 +1100
Subject: [PATCH] tests/unix: Improve formatfloat.c test coverage using C.

---
 tests/unix/extra_coverage.py.exp |  4 ++++
 unix/coverage.c                  | 21 +++++++++++++++++++++
 2 files changed, 25 insertions(+)

diff --git a/tests/unix/extra_coverage.py.exp b/tests/unix/extra_coverage.py.exp
index 12d9e1cb6..0d7fc1180 100644
--- a/tests/unix/extra_coverage.py.exp
+++ b/tests/unix/extra_coverage.py.exp
@@ -39,6 +39,10 @@ ementation
 TypeError: can't convert str to int
 TypeError: unsupported types for : 'str', 'str'
 Warning: test
+# format float
+?
++1e+00
++1e+00
 ('0123456789', b'0123456789')
 7300
 7300
diff --git a/unix/coverage.c b/unix/coverage.c
index 033f09ed3..7140be41b 100644
--- a/unix/coverage.c
+++ b/unix/coverage.c
@@ -7,6 +7,7 @@
 #include "py/mpz.h"
 #include "py/builtin.h"
 #include "py/emit.h"
+#include "py/formatfloat.h"
 
 #if defined(MICROPY_UNIX_COVERAGE)
 
@@ -136,6 +137,26 @@ STATIC mp_obj_t extra_coverage(void) {
         mp_emitter_warning(MP_PASS_CODE_SIZE, "test");
     }
 
+    // format float
+    {
+        mp_printf(&mp_plat_print, "# format float\n");
+
+        // format with inadequate buffer size
+        char buf[5];
+        mp_format_float(1, buf, sizeof(buf), 'g', 0, '+');
+        mp_printf(&mp_plat_print, "%s\n", buf);
+
+        // format with just enough buffer so that precision must be
+        // set from 0 to 1 twice
+        char buf2[8];
+        mp_format_float(1, buf2, sizeof(buf2), 'g', 0, '+');
+        mp_printf(&mp_plat_print, "%s\n", buf2);
+
+        // format where precision is trimmed to avoid buffer overflow
+        mp_format_float(1, buf2, sizeof(buf2), 'e', 0, '+');
+        mp_printf(&mp_plat_print, "%s\n", buf2);
+    }
+
     // return a tuple of data for testing on the Python side
     mp_obj_t items[] = {(mp_obj_t)&str_no_hash_obj, (mp_obj_t)&bytes_no_hash_obj};
     return mp_obj_new_tuple(MP_ARRAY_SIZE(items), items);
-- 
GitLab