136 lines
4.4 KiB
Bash
Executable File
136 lines
4.4 KiB
Bash
Executable File
#!/bin/bash
|
|
# This script gets the test coverage for mlpack_test.
|
|
test_case="ALL"
|
|
gcov_loc=""
|
|
token=""
|
|
clean=true
|
|
current_log_file=`date +'%Y.%h.%d:%H:%M:%S-coverage.log'`
|
|
current_coverage_file=`date +'%Y.%h.%d:%H:%M:%S-coverage.info'`
|
|
max_cov_count=50000
|
|
|
|
# default directories
|
|
root_dir="../"
|
|
|
|
# Extract arguments.
|
|
for i in "$@"
|
|
do
|
|
case $i in
|
|
-h|--help)
|
|
echo "Usage: mlpack_coverage --help|-h"
|
|
echo " mlpack_coverage [-r=test_suite] [-g=gcov_tool_location]"
|
|
echo " [--token=coveralls_token]"
|
|
echo "Optional parameters:"
|
|
echo " -n|--no_test Do not run test before coverage computation"
|
|
echo " -r|--run_test Run tests with specific test suite"
|
|
echo " --no_clean Do not remove existing gcda file"
|
|
echo " -g|--gcov_tool_location Gcov location if not default"
|
|
echo " -t|--token Upload to coveralls with given token"
|
|
echo " --max_cov_count Max line coverage count (default 50000)"
|
|
echo " --root_dir Set the root directory from which gcov will be called. (default ../)"
|
|
exit 0
|
|
shift
|
|
;;
|
|
-n|--no_test)
|
|
test_case=""
|
|
shift
|
|
;;
|
|
-r=*|--run_test=*)
|
|
test_case="${i#*=}"
|
|
shift # past argument=value
|
|
;;
|
|
--no_clean)
|
|
clean=false
|
|
shift
|
|
;;
|
|
-g=*|--gcov_tool_location=*)
|
|
gcov_loc="${i#*=}"
|
|
shift # past argument=value
|
|
;;
|
|
-t=*|--token=*)
|
|
token="${i#*=}"
|
|
shift # past argument=value
|
|
;;
|
|
--max_cov_count)
|
|
max_cov_count="${i#*=}"
|
|
shift
|
|
;;
|
|
--root_dir=*)
|
|
root_dir="${i#*=}"
|
|
shift
|
|
;;
|
|
*)
|
|
# unknown option
|
|
;;
|
|
esac
|
|
done
|
|
|
|
if [ "$clean" = true ]; then
|
|
echo "Deleting existing coverage data..."
|
|
find ./ -name "*.gcda" -type f -delete
|
|
fi
|
|
|
|
# Initial pass.
|
|
echo "Generating primary coverage report."
|
|
[[ -d ./coveragehistory/ ]] || mkdir coveragehistory
|
|
lcov -b . -c -i -d ./ -o .coverage.wtest.base > ./coveragehistory/$current_log_file
|
|
|
|
# Run the tests.
|
|
if [ "$test_case" = "ALL" ]; then
|
|
echo "Running all the tests..."
|
|
@CMAKE_BINARY_DIR@/bin/mlpack_test
|
|
elif ! [ "$test_case" = "" ]; then
|
|
echo "Running test suite: $test_case"
|
|
@CMAKE_BINARY_DIR@/bin/mlpack_test --run_test=$test_case
|
|
fi
|
|
|
|
# Generate coverage based on executed tests.
|
|
echo "Computing coverage..."
|
|
if [ "$gcov_loc" = "" ];
|
|
then lcov -b . -c -d ./ -o .coverage.wtest.run >> ./coveragehistory/$current_log_file
|
|
else
|
|
lcov -b . -c -d ./ -o .coverage.wtest.run --gcov-tool=$gcov_loc >> ./coveragehistory/$current_log_file
|
|
fi
|
|
|
|
echo "Filtering coverage files..."
|
|
# Clear negative entries in coverage file
|
|
sed -E 's/-([0-9]+)/$max_cov_count/g' -i .coverage.wtest.run
|
|
# Merge coverage tracefiles.
|
|
lcov -a .coverage.wtest.base -a .coverage.wtest.run -o .coverage.total >> ./coveragehistory/$current_log_file
|
|
|
|
# Filtering, extracting project files.
|
|
lcov -e .coverage.total "@CMAKE_CURRENT_SOURCE_DIR@/src/mlpack/*" -o .coverage.total.filtered >> ./coveragehistory/$current_log_file
|
|
|
|
# Filtering, removing test-files and main.cpp.
|
|
lcov -r .coverage.total.filtered "@CMAKE_CURRENT_SOURCE_DIR@/src/mlpack/*/*_main.cpp" -o .coverage.total.filtered >> ./coveragehistory/$current_log_file
|
|
lcov -r .coverage.total.filtered "@CMAKE_CURRENT_SOURCE_DIR@/src/mlpack/tests/*" -o .coverage.total.filtered >> ./coveragehistory/$current_log_file
|
|
|
|
# Remove untestable files.
|
|
lcov -r .coverage.total.filtered "@CMAKE_CURRENT_SOURCE_DIR@/src/mlpack/core/util/gitversion.hpp" -o .coverage.total.filtered >> ./coveragehistory/$current_log_file
|
|
lcov -r .coverage.total.filtered "@CMAKE_CURRENT_SOURCE_DIR@/src/mlpack/core/util/arma_config.hpp" -o .coverage.total.filtered >> ./coveragehistory/$current_log_file
|
|
|
|
# Extra: Replace /build/ with /src/ to unify directories.
|
|
cat .coverage.total.filtered > .coverage.total
|
|
|
|
# Extra: Clear up previous data, create html folder.
|
|
if [[ -d ./coverage/ ]] ; then
|
|
rm -rf ./coverage/*
|
|
else
|
|
mkdir coverage
|
|
fi
|
|
|
|
# Step 9: Generate webpage.
|
|
genhtml -o ./coverage/ .coverage.total
|
|
|
|
# Extra: Preserve coverage file in coveragehistory folder.
|
|
coverage_file=$current_coverage_file
|
|
cp .coverage.total ./coveragehistory/$current_coverage_file
|
|
|
|
# Clean temporary coverage files.
|
|
#rm .coverage.*
|
|
|
|
# Upload the result to coveralls if token is provided.
|
|
if ! [ "$token" = "" ]; then
|
|
cpp-coveralls -n -r $root_dir -b $root_dir -l ./coveragehistory/$current_coverage_file -t "$token" --max-cov-count $max_cov_count
|
|
fi
|
|
|