Attualmente sto implementando il mio linguaggio di programmazione. Fino ad ora ho scritto:
-
Una classe
Errorper errori (da lanciare) incontrati durante l'elaborazione del codice sorgente di input; -
Alcune funzioni
SyntaxError(ognuna con un tag diverso, passate con un modello, comeSyntaxError<malformed_number>()oSyntaxError<unexpected_symbol>) che aiutano a costruireErroroggetti con diversi messaggi di errore (per ora ho ottenuto solo questo, ma presto avròFunctionErrors,IndexErrors e così via); -
Una classe
Tokenche contiene le informazioni su ciascun token (riga nella stringa in cui si trovava quando è stata rilevata, il tipo che può esserestring,number... cose come quella ); -
Infine, una funzione
lexerche prende come imput una stringa di codice sorgente e restituisce un oggettostd::list<Token*>. Internamente, utilizza alcune funzioni di supporto (buildname,builsymbol,skipcomment...) per aiutare a mantenere il codice organizzato.
Non ho seguito alcuna particolare tecnica di programmazione per codificarlo, ma ora sento l'impulso di seguire quelli che vanno sotto il nome di Programmazione Test Developement.
Ma ho alcune preoccupazioni:
-
Innanzitutto, cosa devo testare nel codice sopra? Ovviamente la funzione
lexerdovrebbe essere testata a fondo, e forse anche le funzioni di aiuto che usa (credo), ma che dire delle altre cose? -
In secondo luogo, come posso testare le funzioni con un output non banale? Online vedo molti esempi che confrontano numeri semplici o stringhe, ma come si scrive un test per una funzione che restituisce un elenco di puntatori agli oggetti senza dover scrivere troppo per un singolo test case?