Arquivo funcoes.h
[php]int ehpar(int); // o número indicado eh par ?
int ehprimo(int); // o número indicado eh primo ?
int maior(int,int); // qual dos dois numeros eh o maior ?
int menor(int,int); // qual dos dois numeros eh o menor ?
int soma(int,int); // retorna a soma de dois numeros
[/php]
Ok, esta é uma tarefa diferente, ninguem está pedindo para implementar um programinha que vai perguntar 'digite um numero', é para implementar apenas.
É claro que muita gente vai implementar pequenos programas e perder um tempão com menus e cores...
Pense diferente: unit test!
Arquivo test.h
[php]/*
* Modo de usar:
* test(condicao, mensagem)
*/
void test(int,char *);
/*
* Gera report dos testes
*/
void report(void);[/php]
Arquivo unit_test.h
[php]#include
#include "funcoes.h"
#include "test.h"
int main(void){
test(ehpar(2), "o numero 2 deve ser par");
test(!ehpar(3), "o numero 3 NAO deve ser par");
test(ehpar(4), "o numero 4 deve ser par");
test(!ehpar(5), "o numero 5 NAO deve ser par");
test(ehprimo(2), "o numero 2 deve ser primo");
test(ehprimo(3), "o numero 3 deve ser primo");
test(!ehprimo(4), "o numero 4 NAO deve ser primo");
test(ehprimo(5), "o numero 5 deve ser primo");
test(maior( 1,5)== 5, "entre 1 e 5, o 5 deve ser maior");
test(maior(10,5)==10, "entre 10 e 5, o 10 deve ser maior");
test(maior(-5,1)== 1, "entre 1 e -5, o 1 deve ser maior");
test(maior( 5,5)== 5, "entre 5 e 5, o 5 deve ser maior");
test(maior( 1,5)== 1, "entre 1 e 5, o 1 deve ser menor");
test(maior(10,5)== 5, "entre 10 e 5, o 5 deve ser menor");
test(maior(-5,1)==-5, "entre -5 e 1, o -5 deve ser menor");
test(maior( 5,5)== 5, "entre 5 e 5, o 5 deve ser menor");
test(soma( 5,5)== 10, "a soma de 5 com 5 deve ser 10");
test(soma(10,5)== 15, "a soma de 10 com 5 deve ser 15");
test(soma(-5,15)==10, "a soma de -5 com 15 deve ser 10");
test(soma( 0,5)== 5, "a soma de 0 com 5 deve ser 5");
report();
return 0;
}[/php]
Facil né? Eu descrevi os comportamentos básicos esperados das minhas 5 funções e perdi alguns minutos.
Agora é implementar, certo? Calma... vamos fazer primeiro algo que compile.
Arquivo funcoes.c
[php]#include "funcoes.h"
int ehpar(int a){
return -1; // so para retornar alguma coisa...
}
int ehprimo(int a){
return -1; // lembre-se: ansi C não tem tipo booleano, pesquise sobre isso... ;-)
// imprima o resultado de 1==1 e 1==2 pra vc ver
}
int maior(int a,int b){
return -1;
}
int menor(int a,int b){
return -1;
}
int soma(int a,int b){
return -1;
}[/php]
Compilando tudo
gcc -Wall funcoes.c test.c unit_test.c -o unit_test.exe
Vamos executar
[OK]: 'o numero 2 deve ser par'
Erro: 'o numero 3 NAO deve ser par'
[OK]: 'o numero 4 deve ser par'
Erro: 'o numero 5 NAO deve ser par'
[OK]: 'o numero 2 deve ser primo'
[OK]: 'o numero 3 deve ser primo'
Erro: 'o numero 4 NAO deve ser primo'
[OK]: 'o numero 5 deve ser primo'
Erro: 'entre 1 e 5, o 5 deve ser maior'
Erro: 'entre 10 e 5, o 10 deve ser maior'
Erro: 'entre 1 e -5, o 1 deve ser maior'
Erro: 'entre 5 e 5, o 5 deve ser maior'
Erro: 'entre 1 e 5, o 1 deve ser menor'
Erro: 'entre 10 e 5, o 5 deve ser menor'
Erro: 'entre -5 e 1, o -5 deve ser menor'
Erro: 'entre 5 e 5, o 5 deve ser menor'
Erro: 'a soma de 5 com 5 deve ser 10'
Erro: 'a soma de 10 com 5 deve ser 15'
Erro: 'a soma de -5 com 15 deve ser 10'
Erro: 'a soma de 0 com 5 deve ser 5'
--------------
Total = 20, Pass = 5, Fail = 15
Algumas funções acertaram o resultado por acaso. Agora vem uma técnica bem interessante: codifique cada função, compile e rode de novo os testes.
Faça isso até que todos os testes estejam passando. Depois implemente novos testes (pelo menos mais dois de cada), compile e rode de novo.
Continua funcionando? Aparentemente vc fez um ótimo trabalho!
Perceba que eu disse ANTES tudo o que as funções deveriam fazer, depois eu implementei
O ultimo codigo para todo o exemplo funcionar:
Arquivo test.c
[php]#include
#include "test.h"
int total=0;
int pass =0;
int fail =0;
void test(int condicao,char *msg){
total++;
if(!condicao){
fail++;
printf("Erro: '%s'\n",msg);
}else{
pass++;
printf("[OK]: '%s'\n",msg);
}
}
void report(void){
printf("--------------\n");
printf("Total = %d, Pass = %d, Fail = %d\n",total,pass,fail);
}[/php]
Agora mãos na massa. E deixem as corezinhas pra quanto todos os testes estiverem funcionando
PS: Aprendam a criar um makefile (com uma target chamada test) e tudo ficara muito mais facil ainda!