Have make cov
optionally include branch coverage statistics
Added an option to configure to allow for branch coverage statistics gathering. Disabled logprint macro when coverage testing is on so that unnecessary branches are not analyzed.
This commit is contained in:
parent
46311e792f
commit
c8914b9dbb
3 changed files with 40 additions and 16 deletions
32
Makefile.am
32
Makefile.am
|
@ -171,47 +171,47 @@ baseline.info:
|
||||||
$(LCOV) -c -i -d $(abs_builddir)/src -o $@
|
$(LCOV) -c -i -d $(abs_builddir)/src -o $@
|
||||||
|
|
||||||
baseline_filtered.info: baseline.info
|
baseline_filtered.info: baseline.info
|
||||||
$(LCOV) -r $< "/usr/include/*" -o $@
|
$(LCOV) -r $< "/usr/include/*" $(LCOV_OPTS) -o $@
|
||||||
|
|
||||||
leveldb_baseline.info: baseline_filtered.info
|
leveldb_baseline.info: baseline_filtered.info
|
||||||
$(LCOV) -c -i -d $(abs_builddir)/src/leveldb -b $(abs_builddir)/src/leveldb -o $@
|
$(LCOV) -c -i -d $(abs_builddir)/src/leveldb -b $(abs_builddir)/src/leveldb -o $@
|
||||||
|
|
||||||
leveldb_baseline_filtered.info: leveldb_baseline.info
|
leveldb_baseline_filtered.info: leveldb_baseline.info
|
||||||
$(LCOV) -r $< "/usr/include/*" -o $@
|
$(LCOV) -r $< "/usr/include/*" $(LCOV_OPTS) -o $@
|
||||||
|
|
||||||
baseline_filtered_combined.info: leveldb_baseline_filtered.info baseline_filtered.info
|
baseline_filtered_combined.info: leveldb_baseline_filtered.info baseline_filtered.info
|
||||||
$(LCOV) -a leveldb_baseline_filtered.info -a baseline_filtered.info -o $@
|
$(LCOV) -a $(LCOV_OPTS) leveldb_baseline_filtered.info -a baseline_filtered.info -o $@
|
||||||
|
|
||||||
test_bitcoin.info: baseline_filtered_combined.info
|
test_bitcoin.info: baseline_filtered_combined.info
|
||||||
$(MAKE) -C src/ check
|
$(MAKE) -C src/ check
|
||||||
$(LCOV) -c -d $(abs_builddir)/src -t test_bitcoin -o $@
|
$(LCOV) -c $(LCOV_OPTS) -d $(abs_builddir)/src -t test_bitcoin -o $@
|
||||||
$(LCOV) -z -d $(abs_builddir)/src
|
$(LCOV) -z $(LCOV_OPTS) -d $(abs_builddir)/src
|
||||||
$(LCOV) -z -d $(abs_builddir)/src/leveldb
|
$(LCOV) -z $(LCOV_OPTS) -d $(abs_builddir)/src/leveldb
|
||||||
|
|
||||||
test_bitcoin_filtered.info: test_bitcoin.info
|
test_bitcoin_filtered.info: test_bitcoin.info
|
||||||
$(LCOV) -r $< "/usr/include/*" -o $@
|
$(LCOV) -r $< "/usr/include/*" $(LCOV_OPTS) -o $@
|
||||||
|
|
||||||
functional_test.info: test_bitcoin_filtered.info
|
functional_test.info: test_bitcoin_filtered.info
|
||||||
-@TIMEOUT=15 python test/functional/test_runner.py $(EXTENDED_FUNCTIONAL_TESTS)
|
-@TIMEOUT=15 test/functional/test_runner.py $(EXTENDED_FUNCTIONAL_TESTS)
|
||||||
$(LCOV) -c -d $(abs_builddir)/src --t functional-tests -o $@
|
$(LCOV) -c $(LCOV_OPTS) -d $(abs_builddir)/src --t functional-tests -o $@
|
||||||
$(LCOV) -z -d $(abs_builddir)/src
|
$(LCOV) -z $(LCOV_OPTS) -d $(abs_builddir)/src
|
||||||
$(LCOV) -z -d $(abs_builddir)/src/leveldb
|
$(LCOV) -z $(LCOV_OPTS) -d $(abs_builddir)/src/leveldb
|
||||||
|
|
||||||
functional_test_filtered.info: functional_test.info
|
functional_test_filtered.info: functional_test.info
|
||||||
$(LCOV) -r $< "/usr/include/*" -o $@
|
$(LCOV) -r $< "/usr/include/*" $(LCOV_OPTS) -o $@
|
||||||
|
|
||||||
test_bitcoin_coverage.info: baseline_filtered_combined.info test_bitcoin_filtered.info
|
test_bitcoin_coverage.info: baseline_filtered_combined.info test_bitcoin_filtered.info
|
||||||
$(LCOV) -a baseline_filtered.info -a leveldb_baseline_filtered.info -a test_bitcoin_filtered.info -o $@
|
$(LCOV) -a $(LCOV_OPTS) baseline_filtered.info -a leveldb_baseline_filtered.info -a test_bitcoin_filtered.info -o $@
|
||||||
|
|
||||||
total_coverage.info: baseline_filtered_combined.info test_bitcoin_filtered.info functional_test_filtered.info
|
total_coverage.info: baseline_filtered_combined.info test_bitcoin_filtered.info functional_test_filtered.info
|
||||||
$(LCOV) -a baseline_filtered.info -a leveldb_baseline_filtered.info -a test_bitcoin_filtered.info -a functional_test_filtered.info -o $@ | $(GREP) "\%" | $(AWK) '{ print substr($$3,2,50) "/" $$5 }' > coverage_percent.txt
|
$(LCOV) -a $(LCOV_OPTS) baseline_filtered.info -a leveldb_baseline_filtered.info -a test_bitcoin_filtered.info -a functional_test_filtered.info -o $@ | $(GREP) "\%" | $(AWK) '{ print substr($$3,2,50) "/" $$5 }' > coverage_percent.txt
|
||||||
|
|
||||||
test_bitcoin.coverage/.dirstamp: test_bitcoin_coverage.info
|
test_bitcoin.coverage/.dirstamp: test_bitcoin_coverage.info
|
||||||
$(GENHTML) -s $< -o $(@D)
|
$(GENHTML) -s $(LCOV_OPTS) $< -o $(@D)
|
||||||
@touch $@
|
@touch $@
|
||||||
|
|
||||||
total.coverage/.dirstamp: total_coverage.info
|
total.coverage/.dirstamp: total_coverage.info
|
||||||
$(GENHTML) -s $< -o $(@D)
|
$(GENHTML) -s $(LCOV_OPTS) $< -o $(@D)
|
||||||
@touch $@
|
@touch $@
|
||||||
|
|
||||||
cov: test_bitcoin.coverage/.dirstamp total.coverage/.dirstamp
|
cov: test_bitcoin.coverage/.dirstamp total.coverage/.dirstamp
|
||||||
|
|
12
configure.ac
12
configure.ac
|
@ -158,6 +158,12 @@ AC_ARG_ENABLE([lcov],
|
||||||
[enable lcov testing (default is no)])],
|
[enable lcov testing (default is no)])],
|
||||||
[use_lcov=yes],
|
[use_lcov=yes],
|
||||||
[use_lcov=no])
|
[use_lcov=no])
|
||||||
|
|
||||||
|
AC_ARG_ENABLE([lcov-branch-coverage],
|
||||||
|
[AS_HELP_STRING([--enable-lcov-branch-coverage],
|
||||||
|
[enable lcov testing branch coverage (default is no)])],
|
||||||
|
[use_lcov_branch=yes],
|
||||||
|
[use_lcov_branch=no])
|
||||||
|
|
||||||
AC_ARG_ENABLE([glibc-back-compat],
|
AC_ARG_ENABLE([glibc-back-compat],
|
||||||
[AS_HELP_STRING([--enable-glibc-back-compat],
|
[AS_HELP_STRING([--enable-glibc-back-compat],
|
||||||
|
@ -436,6 +442,12 @@ if test x$use_lcov = xyes; then
|
||||||
[AC_MSG_ERROR("lcov testing requested but --coverage linker flag does not work")])
|
[AC_MSG_ERROR("lcov testing requested but --coverage linker flag does not work")])
|
||||||
AX_CHECK_COMPILE_FLAG([--coverage],[CXXFLAGS="$CXXFLAGS --coverage"],
|
AX_CHECK_COMPILE_FLAG([--coverage],[CXXFLAGS="$CXXFLAGS --coverage"],
|
||||||
[AC_MSG_ERROR("lcov testing requested but --coverage flag does not work")])
|
[AC_MSG_ERROR("lcov testing requested but --coverage flag does not work")])
|
||||||
|
AC_DEFINE(USE_COVERAGE, 1, [Define this symbol if coverage is enabled])
|
||||||
|
CXXFLAGS="$CXXFLAGS -Og"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if test x$use_lcov_branch != xno; then
|
||||||
|
AC_SUBST(LCOV_OPTS, "$LCOV_OPTS --rc lcov_branch_coverage=1")
|
||||||
fi
|
fi
|
||||||
|
|
||||||
dnl Check for endianness
|
dnl Check for endianness
|
||||||
|
|
12
src/util.h
12
src/util.h
|
@ -123,6 +123,17 @@ int LogPrintStr(const std::string &str);
|
||||||
/** Get format string from VA_ARGS for error reporting */
|
/** Get format string from VA_ARGS for error reporting */
|
||||||
template<typename... Args> std::string FormatStringFromLogArgs(const char *fmt, const Args&... args) { return fmt; }
|
template<typename... Args> std::string FormatStringFromLogArgs(const char *fmt, const Args&... args) { return fmt; }
|
||||||
|
|
||||||
|
static inline void MarkUsed() {}
|
||||||
|
template<typename T, typename... Args> static inline void MarkUsed(const T& t, const Args&... args)
|
||||||
|
{
|
||||||
|
(void)t;
|
||||||
|
MarkUsed(args...);
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef USE_COVERAGE
|
||||||
|
#define LogPrintf(...) do { MarkUsed(__VA_ARGS__); } while(0)
|
||||||
|
#define LogPrint(category, ...) do { MarkUsed(__VA_ARGS__); } while(0)
|
||||||
|
#else
|
||||||
#define LogPrintf(...) do { \
|
#define LogPrintf(...) do { \
|
||||||
std::string _log_msg_; /* Unlikely name to avoid shadowing variables */ \
|
std::string _log_msg_; /* Unlikely name to avoid shadowing variables */ \
|
||||||
try { \
|
try { \
|
||||||
|
@ -139,6 +150,7 @@ template<typename... Args> std::string FormatStringFromLogArgs(const char *fmt,
|
||||||
LogPrintf(__VA_ARGS__); \
|
LogPrintf(__VA_ARGS__); \
|
||||||
} \
|
} \
|
||||||
} while(0)
|
} while(0)
|
||||||
|
#endif
|
||||||
|
|
||||||
template<typename... Args>
|
template<typename... Args>
|
||||||
bool error(const char* fmt, const Args&... args)
|
bool error(const char* fmt, const Args&... args)
|
||||||
|
|
Loading…
Reference in a new issue