Files
TheRock/compiler/amd-llvm/llvm/test/tools/llvm-cov/mcdc-general.test
T
derek.holloway 7502bf64a4
CodeQL / Analyze (actions) (push) Canceled after 0s
CodeQL / Analyze (python) (push) Canceled after 0s
pre-commit / pre-commit (push) Canceled after 0s
Multi-Arch CI / setup (push) Canceled after 0s
Publish build_manylinux_x86_64 images / publish_build_manylinux_x86_64 (push) Canceled after 0s
Setup (Multi-Arch) / setup (push) Canceled after 0s
Multi-Arch CI / Linux::${{ fromJSON(needs.setup.outputs.linux_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubi10 image / publish_no_rocm_image_ubi10 (push) Canceled after 0s
Multi-Arch CI / Windows::${{ fromJSON(needs.setup.outputs.windows_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Multi-Arch CI / Manifest Diff (push) Canceled after 0s
TheRock Manifest Diff Report / Generate Manifest Diff Report (push) Canceled after 0s
Multi-Arch CI / CI Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_ocl_rt images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_rocgdb images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Unit Tests / Unit Tests :: ubuntu-24.04 (push) Canceled after 0s
Unit Tests / Unit Tests :: windows-2022 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_media (push) Canceled after 0s
Unit Tests / Unit Tests Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_openmpi (push) Canceled after 0s
Flatten subprojects into a single base monorepo
2026-09-02 16:34:47 -07:00

287 lines
11 KiB
Plaintext

// Test visualization of general MC/DC constructs.
// RUN: llvm-profdata merge %S/Inputs/mcdc-general.proftext -o %t.profdata
// RUN: llvm-cov show --show-mcdc %S/Inputs/mcdc-general.o -instr-profile %t.profdata -path-equivalence=.,%S/Inputs | FileCheck %s
// RUN: llvm-cov show --show-mcdc --show-mcdc-non-executed-vectors %S/Inputs/mcdc-general.o -instr-profile %t.profdata -path-equivalence=.,%S/Inputs | FileCheck %s -check-prefix=ALL
// RUN: llvm-cov report --show-mcdc-summary %S/Inputs/mcdc-general.o -instr-profile %t.profdata -show-functions -path-equivalence=.,%S/Inputs %S/Inputs/mcdc-general.cpp | FileCheck %s -check-prefix=REPORT
// CHECK: test(bool
// CHECK: ------------------
// CHECK-NEXT: |---> MC/DC Decision Region (12:7) to (12:27)
// CHECK-NEXT: |
// CHECK-NEXT: | Number of Conditions: 4
// CHECK-NEXT: | Condition C1 --> (12:8)
// CHECK-NEXT: | Condition C2 --> (12:13)
// CHECK-NEXT: | Condition C3 --> (12:20)
// CHECK-NEXT: | Condition C4 --> (12:25)
// CHECK-NEXT: |
// CHECK-NEXT: | MC/DC Test Vectors:
// CHECK-NEXT: |
// CHECK-NEXT: | Executed:
// CHECK-NEXT: |
// CHECK-NEXT: | C1, C2, C3, C4 Result
// CHECK-NEXT: | 1 { F, -, F, - = F }
// CHECK-NEXT: | 2 { T, F, F, - = F }
// CHECK-NEXT: | 3 { F, -, T, F = F }
// CHECK-NEXT: | 4 { T, F, T, F = F }
// CHECK-NEXT: | 5 { T, F, T, T = T }
// CHECK-NEXT: | 6 { T, T, -, - = T }
// CHECK-NEXT: |
// CHECK-NEXT: | C1-Pair: covered: (1,6)
// CHECK-NEXT: | C2-Pair: covered: (2,6)
// CHECK-NEXT: | C3-Pair: covered: (2,5)
// CHECK-NEXT: | C4-Pair: covered: (4,5)
// CHECK-NEXT: | MC/DC Coverage for Decision: 100.00%
// CHECK-NEXT: |
// CHECK-NEXT: ------------------
// CHECK: ------------------
// CHECK-NEXT: |---> MC/DC Decision Region (15:7) to (15:13)
// CHECK-NEXT: |
// CHECK-NEXT: | Number of Conditions: 2
// CHECK-NEXT: | Condition C1 --> (15:7)
// CHECK-NEXT: | Condition C2 --> (15:12)
// CHECK-NEXT: |
// CHECK-NEXT: | MC/DC Test Vectors:
// CHECK-NEXT: |
// CHECK-NEXT: | Executed:
// CHECK-NEXT: |
// CHECK-NEXT: | C1, C2 Result
// CHECK-NEXT: | 1 { F, - = F }
// CHECK-NEXT: | 2 { T, F = F }
// CHECK-NEXT: | 3 { T, T = T }
// CHECK-NEXT: |
// CHECK-NEXT: | C1-Pair: covered: (1,3)
// CHECK-NEXT: | C2-Pair: covered: (2,3)
// CHECK-NEXT: | MC/DC Coverage for Decision: 100.00%
// CHECK-NEXT: |
// CHECK-NEXT: |---> MC/DC Decision Region (15:19) to (15:25)
// CHECK-NEXT: |
// CHECK-NEXT: | Number of Conditions: 2
// CHECK-NEXT: | Condition C1 --> (15:19)
// CHECK-NEXT: | Condition C2 --> (15:24)
// CHECK-NEXT: |
// CHECK-NEXT: | MC/DC Test Vectors:
// CHECK-NEXT: |
// CHECK-NEXT: | Executed:
// CHECK-NEXT: |
// CHECK-NEXT: | C1, C2 Result
// CHECK-NEXT: | 1 { F, - = F }
// CHECK-NEXT: | 2 { T, T = T }
// CHECK-NEXT: |
// CHECK-NEXT: | C1-Pair: covered: (1,2)
// CHECK-NEXT: | C2-Pair: not covered
// CHECK-NEXT: | MC/DC Coverage for Decision: 50.00%
// CHECK-NEXT: |
// CHECK-NEXT: ------------------
// CHECK: ------------------
// CHECK-NEXT: |---> MC/DC Decision Region (18:7) to (19:15)
// CHECK-NEXT: |
// CHECK-NEXT: | Number of Conditions: 4
// CHECK-NEXT: | Condition C1 --> (18:8)
// CHECK-NEXT: | Condition C2 --> (18:13)
// CHECK-NEXT: | Condition C3 --> (19:8)
// CHECK-NEXT: | Condition C4 --> (19:13)
// CHECK-NEXT: |
// CHECK-NEXT: | MC/DC Test Vectors:
// CHECK-NEXT: |
// CHECK-NEXT: | Executed:
// CHECK-NEXT: |
// CHECK-NEXT: | C1, C2, C3, C4 Result
// CHECK-NEXT: | 1 { F, -, -, - = F }
// CHECK-NEXT: | 2 { T, F, -, - = F }
// CHECK-NEXT: | 3 { T, T, T, F = F }
// CHECK-NEXT: | 4 { T, T, T, T = T }
// CHECK-NEXT: |
// CHECK-NEXT: | C1-Pair: covered: (1,4)
// CHECK-NEXT: | C2-Pair: covered: (2,4)
// CHECK-NEXT: | C3-Pair: not covered
// CHECK-NEXT: | C4-Pair: covered: (3,4)
// CHECK-NEXT: | MC/DC Coverage for Decision: 75.00%
// CHECK-NEXT: |
// CHECK-NEXT: ------------------
// Same as CHECK above, but with --show-mcdc-non-executed-vectors (Not executed section after each decision).
// ALL: test(bool
// ALL: ------------------
// ALL-NEXT: |---> MC/DC Decision Region (12:7) to (12:27)
// ALL-NEXT: |
// ALL-NEXT: | Number of Conditions: 4
// ALL-NEXT: | Condition C1 --> (12:8)
// ALL-NEXT: | Condition C2 --> (12:13)
// ALL-NEXT: | Condition C3 --> (12:20)
// ALL-NEXT: | Condition C4 --> (12:25)
// ALL-NEXT: |
// ALL-NEXT: | MC/DC Test Vectors:
// ALL-NEXT: |
// ALL-NEXT: | Executed:
// ALL-NEXT: |
// ALL-NEXT: | C1, C2, C3, C4 Result
// ALL-NEXT: | 1 { F, -, F, - = F }
// ALL-NEXT: | 2 { T, F, F, - = F }
// ALL-NEXT: | 3 { F, -, T, F = F }
// ALL-NEXT: | 4 { T, F, T, F = F }
// ALL-NEXT: | 5 { T, F, T, T = T }
// ALL-NEXT: | 6 { T, T, -, - = T }
// ALL-NEXT: |
// ALL-NEXT: | Not executed:
// ALL-NEXT: |
// ALL-NEXT: | C1, C2, C3, C4 Result
// ALL-NEXT: | 7 { F, -, T, T = T }
// ALL-NEXT: |
// ALL-NEXT: | C1-Pair: covered: (1,6)
// ALL-NEXT: | C2-Pair: covered: (2,6)
// ALL-NEXT: | C3-Pair: covered: (2,5)
// ALL-NEXT: | C4-Pair: covered: (4,5)
// ALL-NEXT: | MC/DC Coverage for Decision: 100.00%
// ALL-NEXT: |
// ALL-NEXT: ------------------
// ALL: ------------------
// ALL-NEXT: |---> MC/DC Decision Region (15:7) to (15:13)
// ALL-NEXT: |
// ALL-NEXT: | Number of Conditions: 2
// ALL-NEXT: | Condition C1 --> (15:7)
// ALL-NEXT: | Condition C2 --> (15:12)
// ALL-NEXT: |
// ALL-NEXT: | MC/DC Test Vectors:
// ALL-NEXT: |
// ALL-NEXT: | Executed:
// ALL-NEXT: |
// ALL-NEXT: | C1, C2 Result
// ALL-NEXT: | 1 { F, - = F }
// ALL-NEXT: | 2 { T, F = F }
// ALL-NEXT: | 3 { T, T = T }
// ALL-NEXT: |
// ALL-NEXT: | Not executed:
// ALL-NEXT: |
// ALL-NEXT: | None.
// ALL-NEXT: |
// ALL-NEXT: | C1-Pair: covered: (1,3)
// ALL-NEXT: | C2-Pair: covered: (2,3)
// ALL-NEXT: | MC/DC Coverage for Decision: 100.00%
// ALL-NEXT: |
// ALL-NEXT: |---> MC/DC Decision Region (15:19) to (15:25)
// ALL-NEXT: |
// ALL-NEXT: | Number of Conditions: 2
// ALL-NEXT: | Condition C1 --> (15:19)
// ALL-NEXT: | Condition C2 --> (15:24)
// ALL-NEXT: |
// ALL-NEXT: | MC/DC Test Vectors:
// ALL-NEXT: |
// ALL-NEXT: | Executed:
// ALL-NEXT: |
// ALL-NEXT: | C1, C2 Result
// ALL-NEXT: | 1 { F, - = F }
// ALL-NEXT: | 2 { T, T = T }
// ALL-NEXT: |
// ALL-NEXT: | Not executed:
// ALL-NEXT: |
// ALL-NEXT: | C1, C2 Result
// ALL-NEXT: | 3 { T, F = F }
// ALL-NEXT: |
// ALL-NEXT: | C1-Pair: covered: (1,2)
// ALL-NEXT: | C2-Pair: not covered
// ALL-NEXT: | MC/DC Coverage for Decision: 50.00%
// ALL-NEXT: |
// ALL-NEXT: ------------------
// ALL: ------------------
// ALL-NEXT: |---> MC/DC Decision Region (18:7) to (19:15)
// ALL-NEXT: |
// ALL-NEXT: | Number of Conditions: 4
// ALL-NEXT: | Condition C1 --> (18:8)
// ALL-NEXT: | Condition C2 --> (18:13)
// ALL-NEXT: | Condition C3 --> (19:8)
// ALL-NEXT: | Condition C4 --> (19:13)
// ALL-NEXT: |
// ALL-NEXT: | MC/DC Test Vectors:
// ALL-NEXT: |
// ALL-NEXT: | Executed:
// ALL-NEXT: |
// ALL-NEXT: | C1, C2, C3, C4 Result
// ALL-NEXT: | 1 { F, -, -, - = F }
// ALL-NEXT: | 2 { T, F, -, - = F }
// ALL-NEXT: | 3 { T, T, T, F = F }
// ALL-NEXT: | 4 { T, T, T, T = T }
// ALL-NEXT: |
// ALL-NEXT: | Not executed:
// ALL-NEXT: |
// ALL-NEXT: | C1, C2, C3, C4 Result
// ALL-NEXT: | 5 { T, T, F, - = F }
// ALL-NEXT: |
// ALL-NEXT: | C1-Pair: covered: (1,4)
// ALL-NEXT: | C2-Pair: covered: (2,4)
// ALL-NEXT: | C3-Pair: not covered
// ALL-NEXT: | C4-Pair: covered: (3,4)
// ALL-NEXT: | MC/DC Coverage for Decision: 75.00%
// ALL-NEXT: |
// ALL-NEXT: ------------------
// Turn off MC/DC visualization.
// RUN: llvm-cov show %S/Inputs/mcdc-general.o -instr-profile %t.profdata -path-equivalence=.,%S/Inputs | FileCheck %s -check-prefix=NOMCDC
// NOMCDC-NOT: MC/DC Decision Region
// REPORT: Name Regions Miss Cover Lines Miss Cover Branches Miss Cover MC/DC Conditions Miss Cover
// REPORT-NEXT: -------------------------------------------------------------------------------------------------------------------------------------------
// REPORT-NEXT: _Z4testbbbb 25 0 100.00% 9 0 100.00% 24 2 91.67% 12 2 83.33%
// REPORT-NEXT: main 1 0 100.00% 11 0 100.00% 0 0 0.00% 0 0 0.00%
// REPORT-NEXT: ---
// REPORT-NEXT: TOTAL 26 0 100.00% 20 0 100.00% 24 2 91.67% 12 2 83.33%
// Turn off MC/DC summary.
// RUN: llvm-cov report %S/Inputs/mcdc-general.o -instr-profile %t.profdata -show-functions -path-equivalence=.,%S/Inputs %S/Inputs/mcdc-general.cpp | FileCheck %s -check-prefix=REPORT_NOMCDC
// REPORT_NOMCDC-NOT: TOTAL{{.*}}12 2 83.33%
// Test file-level report.
// RUN: llvm-cov report --show-mcdc-summary %S/Inputs/mcdc-general.o -instr-profile %t.profdata -path-equivalence=.,%S/Inputs %S/Inputs/mcdc-general.cpp | FileCheck %s -check-prefix=FILEREPORT
// FILEREPORT: TOTAL{{.*}}12 2 83.33%
// Test html output.
// RUN: rm -rf %t.html.dir
// RUN: llvm-cov show --show-mcdc-summary --show-mcdc %S/Inputs/mcdc-general.o -instr-profile %t.profdata -path-equivalence=.,%S/Inputs -format html -o %t.html.dir
// RUN: FileCheck -check-prefix=HTML -input-file=%t.html.dir/coverage/mcdc-general.cpp.html %s
// HTML-COUNT-4: MC/DC Decision Region (<span class='line-number'><a href='#L{{[0-9]+}}'><span>
// RUN: FileCheck -check-prefix HTML-INDEX -input-file %t.html.dir/index.html %s
// HTML-INDEX-LABEL: <table>
// HTML-INDEX: <td class='column-entry-bold'>Filename</td>
// HTML-INDEX: <td class='column-entry-bold'>Function Coverage</td>
// HTML-INDEX: <td class='column-entry-bold'>Line Coverage</td>
// HTML-INDEX: <td class='column-entry-bold'>Region Coverage</td>
// HTML-INDEX: <td class='column-entry-bold'>Branch Coverage</td>
// HTML-INDEX: <td class='column-entry-bold'>MC/DC</td>
// HTML-INDEX: <a href='coverage{{.*}}mcdc-general.cpp.html'{{.*}}mcdc-general.cpp</a>
// HTML-INDEX: <td class='column-entry-green'>
// HTML-INDEX: 100.00% (2/2)
// HTML-INDEX: 100.00% (20/20)
// HTML-INDEX: 100.00% (26/26)
// HTML-INDEX: 91.67% (22/24)
// HTML-INDEX: 83.33% (10/12)
// HTML-INDEX: Totals
Instructions for regenerating the test:
cd %S/Inputs # Or copy mcdc-general.cpp into the working directory
clang++ -c -Os \
-fcoverage-compilation-dir=. -mllvm -enable-name-compression=false \
-fcoverage-mcdc -fprofile-instr-generate -fcoverage-mapping \
mcdc-general.cpp
# Instructions for regenerating profdata
for x in mcdc-general; do
clang++ -fprofile-instr-generate $x.o -o $x
find -name '*.profraw' | xargs rm -f
./$x
llvm-profdata merge --sparse -o $x.profdata $(find -name '*.profraw')
llvm-profdata merge --text -o $x.proftext $x.profdata
done