mirror of
https://github.com/RPCS3/llvm.git
synced 2024-12-23 12:40:17 +00:00
Added basic unit test for llvm-cov.
This test compares the output of llvm-cov against a coverage file generated by gcov. Currently, llvm-cov does not work on certain platforms (namely big-endian architectures such as PowerPC, among others). These platforms are marked as XFAIL for now, but will be fixed later. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@194616 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
f44941d81d
commit
86e37f567b
7
test/tools/llvm-cov/Inputs/README
Normal file
7
test/tools/llvm-cov/Inputs/README
Normal file
@ -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 clang:
|
||||
clang++ -g -ftest-coverage -fprofile-arcs test.cpp
|
||||
|
||||
test.cpp.gcov was created by running gcov 4.2.1:
|
||||
gcov test.cpp
|
77
test/tools/llvm-cov/Inputs/test.cpp
Normal file
77
test/tools/llvm-cov/Inputs/test.cpp
Normal file
@ -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();
|
||||
}
|
82
test/tools/llvm-cov/Inputs/test.cpp.gcov
Normal file
82
test/tools/llvm-cov/Inputs/test.cpp.gcov
Normal file
@ -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:}
|
BIN
test/tools/llvm-cov/Inputs/test.gcda
Normal file
BIN
test/tools/llvm-cov/Inputs/test.gcda
Normal file
Binary file not shown.
BIN
test/tools/llvm-cov/Inputs/test.gcno
Normal file
BIN
test/tools/llvm-cov/Inputs/test.gcno
Normal file
Binary file not shown.
1
test/tools/llvm-cov/lit.local.cfg
Normal file
1
test/tools/llvm-cov/lit.local.cfg
Normal file
@ -0,0 +1 @@
|
||||
config.suffixes = ['.test']
|
4
test/tools/llvm-cov/llvm-cov.test
Normal file
4
test/tools/llvm-cov/llvm-cov.test
Normal file
@ -0,0 +1,4 @@
|
||||
RUN: cd %p/Inputs && llvm-cov -gcno=test.gcno -gcda=test.gcda \
|
||||
RUN: | diff test.cpp.gcov -
|
||||
|
||||
XFAIL: ppc64-linux-gnu, s390x-linux-gnu, arm
|
Loading…
Reference in New Issue
Block a user