Portuguese home
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.
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.
Alguns macros úteis foram criados para qualquer outro uso.
- METRIC_LOG (format, ...) -- Mostra uma mensagem de log.
- METRIC_LOG_ARRAY (mask, array, length) -- Exibe o conteúdo da array.
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 tipotest_t
que deve ser usado como o tipo de retorno de uma função de teste. As variáveis globais staticmetric_count_tests_fail
emetric_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);