Skip to content

Portuguese home

Luiz Felipe edited this page Apr 11, 2020 · 4 revisions

Esta é a documentação do metric, um conjunto de macros para fazer testes unitários (unit tests) e testes de performance (benchmarks) na linguagem C. Estes macros foram testados no C99 e funcionam adequadamente, eu não tenho nenhuma intenção de fazê-lo compatível com o C90 (embora seja realmente muito simples fazer isso, caso você precise).

No momento da inclusão do cabeçalho metric.h, os seguintes macros são verificados:

  • Se NDEBUG estiver definido, todos os macros são definidos para expandir para nada.
  • Se ANSI_COLORS estiver definido, os macros usarão ANSI escapes para colorir a saída.

Testando a performance do código

Se você precisa medir a performance de uma rotina ou parte do código, estes macros serão úteis para você. Eles medem o clock do processador e o tempo em segundos que passou desde o ponto em que a medição começou.

  • METRIC_CALL (times, funcname, ...) -- Chama uma função a repetindo n vezes.
  • METRIC_START () -- Começa um novo bloco para medição.
  • METRIC_STOP (name) -- Para a medição e mostra os resultados.

Macros úteis

Alguns macros úteis foram criados para qualquer outro uso.

Macros de testes unitários

A libc tem o cabeçalho <assert.h> e ele tem o macro assert, mas isso é muito simples para fazer testes unitários.

  • METRIC_TEST (test_name) -- Executa uma função de teste.
  • METRIC_TEST_END () -- Exibe o status de falhas e sucessos.
  • METRIC_TEST_FAIL (message) -- Dentro de uma função de teste, a finaliza com o status de falha.
  • METRIC_TEST_OK (message) -- Como o de cima, porém com o status de sucesso.
  • METRIC_ASSERT (expression) -- Falha a função de teste se a expressão for falsa.
  • METRIC_ASSERT_ARRAY (array1, array2, size) -- Falha se as arrays não forem iguais.
  • METRIC_ASSERT_STRING (string1, string2) -- Falha se as strings não forem iguais.

O cabeçalho metric.h define o tipo test_t que deve ser usado como o tipo de retorno de uma função de teste. As variáveis globais static metric_count_tests_fail e metric_count_tests_ok podem ser usadas para ler o número de tests que falharam e foram bem-sucedidos, respectivamente.

Qualquer macro de assert só pode ser usado dentro de uma função de teste. O protótipo de uma função de teste é:

test_t test_name(void);