Como podemos aplicar uma função não-vararg em uma va_lis
Estou portando oVerificação rápid estrutura de teste de unidade para C (consulte o código de trabalho em GitHub). A sintaxe será:
for_all(property, gen1, gen2, gen3 ...);
Ondeproperty
é uma função para testar, por exemplobool is_odd(int)
. gen1
, gen2
, etc. são funções que geram valores de entrada paraproperty
. Alguns geram números inteiros, outros geram caracteres, outros geram cadeias e assim por diant
for_all
aceitará uma função com entradas arbitrárias (qualquer número de argumentos, qualquer tipo de argumento).for_all
executará os geradores, criando valores de teste para passar para a função de propriedade. Por exemplo, a propriedadeis_odd
é uma função com o tipobool f(int)
. for_all
usará o gera para criar 100 casos de teste. Se a propriedade retornar false para qualquer um deles,for_all
imprimirá os valores incorretos do caso de teste. De outra forma,for_all
imprimirá"SUCCESS"
.
Portantofor_all
deve usar umva_list
para acessar os geradores. Depois que chamamos as funções do gerador, como as passamos para a função de propriedad
E seis_odd
tem o tipobool f(int)
, como implementaríamos uma funçãoapply()
que possui esta sintaxe:
apply(is_odd, generated_values);
Secondary IssueVejoASSI.
Como podemos imprimir de forma inteligente os valores arbitrários de um caso de teste com falha? Um caso de teste pode ser um único inteiro, ou dois caracteres, ou uma string ou alguma combinação dos itens acima? Não saberemos antecipadamente se deve usar:
printf("%d %d %d\n", some_int, some_int, some_int);
printf("%c\n" a_character);
printf("%s%s\n", a_string, a_struct_requiring_its_own_printf_function);