Ir para o conteúdo

Coverage ​

--coverage instrumenta o que compila: a entrada de cada função e cada instrução de cada bloco incrementa um contador, e os contadores são escritos ao lado do output quando o programa termina - um return, um panic e um exit todos escrevem.

sh
talor test src/main.talor --coverage -o build/main.ll
talor build --coverage

O compilador escreve <stem>.covmap ao lado do output, nomeando o que cada contador é: o arquivo, a linha e a coluna, se é uma função ou uma instrução, e o nome da função. O programa em execução escreve as contagens ao lado de si mesmo, e TALOR_COV_FILE muda para onde elas vão.

talor run recusa a flag, porque o que ele constrói ele apaga, e dado de coverage que morre com o temporário não é dado:

'--coverage' is a flag of compile, test and build, and the data is written beside what they build; 'cov report' reads it

O que é contado ​

O fonte do próprio programa: a árvore em que o module raiz está. A biblioteca padrão e um package alcançado por um require são compilados com o programa e não são regiões, porque um total que a biblioteca domina é um número que nenhum passo de build consegue exigir. O corpo de uma closure é contado como qualquer outra instrução da função que o contém, e o ponto de entrada que o compilador escreve não é uma região.

talor cov report ​

Um relatório recebe caminhos .covmap ou .covdata, pareia cada um com o seu irmão, e soma as contagens das regiões que nomeiam o mesmo arquivo, linha, coluna, tipo e função - duas instâncias de um generic são uma região, e um acerto em qualquer uma é um acerto:

sh
talor cov report build/main.covdata
file          regions  covered  cover
main.talor          5        3  60.0%  1, 5
TOTAL               5        3  60.0%

As linhas que a última coluna nomeia são as que têm uma região que nunca foi alcançada. A porcentagem é de regiões cobertas e não de linhas: uma linha conta porque uma região começa nela, e uma linha onde nenhuma região começa - um comentário, uma linha em branco, uma chave - está fora da conta.

--min <pct> recebe uma porcentagem de 0 a 100 e responde 1 quando o total está abaixo dela, que é a pergunta que um passo de build faz:

sh
talor cov report build/main.covdata --min 80
coverage 60.0% is under --min 80

talor cov annotate ​

Os mesmos dados contra o fonte, sob o nome do arquivo, uma marca por linha: - para uma linha em que uma região não foi alcançada, . para uma em que todas as regiões foram, e um espaço para uma linha onde nenhuma região começa.

main.talor
- fn unused(n: i64): i64 {
      n * 2
  }

. fn main(): i32 {
.     println(`${sign(3)}`);
      0
  }

Contadores são incrementos simples e não são sincronizados: sob threads uma contagem pode ser perdida, e uma contagem perdida só pode perder uma linha, nunca inventar uma.

Talor v0.1.0 - Publicado sob a licença MIT OR Apache-2.0.