#!/bin/bash # Generate HTML coverage report from gcov files set -e OUTPUT_DIR="coverage_report" mkdir -p "$OUTPUT_DIR" # Create main index.html cat > "$OUTPUT_DIR/index.html" <<'HTMLHEADER' Branch Coverage Report

🎯 Branch Coverage Report

Generated from random simulation coverage analysis

Overall Coverage Summary

HTMLHEADER # Calculate totals TOTAL_BRANCHES=0 TAKEN_BRANCHES=0 for gcov_file in *.c.gcov; do if [ -f "$gcov_file" ]; then branches=$(grep -c "^branch" "$gcov_file" 2>/dev/null || echo "0") if [ "$branches" -gt 0 ]; then taken=$(grep "^branch" "$gcov_file" 2>/dev/null | grep -c "taken [1-9]" 2>/dev/null || echo "0") taken=$(echo "$taken" | tr -d '[:space:]') if [ -z "$taken" ]; then taken=0; fi TOTAL_BRANCHES=$((TOTAL_BRANCHES + branches)) TAKEN_BRANCHES=$((TAKEN_BRANCHES + taken)) fi fi done if [ "$TOTAL_BRANCHES" -gt 0 ]; then COVERAGE_PERCENT=$((TAKEN_BRANCHES * 100 / TOTAL_BRANCHES)) # Determine coverage class if [ "$COVERAGE_PERCENT" -lt 30 ]; then COVERAGE_CLASS="coverage-low" elif [ "$COVERAGE_PERCENT" -lt 70 ]; then COVERAGE_CLASS="coverage-medium" else COVERAGE_CLASS="coverage-high" fi cat >> "$OUTPUT_DIR/index.html" < Total Branches: $TOTAL_BRANCHES
Branches Taken: $TAKEN_BRANCHES
Coverage: ${COVERAGE_PERCENT}%
${COVERAGE_PERCENT}%

Coverage by File

HTMLSUMMARY # Generate table rows for each file for gcov_file in *.c.gcov; do if [ -f "$gcov_file" ]; then filename=$(echo "$gcov_file" | sed 's/.gcov$//') branches=$(grep -c "^branch" "$gcov_file" 2>/dev/null || echo "0") if [ "$branches" -gt 0 ]; then taken=$(grep "^branch" "$gcov_file" 2>/dev/null | grep -c "taken [1-9]" 2>/dev/null || echo "0") taken=$(echo "$taken" | tr -d '[:space:]') if [ -z "$taken" ]; then taken=0; fi percentage=$((taken * 100 / branches)) if [ "$percentage" -lt 30 ]; then bar_class="coverage-low" elif [ "$percentage" -lt 70 ]; then bar_class="coverage-medium" else bar_class="coverage-high" fi # Generate individual file report file_html="${filename}.html" echo "Generating report for $filename..." cat > "$OUTPUT_DIR/$file_html" < Coverage: $filename
← Back to Summary

Coverage Report: $filename

Branches Taken: $taken / $branches ($percentage%)
FILEHEADER

                # Process the gcov file and add source code with branch info
                awk '
                    /^branch/ {
                        branch_info = branch_info " " $0
                        next
                    }
                    /^        / {
                        # Line with execution count
                        line_num = $2
                        gsub(/:/, "", line_num)
                        exec_count = $1
                        gsub(/^[ \t]+/, "", exec_count)

                        # Get the actual source line
                        line_content = substr($0, index($0, $3))

                        # Determine background color based on branch coverage
                        bg_class = ""
                        if (branch_info != "") {
                            if (branch_info ~ /taken 0/) {
                                bg_class = "branch-not-taken"
                            } else if (branch_info ~ /never executed/) {
                                bg_class = "branch-not-taken"
                            } else {
                                bg_class = "branch-taken"
                            }
                        }

                        # Format execution count
                        if (exec_count == "-") {
                            exec_str = "-"
                        } else if (exec_count == "#####") {
                            exec_str = "0"
                            if (bg_class == "") bg_class = "branch-not-taken"
                        } else {
                            exec_str = exec_count
                        }

                        printf "%s%s%s", bg_class, line_num, exec_str, line_content

                        if (branch_info != "") {
                            printf "%s", branch_info
                        }
                        printf "\n"

                        branch_info = ""
                    }
                ' "$gcov_file" >> "$OUTPUT_DIR/$file_html"

                cat >> "$OUTPUT_DIR/$file_html" <<'FILEFOOTER'
FILEFOOTER # Add row to main index cat >> "$OUTPUT_DIR/index.html" <
TABLEROW fi fi done # Close HTML cat >> "$OUTPUT_DIR/index.html" <<'HTMLFOOTER'
File Branches Taken Total Branches Coverage Visual
$filename $taken $branches ${percentage}%
${percentage}%
HTMLFOOTER else cat >> "$OUTPUT_DIR/index.html" <<'HTMLFOOTER'

No branch coverage data found.

HTMLFOOTER fi echo "HTML report generated in $OUTPUT_DIR/"