summaryrefslogtreecommitdiffstatshomepage
path: root/unix
diff options
context:
space:
mode:
authorDamien George <damien.p.george@gmail.com>2015-05-08 00:19:56 +0100
committerDamien George <damien.p.george@gmail.com>2015-05-08 00:19:56 +0100
commitd3b32caea410897d8bac849489b4558505869dfe (patch)
treedd914fed2f39943b8d05f377cd6ff70a160e3518 /unix
parent0589c19d5239bb4456f06049925d71851e896d1e (diff)
downloadmicropython-d3b32caea410897d8bac849489b4558505869dfe.tar.gz
micropython-d3b32caea410897d8bac849489b4558505869dfe.zip
unix: Add special function to improve coverage.
The function and corresponding command-line option are only enabled for the coverage build. They are used to exercise uPy features that can't be properly tested by Python scripts.
Diffstat (limited to 'unix')
-rw-r--r--unix/Makefile5
-rw-r--r--unix/coverage.c26
-rw-r--r--unix/main.c6
3 files changed, 36 insertions, 1 deletions
diff --git a/unix/Makefile b/unix/Makefile
index 403f9295fe..78572dbbae 100644
--- a/unix/Makefile
+++ b/unix/Makefile
@@ -94,6 +94,7 @@ SRC_C = \
file.c \
modos.c \
alloc.c \
+ coverage.c \
$(SRC_MOD)
@@ -133,9 +134,11 @@ minimal:
# build an interpreter for coverage testing and do the testing
coverage:
- $(MAKE) COPT="-O0" CFLAGS_EXTRA='-fprofile-arcs -ftest-coverage -Wdouble-promotion -Wformat -Wmissing-declarations -Wmissing-prototypes -Wold-style-definition -Wpointer-arith -Wshadow -Wsign-compare -Wuninitialized -Wunused-parameter' LDFLAGS_EXTRA='-fprofile-arcs -ftest-coverage' BUILD=build-coverage PROG=micropython_coverage
+ $(MAKE) COPT="-O0" CFLAGS_EXTRA='-fprofile-arcs -ftest-coverage -Wdouble-promotion -Wformat -Wmissing-declarations -Wmissing-prototypes -Wold-style-definition -Wpointer-arith -Wshadow -Wsign-compare -Wuninitialized -Wunused-parameter -DMICROPY_UNIX_COVERAGE' LDFLAGS_EXTRA='-fprofile-arcs -ftest-coverage' BUILD=build-coverage PROG=micropython_coverage
coverage_test: coverage
$(eval DIRNAME=$(notdir $(CURDIR)))
cd ../tests && MICROPY_MICROPYTHON=../$(DIRNAME)/micropython_coverage ./run-tests
+ cd ../tests && MICROPY_MICROPYTHON=../$(DIRNAME)/micropython_coverage ./run-tests --emit native
gcov -o build-coverage/py ../py/*.c
+ gcov -o build-coverage/extmod ../extmod/*.c
diff --git a/unix/coverage.c b/unix/coverage.c
new file mode 100644
index 0000000000..48dbfd5c7c
--- /dev/null
+++ b/unix/coverage.c
@@ -0,0 +1,26 @@
+#include <stdio.h>
+
+#include "py/obj.h"
+#include "py/runtime.h"
+#include "py/repl.h"
+
+#if defined(MICROPY_UNIX_COVERAGE)
+
+// function to run extra tests for things that can't be checked by scripts
+void run_extra_coverage_tests(void);
+
+void run_extra_coverage_tests(void) {
+ // repl autocomplete
+ {
+ const char *str;
+ mp_uint_t len = mp_repl_autocomplete("__", 2, &mp_plat_print, &str);
+ printf("%.*s\n", (int)len, str);
+
+ mp_store_global(MP_QSTR_sys, mp_import_name(MP_QSTR_sys, mp_const_none, MP_OBJ_NEW_SMALL_INT(0)));
+ mp_repl_autocomplete("sys.", 4, &mp_plat_print, &str);
+ len = mp_repl_autocomplete("sys.impl", 8, &mp_plat_print, &str);
+ printf("%.*s\n", (int)len, str);
+ }
+}
+
+#endif
diff --git a/unix/main.c b/unix/main.c
index 4a71bfac6f..abea157286 100644
--- a/unix/main.c
+++ b/unix/main.c
@@ -434,6 +434,12 @@ int main(int argc, char **argv) {
MP_STATE_VM(mp_optimise_value) = 0;
for (char *p = argv[a] + 1; *p && *p == 'O'; p++, MP_STATE_VM(mp_optimise_value)++);
}
+ #if defined(MICROPY_UNIX_COVERAGE)
+ } else if (strcmp(argv[a], "--coverage") == 0) {
+ void run_extra_coverage_tests(void);
+ run_extra_coverage_tests();
+ ret = 0;
+ #endif
} else {
return usage(argv);
}