LMH01 / alpha_tui

My attempt to write a runtime environment and debugger for the Alpha-Notation used in my SysInf lecture.
GNU General Public License v3.0
14 stars 1 forks source link

Create new `Test` mode that enables unittests #68

Open reeelix opened 2 months ago

reeelix commented 2 months ago

A new Test mode should be introduced. It enables a testfile to be read. A testfile containes multiple input-output-definitions, such that the given program is executed on each of the inputs (with a timeout to prevent endless loops), and then its output is compared to the expected output. The results are printed for the user.

A more detailed explanation is available in German:

Beschreibung:

Mit ./alpha_tui test <program> <testfile> kann man ein Testfile einlesen. Das enthält beliebig oft die Kombination aus Memory Layout Vorgabe (wie in einem Memory Config File) und einem expected Output (also eine Auflistung von "Speicherstellen/Registern=Wert", im Endeffekt auch eine Art spezielles Memory Config File) -> das ist jeweils ein Test (der hat zusätzlich noch einen Namen).
Wenn man den command ausführt, wird für jeden Test das Program mit der gegebenen Memory Konfiguration (damit kann man ja Speicherstellen auf gewisse Werte setzen) ausgeführt. Dabei muss es ein Timeout geben (was man mit --timeout auf nen anderen Wert setzen kann). Sobald das Programm auf einer Eingabe terminiert ist, wird jede Zeile des expected outputs mit dem aktuellen Zustand der Register und des Speichers verglichen.

Sobald alle Tests durchgelaufen sind, erhält man für jeden Test die Info, ob er gepassed wurde, gefailed ist, oder getimeoutet.

Darstellung:

Es bietet sich ein neues TUI Layout an. Die Liste der Tests (deren Namen) und ihr Result (vlcht ein farbiges Icon) kann man gut in einer Spalte links darstellen. Dann kann man mit den Pfeiltasten die Tests einzeln auswählen. Immer für den Test, den man gerade ausgewählt hat, wird auf der rechten Seite

Input
------------------------
Output

dargestellt. Output ist dabei jeweils <Speicherstelle>=<actual value> (expected: <expected value>), wobei das in den Klammern nur dasteht, wenn die Outputs sich unterschieden haben. Es gibt dann die Möglichkeit, mit einem Hotkey für den gerade ausgewählten Test direkt das äquivalent zu ./alpha_tui load --memory-layout-file <Temporäre Kopie des Eingabelayouts des aktuellen Tests> <program> zu launchen, um zu debuggen, warum ein Test gefailed ist

reeelix commented 2 months ago

would be a huge benefit from a didactic point of view, but will be quite some work and require quite a bit of refactoring

LMH01 commented 2 months ago

Interesting Idea but as you said this will be quite some work. I don't think that this is something that I will implement in the next time.