diff options
author | Tuowen Zhao <ztuowen@gmail.com> | 2023-01-25 10:10:44 -0800 |
---|---|---|
committer | Tuowen Zhao <ztuowen@gmail.com> | 2023-01-25 10:10:44 -0800 |
commit | 56a9680d122cbccac5a1a78a1f9ec41f341b92c2 (patch) | |
tree | 13a036d26da3ef1adbb6229cfeea18060db3a103 | |
download | coverage-56a9680d122cbccac5a1a78a1f9ec41f341b92c2.tar.gz coverage-56a9680d122cbccac5a1a78a1f9ec41f341b92c2.tar.bz2 coverage-56a9680d122cbccac5a1a78a1f9ec41f341b92c2.zip |
-rw-r--r-- | Makefile | 26 | ||||
-rw-r--r-- | main.cpp | 11 | ||||
-rw-r--r-- | main.py | 10 | ||||
-rw-r--r-- | readcov.py | 30 |
4 files changed, 77 insertions, 0 deletions
diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..5d843f5 --- /dev/null +++ b/Makefile @@ -0,0 +1,26 @@ +all:cov.json coverage.json + +cov.json:default.profraw + llvm-profdata merge default.profraw -sparse -o merged.profdata + llvm-cov export -instr-profile merged.profdata ./exec . --format=text -Xdemangler c++filt -Xdemangler -n > cov.json + +coverage.json:.coverage + coverage json + +.coverage:main.py + coverage run main.py + +default.profraw:exec + ./exec + +exec:main.cpp + clang++ -o exec main.cpp -O3 -fprofile-instr-generate -fcoverage-mapping + +clean: + -rm exec + -rm default.profraw + -rm coverage.json + -rm cov.json + -rm .coverage + +.phony:all clean diff --git a/main.cpp b/main.cpp new file mode 100644 index 0000000..aef800e --- /dev/null +++ b/main.cpp @@ -0,0 +1,11 @@ +#include <iostream> + +int f(int i) { + if (i <= 1) return 1; + return f(i - 1) + f(i - 2); +} + +int main() { + std::cout << "hello world!" << std::endl; + return 0; +} @@ -0,0 +1,10 @@ +def f(i: int) -> int: + if i < 2: + return 1 + return f(i - 1) + f(i - 2) + +def main(): + print("hello world!") + +if __name__ == '__main__': + main()
\ No newline at end of file diff --git a/readcov.py b/readcov.py new file mode 100644 index 0000000..de490dc --- /dev/null +++ b/readcov.py @@ -0,0 +1,30 @@ +import json + +def process_cpp_coverage(parsed: dict): + for data in cov["data"]: + for file in data["files"]: + print(file["filename"]) + for seg in file["segments"]: + # https://github.com/llvm/llvm-project/blob/main/llvm/tools/llvm-cov/CoverageExporterJson.cpp + print("row, col, cnt, has_cnt, is_reg_entry, is_gap", seg) + return + +def process_py_coverage(parsed: dict): + for filename, vals in parsed["files"].items(): + print(filename) + print(vals["missing_lines"]) + return + +def json_dispatch(parsed: dict): + if "type" in parsed and parsed["type"] == "llvm.coverage.json.export": + process_cpp_coverage(parsed) + elif "meta" in parsed: + process_py_coverage(parsed) + return + +if __name__ == "__main__": + flist = ["cov.json", "coverage.json"] + for file in flist: + with open(file, "rt") as cov_json: + cov = json.load(cov_json) + json_dispatch(cov) |