aboutsummaryrefslogtreecommitdiff
path: root/scripts/test_coverage.sh
blob: adca73015205a7e3337b1b554f1a9057c33bd9c0 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#!/bin/sh
#
# This file is mostly AI generated.
set -euo pipefail
set -x

# Absolute paths
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
ROOT_DIR="$SCRIPT_DIR/.."
COVERAGE_DIR="$ROOT_DIR/coverage"

# Clean and prepare coverage dir
rm -rf "$COVERAGE_DIR"
mkdir -p "$COVERAGE_DIR"

# Copy all relevant files to coverage directory
cp "$ROOT_DIR/ls_args.h" "$COVERAGE_DIR/"
mkdir -p "$COVERAGE_DIR/tests"
cp "$ROOT_DIR/tests/tests.c" "$COVERAGE_DIR/tests/"
cp "$ROOT_DIR/tests/ls_test.h" "$COVERAGE_DIR/tests/"
cp "$SCRIPT_DIR/Makefile-cov" "$COVERAGE_DIR/Makefile"

cd "$COVERAGE_DIR"

export CFLAGS="-fprofile-arcs -ftest-coverage -DNDEBUG"
# Build test binary with coverage instrumentation
# Also disable asserts because they do not count for us
make -B

# Run test binary (generates .gcda files here)
./tests_cov_tmp

# Generate coverage reports (all output local to coverage/)
gcovr --root . --object-directory . --exclude-directories tests --output coverage.txt
gcovr --root . --object-directory . --exclude-directories tests --html --html-details -o coverage.html

echo "Coverage summary: $COVERAGE_DIR/coverage.txt"
echo "HTML report: $COVERAGE_DIR/coverage.html"