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: