Commit 420d2a88 authored by Vytor Calixto's avatar Vytor Calixto 👾

Add script para fazer testes

parent 58db672c
f
main
*.o
a.out
*.in
test
tests/tabuleiros.txt
stages:
- test
before_script:
- make
run_tests:
stage: test
script:
- make test
artifacts:
paths:
- tests/tabuleiros.txt
......@@ -4,8 +4,15 @@ CFLAGS = -std=c99 -O2 -W -Wall -g
all: main
test: main
cd tests; \
$(CC) -std=c99 -o test geraMapa.c; \
chmod +x runTests.sh; \
runTests.sh
main: main.c tabuleiro.o filha.o
$(CC) $(CFLAGS) -o $@ $^
clean:
$(RM) *.o
$(RM) tests/*.in
......@@ -10,19 +10,19 @@ int main() {
puts("Erro na leitura do tabuleiro");
return -1;
}
imprimeTblr(t);
// imprimeTblr(t);
printf("Ler o tabuleiro (em matriz?)\n");
printf("Enquanto pilha não vazia:\n");
printf("\tPega os adjacentes do grupo (retorna os pesos dos filhos = montar o grafo)\n");
printf("\tEscolhe filho de maior peso\n");
printf("\tEmpilha os outros filhos\n");
printf("\tSE tamanho do caminho atual + filhos do nodo atual >= menor caminho: VOLTA!\n");
printf("\tSE soma do peso total = tamanho do tabuleiro: VOLTA! Retorna o caminho encontrado\n");
printf("\n\n\n##BONUS##\n");
printf("Olhar os vizinhos dos vizinhos no estado atual e atribuir bônus:\n");
printf("\tSe vizinho tem vizinho que não tenho: adicionar valor do vizinho do vizinho como bônus\n");
printf("\tSe vizinho tem vizinho que tenho, mas em número maior: adicionar diferença\n");
// printf("Ler o tabuleiro (em matriz?)\n");
// printf("Enquanto pilha não vazia:\n");
// printf("\tPega os adjacentes do grupo (retorna os pesos dos filhos = montar o grafo)\n");
// printf("\tEscolhe filho de maior peso\n");
// printf("\tEmpilha os outros filhos\n");
// printf("\tSE tamanho do caminho atual + filhos do nodo atual >= menor caminho: VOLTA!\n");
// printf("\tSE soma do peso total = tamanho do tabuleiro: VOLTA! Retorna o caminho encontrado\n");
// printf("\n\n\n##BONUS##\n");
// printf("Olhar os vizinhos dos vizinhos no estado atual e atribuir bônus:\n");
// printf("\tSe vizinho tem vizinho que não tenho: adicionar valor do vizinho do vizinho como bônus\n");
// printf("\tSe vizinho tem vizinho que tenho, mas em número maior: adicionar diferença\n");
return 0;
}
......
4 5 3
2 3 2 3 2
2 1 2 3 3
3 1 2 3 2
1 2 2 1 3
4 4 5
2 4 5 2
4 3 1 4
4 1 5 5
5 5 4 5
4 4 5
1 5 2 5
2 3 2 3
4 1 5 3
1 1 4 1
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
typedef struct {
int nlinhas;
int ncolunas;
int ncores;
int **mapa;
} tmapa;
void gera_mapa(tmapa *m, int semente) {
int i, j;
srand(semente);
m->mapa = (int**) malloc(m->nlinhas * sizeof(int*));
for(i = 0; i < m->nlinhas; i++) {
m->mapa[i] = (int*) malloc(m->ncolunas * sizeof(int));
for(j = 0; j < m->ncolunas; j++)
m->mapa[i][j] = 1 + rand() % m->ncores;
}
}
void mostra_mapa(tmapa *m) {
int i, j;
printf("%d %d %d\n", m->nlinhas, m->ncolunas, m->ncores);
for(i = 0; i < m->nlinhas; i++) {
for(j = 0; j < m->ncolunas; j++)
if(m->ncores > 10)
printf("%02d ", m->mapa[i][j]);
else
printf("%d ", m->mapa[i][j]);
printf("\n");
}
}
void mostra_mapa_cor(tmapa *m) {
int i, j;
char* cor_ansi[] = { "\x1b[0m",
"\x1b[31m", "\x1b[32m", "\x1b[33m",
"\x1b[34m", "\x1b[35m", "\x1b[36m",
"\x1b[37m", "\x1b[30;1m", "\x1b[31;1m",
"\x1b[32;1m", "\x1b[33;1m", "\x1b[34;1m",
"\x1b[35;1m", "\x1b[36;1m", "\x1b[37;1m" };
if(m->ncores > 15) {
mostra_mapa(m);
return;
}
printf("%d %d %d\n", m->nlinhas, m->ncolunas, m->ncores);
for(i = 0; i < m->nlinhas; i++) {
for(j = 0; j < m->ncolunas; j++)
if(m->ncores > 10)
printf("%s%02d%s ", cor_ansi[m->mapa[i][j]], m->mapa[i][j], cor_ansi[0]);
else
printf("%s%d%s ", cor_ansi[m->mapa[i][j]], m->mapa[i][j], cor_ansi[0]);
printf("\n");
}
}
int main(int argc, char **argv) {
int cor;
tmapa m;
int semente;
if(argc < 4 || argc > 5) {
printf("uso: %s <numero_de_linhas> <numero_de_colunas> <numero_de_cores> [<semente_aleatoria>]\n", argv[0]);
exit(1);
}
m.nlinhas = atoi(argv[1]);
m.ncolunas = atoi(argv[2]);
m.ncores = atoi(argv[3]);
if(argc == 5) semente = atoi(argv[4]);
else semente = time(NULL);
gera_mapa(&m, semente);
// mostra_mapa_cor(&m);
FILE *fp;
char str[30];
sprintf(str, "/tmp/%d.in", semente);
fp = fopen(str, "w+");
fprintf(fp, "%d %d %d\n", m.nlinhas, m.ncolunas, m.ncores);
for(int i = 0; i < m.nlinhas; i++) {
for(int j = 0; j < m.ncolunas; j++)
if(m.ncores > 10)
fprintf(fp, "%02d ", m.mapa[i][j]);
else
fprintf(fp, "%d ", m.mapa[i][j]);
fprintf(fp, "\n");
}
return 0;
}
#!/bin/bash
# tempo máximo para executar, em milisegundos
tempo_max=500
# tamanhos do tabuleiro
tams=(8 16 32 64 128 256 512 1024)
# lista de cores
cores=(4 8 16 32 64)
#-- Cores do terminal
RED='\033[0;31m'
GREEN='\033[0;32m'
BLUE='\033[0;34m'
CYAN='\033[0;36m'
NC='\033[0m' # Sem cor
echo -ne "" > tabuleiros.txt
echo "Iniciado testes"
for i in ${tams[*]}
do
echo "Tamanho do tabuleiro: ${i}"
T_soma_total=0
for cor in ${cores[*]}
do
echo "Número de cores: ${cor}"
T_soma_cor=0
for j in $(seq 1 $i)
do
echo -ne "Tabuleiro com ${i} linhas e ${cor} cores ${i}x${j}"\\r
semente=$RANDOM
# echo "Usando semente: ${semente}"
./test $i $j $cor $semente
T_inicial=$(date +%s%N)
../main < "/tmp/${semente}.in"
T_gasto=$(($(date +%s%N) - $T_inicial))
T_soma_cor=$(($T_gasto + $T_soma_cor))
T_soma_total=$(($T_gasto + $T_soma_total))
# tempo em segundos
S=$(($T_gasto/1000000000))
# tempo em milisegundos
M=$(($T_gasto/1000000))
if (($M>$tempo_max)); then
echo -e "\n${RED}Tabuleiro ${i} ${j} ${cor} ${semente} levou mais de ${tempo_max} milisegundos: ${S}.${M}s${NC}"
echo "${i} ${j} ${cor} ${semente}" >> tabuleiros.txt
fi
rm "/tmp/${semente}.in"
done
T_medio_cor=$(($T_soma_cor/$i))
S_medio_cor=$(($T_medio_cor/1000000000))
M_medio_cor=$(($T_medio_cor/1000000))
echo -ne "\n${CYAN}Tempo médio com ${cor} cores: ${S_medio_cor}."
printf "%03d" ${M_medio_cor}
echo -e "s (${T_medio_cor})${NC}\n"
done
T_medio_total=$(( $T_soma_total/($i * ${#cores[*]}) ))
S_medio_total=$(($T_medio_total/1000000000))
M_medio_total=$(($T_medio_total/1000000))
echo -ne "${BLUE}Tempo médio com tamanho ${i}: ${S_medio_total}."
printf "%03d" ${M_medio_total}
echo -e "s (${T_medio_cor})${NC}\n"
done
fs=$(cat tabuleiros.txt | wc -l)
if [ ${fs} -gt "1" ]; then
echo -e "${RED}${fs} tabuleiro(s) passou do tempo limite de ${tempo_max} milisegundos:${NC}"
cat tabuleiros.txt
exit 1
else
echo -e "${GREEN}Nenhum tabuleiro passou do tempo limite${NC}"
exit 0
fi
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment