Pregunta

he hecho algunos cambios a una biblioteca para mantenerlo en línea con un proyecto. Corrí la prueba y todo lo que todavía pasé pero la cobertura ya no es 100%. Investigué y vi que el código se ejecuta simplemente no informó. Pero no tengo ni idea de por qué no se está informando gcov la cobertura de la línea cuando se está ejecutando.

Este es el código:

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;

} 

Esta es la prueba:

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

Y este es el resultado de cobertura:

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

Adición de una impresión antes de return 1; ejecutaría. No sería obtener una cobertura pero la return 1 ahora tendría cubierta. ¿Algunas ideas? aparte de las páginas man no puedo encontrar nada.

Editar: De los comentarios se puede ver que yo no reveló todo. Hice algunos progresos en el problema. Algunas de las otras pruebas de otras funciones, la cubierta podría desaparecer cuando se ejecutan. Correr sólo las pruebas de PreviouslyEncountered da cobertura al 100 por ciento para esa función. Practicar otros exámenes restablece esto.

¿Fue útil?

Solución

pude refactorizar el código que causó el problema, así que estoy recibiendo una cobertura del 100% nuevo. No tengo idea de dónde está el problema vino. Tal vez voy a comprobar de nuevo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top