Frage

Ich habe einige Änderungen an eine Bibliothek zu halten inline mit einem Projekt. Ich lief den Test und alles noch vergangen, aber die Abdeckung ist nicht mehr 100%. Ich untersuchte und sah, dass der Code ausgeführt wird gerade nicht gemeldet. Aber ich habe keine Ahnung, warum gcov wird für die Linie nicht Berichterstattung berichten, wenn es ausgeführt wird.

Dies ist der Code:

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;

} 

Dies ist der Test:

/* 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);
}

Und das ist die Berichterstattung Ergebnisse:

       -:   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:}

einen Druck Hinzufügen vor return 1; ausführen würde. Es wäre nicht Abdeckung erhalten, aber die return 1 jetzt Abdeckung haben würde. Irgendwelche Ideen? Mann andere Seiten als ich kann nichts finden.

Edit: Aus den Kommentaren können Sie sehen, dass ich nicht alles offenbart hat. Ich habe einige Fortschritte auf dem Problem. Einige der anderen Tests anderen Funktionen führen die Abdeckung zu verschwinden, wenn sie laufen. Laufen nur die Tests für PreviouslyEncountered gibt 100 Prozent Abdeckung für diese Funktion. Ausführen von anderen Tests setzen diese.

War es hilfreich?

Lösung

Ich war in der Lage, den Code Refactoring, das das Problem so ließ ich wieder 100% Deckung bin immer. Ich habe keine Ahnung, wo das Problem herkommt. Ich werde es vielleicht noch einmal überprüfen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top