Question

J'ai fait quelques modifications à une bibliothèque pour le garder en ligne avec un projet. J'ai couru l'épreuve et tout encore passé, mais la couverture n'est plus de 100%. J'ai étudié et vu que le code est exécuté tout simplement pas rapporté. Mais je ne sais pas pourquoi gcov ne couverture rapporte la ligne quand il est en cours d'exécution.

Voici le 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;

} 

Ceci est le 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);
}

Et voici les résultats de couverture:

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

Ajout d'une impression avant return 1; exécuterait. Il ne serait pas obtenir une couverture, mais le return 1 aurait maintenant la couverture. Des idées? autre que les pages de manuel, je ne peux pas trouver quoi que ce soit.

Edit: D'après les commentaires que vous pouvez voir que je ne l'ai pas disent tout. J'ai fait quelques progrès sur le problème. Certains des autres tests autres fonctions rendent la couverture à disparaître quand ils courent. Exécution uniquement les tests pour PreviouslyEncountered donne couverture à 100 pour cent pour cette fonction. Exécution d'autres tests remet cela.

Était-ce utile?

La solution

J'ai pu factoriser le code qui a causé le problème, donc je reçois à nouveau une couverture de 100%. Je ne sais pas où le problème est venu. Peut-être que je vais vérifier à nouveau.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top