From d99e04db6a9a8d58dcfdd958d1a4f00c7d518c9d Mon Sep 17 00:00:00 2001 From: Yuchen Wu Date: Tue, 12 Nov 2013 04:52:53 +0000 Subject: Added basic unit test for llvm-cov. This test compares the output of llvm-cov against a coverage file generated by gcov. Since the source file must be in the current directory when reading GCNO files, the test will first cd into the Inputs directory. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@194451 91177308-0d34-0410-b5e6-96231b3b80d8 --- test/tools/llvm-cov/Inputs/README | 7 +++ test/tools/llvm-cov/Inputs/test.cpp | 77 +++++++++++++++++++++++++++++ test/tools/llvm-cov/Inputs/test.cpp.gcov | 82 +++++++++++++++++++++++++++++++ test/tools/llvm-cov/Inputs/test.gcda | Bin 0 -> 857 bytes test/tools/llvm-cov/Inputs/test.gcno | Bin 0 -> 3113 bytes test/tools/llvm-cov/lit.local.cfg | 1 + test/tools/llvm-cov/llvm-cov.test | 2 + 7 files changed, 169 insertions(+) create mode 100644 test/tools/llvm-cov/Inputs/README create mode 100644 test/tools/llvm-cov/Inputs/test.cpp create mode 100644 test/tools/llvm-cov/Inputs/test.cpp.gcov create mode 100644 test/tools/llvm-cov/Inputs/test.gcda create mode 100644 test/tools/llvm-cov/Inputs/test.gcno create mode 100644 test/tools/llvm-cov/lit.local.cfg create mode 100644 test/tools/llvm-cov/llvm-cov.test (limited to 'test/tools/llvm-cov') diff --git a/test/tools/llvm-cov/Inputs/README b/test/tools/llvm-cov/Inputs/README new file mode 100644 index 0000000000..35c489e08c --- /dev/null +++ b/test/tools/llvm-cov/Inputs/README @@ -0,0 +1,7 @@ +These inputs were pre-generated to allow for easier testing of llvm-cov. + +test.gcno and test.gcda were create by running the latest version of clang: + clang++ -g -ftest-coverage -fprofile-arcs test.cpp + +test.cpp.gcov was created by running gcov 4.2.1: + gcov test.cpp diff --git a/test/tools/llvm-cov/Inputs/test.cpp b/test/tools/llvm-cov/Inputs/test.cpp new file mode 100644 index 0000000000..07bc3f294c --- /dev/null +++ b/test/tools/llvm-cov/Inputs/test.cpp @@ -0,0 +1,77 @@ +#include + +bool on = false; +int len = 42; +double grid[10][10] = {0}; +const char * hello = "world"; +const char * world = "hello"; + +struct A { + virtual void B(); +}; + +void A::B() {} + +void useless() {} + +double more_useless() { + return 0; +} + +int foo() { + on = true; + return 3; +} + +int bar() { + len--; + return foo() + 45; +} + +void assign(int ii, int jj) { + grid[ii][jj] = (ii+1) * (jj+1); +} + +void initialize_grid() { + for (int ii = 0; ii < 2; ii++) + for (int jj = 0; jj < 2; jj++) + assign(ii, jj); +} + +int main() { + initialize_grid(); + + int a = 2; + on = rand() % 2; + if (on) { + foo(); + ++a; + } else { + bar(); + a += rand(); + } + + for (int ii = 0; ii < 10; ++ii) { + switch (rand() % 5) { + case 0: + a += rand(); + break; + case 1: + case 2: + a += rand() / rand(); + break; + case 3: + a -= rand(); + break; + default: + a = -1; + } + } + + A thing; + for (uint64_t ii = 0; ii < 4294967296; ++ii) + thing.B(); + + return a + 8 + grid[2][3] + len; + return more_useless(); +} diff --git a/test/tools/llvm-cov/Inputs/test.cpp.gcov b/test/tools/llvm-cov/Inputs/test.cpp.gcov new file mode 100644 index 0000000000..a3dacc269e --- /dev/null +++ b/test/tools/llvm-cov/Inputs/test.cpp.gcov @@ -0,0 +1,82 @@ + -: 0:Source:test.cpp + -: 0:Graph:test.gcno + -: 0:Data:test.gcda + -: 0:Runs:2 + -: 0:Programs:1 + -: 1:#include + -: 2: + -: 3:bool on = false; + -: 4:int len = 42; + -: 5:double grid[10][10] = {0}; + -: 6:const char * hello = "world"; + -: 7:const char * world = "hello"; + -: 8: + 4: 9:struct A { + -: 10: virtual void B(); + -: 11:}; + -: 12: +8589934592: 13:void A::B() {} + -: 14: + #####: 15:void useless() {} + -: 16: + -: 17:double more_useless() { + #####: 18: return 0; + -: 19:} + -: 20: + -: 21:int foo() { + 2: 22: on = true; + 2: 23: return 3; + -: 24:} + -: 25: + -: 26:int bar() { + #####: 27: len--; + #####: 28: return foo() + 45; + -: 29:} + -: 30: + 8: 31:void assign(int ii, int jj) { + 8: 32: grid[ii][jj] = (ii+1) * (jj+1); + 8: 33:} + -: 34: + -: 35:void initialize_grid() { + 12: 36: for (int ii = 0; ii < 2; ii++) + 24: 37: for (int jj = 0; jj < 2; jj++) + 12: 38: assign(ii, jj); + 2: 39:} + -: 40: + -: 41:int main() { + 2: 42: initialize_grid(); + -: 43: + 2: 44: int a = 2; + 2: 45: on = rand() % 2; + 2: 46: if (on) { + 2: 47: foo(); + 2: 48: ++a; + 2: 49: } else { + #####: 50: bar(); + #####: 51: a += rand(); + -: 52: } + -: 53: + 44: 54: for (int ii = 0; ii < 10; ++ii) { + 20: 55: switch (rand() % 5) { + -: 56: case 0: + 4: 57: a += rand(); + 4: 58: break; + -: 59: case 1: + -: 60: case 2: + 2: 61: a += rand() / rand(); + 2: 62: break; + -: 63: case 3: + 6: 64: a -= rand(); + 6: 65: break; + -: 66: default: + 8: 67: a = -1; + 8: 68: } + 20: 69: } + -: 70: + 2: 71: A thing; +17179869188: 72: for (uint64_t ii = 0; ii < 4294967296; ++ii) +8589934592: 73: thing.B(); + -: 74: + 2: 75: return a + 8 + grid[2][3] + len; + -: 76: return more_useless(); + -: 77:} diff --git a/test/tools/llvm-cov/Inputs/test.gcda b/test/tools/llvm-cov/Inputs/test.gcda new file mode 100644 index 0000000000..16fff43acc Binary files /dev/null and b/test/tools/llvm-cov/Inputs/test.gcda differ diff --git a/test/tools/llvm-cov/Inputs/test.gcno b/test/tools/llvm-cov/Inputs/test.gcno new file mode 100644 index 0000000000..9db4f59dc7 Binary files /dev/null and b/test/tools/llvm-cov/Inputs/test.gcno differ diff --git a/test/tools/llvm-cov/lit.local.cfg b/test/tools/llvm-cov/lit.local.cfg new file mode 100644 index 0000000000..df9b335dd1 --- /dev/null +++ b/test/tools/llvm-cov/lit.local.cfg @@ -0,0 +1 @@ +config.suffixes = ['.test'] diff --git a/test/tools/llvm-cov/llvm-cov.test b/test/tools/llvm-cov/llvm-cov.test new file mode 100644 index 0000000000..049c9b9fe6 --- /dev/null +++ b/test/tools/llvm-cov/llvm-cov.test @@ -0,0 +1,2 @@ +RUN: cd %p/Inputs && llvm-cov -gcno=test.gcno -gcda=test.gcda \ +RUN: | diff test.cpp.gcov - -- cgit v1.2.3