aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorYuchen Wu <yuchenericwu@hotmail.com>2013-11-05 01:56:23 +0000
committerYuchen Wu <yuchenericwu@hotmail.com>2013-11-05 01:56:23 +0000
commit07a59fbd3baed0b729f1437a6635ee1d8d463929 (patch)
tree4d5d36a1769ec54756ef26f55ef8997f5b40a89b
parentd8acf0078cf363252727acff00f85ae8074f95b3 (diff)
downloadexternal_llvm-07a59fbd3baed0b729f1437a6635ee1d8d463929.zip
external_llvm-07a59fbd3baed0b729f1437a6635ee1d8d463929.tar.gz
external_llvm-07a59fbd3baed0b729f1437a6635ee1d8d463929.tar.bz2
Added basic unit test for llvm-cov.
This test compares the output of llvm-cov against a coverage file generated by gcov. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@194038 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--test/tools/llvm-cov/Inputs/README7
-rw-r--r--test/tools/llvm-cov/Inputs/test.cpp77
-rw-r--r--test/tools/llvm-cov/Inputs/test.cpp.gcov82
-rw-r--r--test/tools/llvm-cov/Inputs/test.gcdabin0 -> 857 bytes
-rw-r--r--test/tools/llvm-cov/Inputs/test.gcnobin0 -> 3113 bytes
-rw-r--r--test/tools/llvm-cov/lit.local.cfg1
-rw-r--r--test/tools/llvm-cov/llvm-cov.test2
7 files changed, 169 insertions, 0 deletions
diff --git a/test/tools/llvm-cov/Inputs/README b/test/tools/llvm-cov/Inputs/README
new file mode 100644
index 0000000..35c489e
--- /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 0000000..07bc3f2
--- /dev/null
+++ b/test/tools/llvm-cov/Inputs/test.cpp
@@ -0,0 +1,77 @@
+#include <cstdlib>
+
+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 0000000..a3dacc2
--- /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 <cstdlib>
+ -: 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 0000000..16fff43
--- /dev/null
+++ b/test/tools/llvm-cov/Inputs/test.gcda
Binary files differ
diff --git a/test/tools/llvm-cov/Inputs/test.gcno b/test/tools/llvm-cov/Inputs/test.gcno
new file mode 100644
index 0000000..9db4f59
--- /dev/null
+++ b/test/tools/llvm-cov/Inputs/test.gcno
Binary files differ
diff --git a/test/tools/llvm-cov/lit.local.cfg b/test/tools/llvm-cov/lit.local.cfg
new file mode 100644
index 0000000..df9b335
--- /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 0000000..a404e61
--- /dev/null
+++ b/test/tools/llvm-cov/llvm-cov.test
@@ -0,0 +1,2 @@
+RUN: llvm-cov -gcno=test.gcno -gcda=test.gcda -C=%p/Inputs/ \
+RUN: | diff %p/Inputs/test.cpp.gcov -