Test ist eigentlich kein Datentyp, sondern eine besondere Form von code, die nur für einen Testlauf kompiliert wird und ansonsten ignoriert wird. Tests drüfen andere Tests aufrufen, daher dürfen sie wie code auch beliebige Argumente haben. test darf code aufrufen, code darf aber niemals tests aufrufen. Tests, die keine Argumente haben, werden im Testlauf ausgeführt.
add.g
add is code( int a, int b ) as int := return a+b; add55 is test := { require pro.genesys.test; compare( 10, add( 5, 5 ), "5+5" ); } suite addtest { add27 is test := { require pro.genesys.test; compare( 9, add( 2, 7 ), "2+7" ); } add72 is test := { require pro.genesys.test; compare( 9, add( 7, 2 ), "7+2" ); } } main is code := { print add( 5, 5 )$; }
Um das Programm laufen zu lassen wird nun das File kompiliert:
gsys -r add.g
Um die Tests auszuführen ruft man
gsys -ruv add.g
Und alle Tests werden ausgeführt.
OK : 5+5 => 10 (add55) OK : 2+7 => 9 (addtest.add27) OK : 7+2 => 9 (addtest.add72) 3 tests ok, 0 failures
Möchte man nur gewisse Tests ausführen:
gsys -ruv add.g add55 addtest.add27 OK : 5+5 => 10 (add55) OK : 2+7 => 9 (addtest.add27) 2 tests ok, 0 failures
oder nur eine spezielle Testsuite:
gsys -ruv add.g addtest OK : 2+7 => 9 (addtest.add27) OK : 7+2 => 9 (addtest.add72) 2 tests ok, 0 failures
Lässt man -v weg (verbose) wird nur das Resultat und die eventuell fehlgeschlagene Tests angezeigt.
gsys -ru add.g 3 tests ok, 0 failures
Funktionen können ihre Tests automatisch mitbringen, sie enthalten dann gewissermaßen eine Testsuite:
<code cpp>
add is code( int a, int b ) as int
{
body return a+b;
require pro.genesys.test;
add27 is test := compare( 9, add( 2, 7 ), "2+7" );
add72 is test := compare( 9, add( 7, 2 ), "7+2" );
}
Die Tests werden genauso ausgeführt:
gsys -ruv add.g OK : 2+7 => 9 (addtest.add27) OK : 7+2 => 9 (addtest.add72) 2 tests ok, 0 failures
und können auch einzeln angesprochen werden:
gsys -ruv add.g add.add27 OK : 2+7 => 9 (addtest.add27) 1 tests ok, 0 failures
Genesys liefert 0, wenn alle Tests erfolgreich waren und 1 wenn mindestens ein Test fehlgeschlagen ist.