Please ignore secret bonuses. Secret tests do NOT award bonus. Max hw grade is 30+2 bonus efficiency

Do you need help?

Notice Board

Script per testare il programma

in Programmazione in Assembly by (9.9k points)
edited by

Ho creato un piccolo script in Bash che testa il programma assembly e stampa il risultato su schermo. Se il test è fallito stampa le differenze, se invece è passato stampa la velocità (ossia il numero di istruzioni). Inoltre alla fine stampa il numero di test passati sul totale ed anche la velocità totale.

Ho voluto condivedere questo script perchè i test eseguiti sul server non sono in tempo reale, ma spesso sono eseguiti a distanza di un'ora. Per questo ho creato lo script, automatizza tutto il processo e permette di avere un feedback immediato (per ottimizzare il programma oppure trovare eventuali problemi).

L'unica avvertenza è che è necessario fornire il nome del file del programma assembly e il nome dell'eseguibile di MARS (nel mio caso si chiama "mars"). Inoltre nella stessa cartella devono essere presenti i vari file di test, le coppie "*.in" e "*.out" (esempio: "meno.in" e "meno.out"). Ci deve essere anche il programma assembly nella stessa cartella.

Per eseguire lo script basta dargli i permessi di esecuzione con "chmod u+x grader" e lo si può eseguire con "./grader".

Qui il codice dello script.

Se mi capita di aggiornarlo con nuove funzionalità nel link messo metterò la versione più recente.

Update 1: ho aggiunto un timeout per ogni singolo test (di default 5 secondi).

Update 2: ho rimosso il timeout in secondi ed ho aggiunto il numero massimo di istruzioni (di default dieci milioni). Ci sono anche alcuni check in più, fra qui quello di compilazione.

Update 3: miglioramento della stabilità dello script (ho sanato un po', Bash è abbastanza insidioso).

Update 4: aggiunto un messaggio di errore se non viene trovato nessun test da eseguire.

Update 5: aggiunta la possibilità di specificare un pattern (usando il globbing) per eseguire solo determinati test. Se per esempio volete eseguire solo il test chiamato "pippo.in" dovete fare "./grader pippo.in", mentre se volete eseguire solo i test che iniziano per max dovete fare "./grader "max*.in"" (attenzione alle virgolette!").

Un esempio di output:

639 views

1 Answer

andrea.sterbini (208020 points)
756 1270 2377
by (208k points)
Bravo Emanuele, grazie
andrea.sterbini (208020 points)
756 1270 2377
by (208k points)
se passi un numero come argomento il simulatore si ferma ed esce dopo quel numero di istruzioni
by (9.9k points)
Grazie per il consiglio professore, lei che numero di istruzioni massimo usa? Io ho provato con dieci milioni, dovrebbe bastare.

Ho aggiunto inoltre dei semplici check, fra qui quello di compilazione, possono tornare utili.