infoarena

infoarena - concursuri, probleme, evaluator, articole => Informatica => Subiect creat de: George Popa din Aprilie 13, 2008, 20:50:14



Titlul: Generator de teste
Scris de: George Popa din Aprilie 13, 2008, 20:50:14
spuneti-mi si mie va rog cum se face un generator de teste care sa ruleze progamul de mai multe ori, sa dea teste random si sa verifice prin brute force?


Titlul: Răspuns: Generator de teste
Scris de: Pripoae Teodor Anton din Aprilie 13, 2008, 21:13:14
pai :

un program de generator de teste random:

dai afisezi numerele random in fisierul .in (sa zicem ca gen este numit gen.exe)

sursa: (sa zicem ca este sursa.exe) care afiseaza raspunsul in nume.out

brute-force-ul care afiseaza in .ok si se numeste bf.exe (il poti baga chiar in generatorul de teste random)

si verificator care compara ok-ul generat de brute-force cu out-ul generat de sursa ta.

si daca esti pe windows(e mai simplu de cat pe linux) faci asa:

creezi un fisier .bat in care scrii asta:

Cod:
@echo off
call gen.exe
call bf.exe
call sursa.exe
call verif.exe
pause

 si il rulezi de cate ori vrei tu


Titlul: Răspuns: Generator de teste
Scris de: Savin Tiberiu din Aprilie 14, 2008, 01:14:32
si pe linux e la fel de usor, creezi fisierul eval.sh si scrii asta:
Cod:
#/bin/bash

./gen
./brut-force
./sursa
./verif
read a;
./eval.sh

In loc de verif poti sa faci "diff fisier.out fisier.ok".
ca sa il rulezi scrii in consola
Cod:
 sh eval.sh 
Dupa fiecare test dai un enter si trece la urmatorul. Cand vrei sa termini dai Ctrl+C (sau daca nu merge inchizi pur si simplu terminalu, mie imi mai face figuri uneori pe ubuntu 7.10)


Titlul: Răspuns: Generator de teste
Scris de: Bogdan-Cristian Tataroiu din Aprilie 14, 2008, 08:13:01
Ai putea face verificarea si generarea direct in bash... e mai putin de scris decat in C/Pascal

daca de exemplu vrei sa compari fisierele out si ok ignorand spatiile in plus
Cod:
if [ -z "`diff -wB fisier.ok fisier.out`" ]; then
        echo OK;
else
        echo BAD;
fi
(diff nu afiseaza nimic daca fisierele sunt identice, operatoru "-z" verifica daca sirul care urmeaza este vid)

Ca sa generezi N numere random poti face:
Cod:
N=10;
for ((i=0; $i < $N; i++)) do
    echo -n "$(( $RANDOM % 1000 )) " >> fisier.in;
done

devilkind: pe prima linie ai scris deja ca fisierul se ruleaza cu /bin/bash, e de ajuns ./eval.sh ca sa rulezi


Titlul: Răspuns: Generator de teste
Scris de: Cristian Strat din Aprilie 15, 2008, 01:51:43
diff nu afiseaza nimic daca fisierele sunt identice

Incearca `diff -qs`


Titlul: Răspuns: Generator de teste
Scris de: Anca Miihai din Aprilie 15, 2008, 17:04:47
devilkind: pe prima linie ai scris deja ca fisierul se ruleaza cu /bin/bash, e de ajuns ./eval.sh ca sa rulezi
Trebuie sa il faci executabil inainte:
Cod:
chmod +x eval.sh