From 9a9172edbcc1221d6bb856f58eaaf37bb03785e5 Mon Sep 17 00:00:00 2001 From: Vytor Calixto <vytorcalixto@gmail.com> Date: Sun, 18 Jun 2017 12:50:26 -0300 Subject: [PATCH] =?UTF-8?q?Add=20passo=20para=20verificar=20a=20sa=C3=ADda?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitlab-ci.yml | 11 +++-------- tests/runTests.sh | 16 +++++++++------- tests/verifica | Bin 0 -> 31040 bytes 3 files changed, 12 insertions(+), 15 deletions(-) create mode 100755 tests/verifica diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index d1af058..780ad00 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -5,13 +5,14 @@ before_script: - apt-get update - apt-get -y install build-essential make autoconf gcc gnuplot - make + - chmod +x tests/runTests.sh + - chmod +x tests/verifica + - gcc -std=c99 -o tests/test tests/geraMapa.c h1: stage: test script: - cd tests - - gcc -std=c99 -o test geraMapa.c - - chmod +x runTests.sh - ./runTests.sh -h "./floodit_h1" - gnuplot "tempos.plot" - gnuplot "medias.plot" @@ -31,8 +32,6 @@ h2: stage: test script: - cd tests - - gcc -std=c99 -o test geraMapa.c - - chmod +x runTests.sh - ./runTests.sh -h "./floodit_h2" - gnuplot "tempos.plot" - gnuplot "medias.plot" @@ -53,8 +52,6 @@ h4: stage: test script: - cd tests - - gcc -std=c99 -o test geraMapa.c - - chmod +x runTests.sh - ./runTests.sh -h "./floodit_h4" - gnuplot "tempos.plot" - gnuplot "medias.plot" @@ -75,8 +72,6 @@ h6: stage: test script: - cd tests - - gcc -std=c99 -o test geraMapa.c - - chmod +x runTests.sh - ./runTests.sh -h "./floodit_h6" - gnuplot "tempos.plot" - gnuplot "medias.plot" diff --git a/tests/runTests.sh b/tests/runTests.sh index 2b09c06..25207fc 100755 --- a/tests/runTests.sh +++ b/tests/runTests.sh @@ -23,7 +23,7 @@ echo $HEUR tempo_max=120000 #120s # tamanhos do tabuleiro -tams=(4 8 16 32) +tams=(64 100) # lista de cores cores=(4 8 10) @@ -58,9 +58,6 @@ do DER=0 for j in $(seq 1 ${N_TESTES}) do - echo -ne "Tabuleiro ${i}x${i} com ${cor} cores: (${j}/${N_TESTES}) (T max: $(($T_max_cor/1000000000))." - printf "%03d" $(($T_max_cor/1000000%1000)) - echo -ne ") (${GREEN}${VIT}${NC}/${BLUE}${EMP}${NC}/${RED}${DER}${NC})"\\r semente=$RANDOM ./test $i $i $cor $semente @@ -78,16 +75,17 @@ do HRESP=$(cat "/tmp/heur${semente}.out" | tail -n2 | head -n1) if [ $RESP -gt $HRESP ]; then - #echo -ne "${RED}Heurística $(basename ${HEUR}) fez tabuleiro ${i} ${i} ${cor} ${semente} em ${HRESP} e nós em ${RESP}${NC}\n" echo "${i} ${i} ${cor} ${semente} (${HRESP})" >> ${TABULEIROS} DER=$(($DER + 1)) fi if [ $RESP -eq $HRESP ]; then - #echo -ne "${BLUE}Empatamos com $(basename ${HEUR}) no tabuleiro ${i} ${i} ${cor} ${semente} em ${HRESP}${NC}\n" EMP=$(($EMP + 1)) fi if [ $RESP -lt $HRESP ]; then - #echo -ne "${GREEN}Ganhamos de $(basename ${HEUR}) no tabuleiro ${i} ${i} ${cor} ${semente} com ${RESP}${NC}\n" + VALIDO=$(cat "/tmp/${semente}.in" "/tmp/resp${semente}.out" | ./verifica) + if [[ $VALIDO -eq 1 ]]; then + echo -ne "${RED}Nossa resposta para ${i} ${i} ${cor} ${semente} não é válida!!!${NC}\n\n" + fi VIT=$(($VIT + 1)) fi # tempo em segundos @@ -102,6 +100,10 @@ do rm "/tmp/${semente}.in" rm "/tmp/resp${semente}.out" rm "/tmp/heur${semente}.out" + + echo -ne "Tabuleiro ${i}x${i} com ${cor} cores: (${j}/${N_TESTES}) (T max: $(($T_max_cor/1000000000))." + printf "%03d" $(($T_max_cor/1000000%1000)) + echo -ne ") (${GREEN}${VIT}${NC}/${BLUE}${EMP}${NC}/${RED}${DER}${NC})"\\r done T_medio_cor=$(($T_soma_cor/${N_TESTES})) S_medio_cor=$(($T_medio_cor/1000000000)) diff --git a/tests/verifica b/tests/verifica new file mode 100755 index 0000000000000000000000000000000000000000..2e7509c77c7151258a56cf66fccd53a4b67ce349 GIT binary patch literal 31040 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 literal 0 HcmV?d00001 -- GitLab