gcovのは、予想外のカバー結果を報告します
-
18-09-2019 - |
質問
私は、プロジェクトにインラインでそれを維持するために、ライブラリにいくつかの変更を行いました。私は、テストを実行し、すべてがまだ渡されたが、報道は、もはや100%ではありません。私はコードがちょうど報告されていない実行されていることを調査しました。しかし、私はそれを実行しているときにgcovのは、行のカバレッジを報告されていない理由はわかりません。
このコードは次のとおりです。
int32_t PreviouslyEncountered(uint32_t n)
{
uint32_t i;
/* Search thru all the numbers encoountered so far see if there is a match */
for(i = 0; i < xcount; i++)
{
if(n == collection[i])
{
return 1; /* This value has been seen before */
}
}
/* Add the number to encountered values if there is space */
if(xcount < NUMBERTRACKERMAX )
{
collection[xcount] = n;
xcount++;
}
else
{
return NUMBERTRACKERMAX ;
}
return 0;
}
これはテストです。
/* Fill with 10000 elements */
for(i = 0; i < NUMBERTRACKERMAX; i++)
{
assert(PreviouslyEncountered(i) == 0);
}
/* Test that all 10000 elements are present */
for(i = 0; i < NUMBERTRACKERMAX; i++)
{
assert(PreviouslyEncountered(i) == 1);
}
これはカバレッジ結果は次のとおりです。
-: 51:int32_t PreviouslyEncountered(uint32_t n)
function PreviouslyEncountered called 201 returned 100% blocks executed 90%
201: 52:{
201: 53: uint32_t i;
-: 54:
-: 55: /* Search thru all the numbers encoountered so far see if there is a match */
20101: 56: for(i = 0; i < xcount; i++)
-: 57: {
19900: 58: if(n == collection[i])
-: 59: {
#####: 60: return 1; /* This value has been seen before */
-: 61: }
-: 62: }
-: 63:
-: 64: /* Add the number to encountered values if there is space */
201: 65: if(xcount < NUMBERTRACKERMAX )
-: 66: {
200: 67: collection[xcount] = n;
200: 68: xcount++;
-: 69: }
-: 70: else
-: 71: {
1: 72: return NUMBERTRACKERMAX ;
-: 73: }
-: 74:
200: 75: return 0;
-: 76:
-: 77:}
return 1;
前に印刷を追加すると、実行します。これは、カバレッジを得ないだろうが、return 1
は今カバーを持っているでしょう。何か案は? manページ以外の私は何かを見つける傾けるます。
編集:
コメントからは、私はすべてを開示しなかったことがわかります。私はこの問題にいくつかの進歩を遂げました。他のテストその他の機能のいくつかは、彼らが実行したときに消えてカバーを引き起こします。 PreviouslyEncountered
のテストのみを実行すると、その機能のための100%のカバーを与えます。他のテストを実行すると、これをリセットします。
解決
私は再び100%のカバレッジを取得していますので、問題の原因となったコードをリファクタリングすることができました。私は、問題がどこから来見当がつかない。たぶん私は再びそれをチェックします。
所属していません StackOverflow