====== Datentyp test ======
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
===== Tests innerhalb von Funktionen =====
Funktionen können ihre Tests automatisch mitbringen, sie enthalten dann gewissermaßen eine Testsuite:
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
===== Rückgabewert =====
Genesys liefert 0, wenn alle Tests erfolgreich waren und 1 wenn mindestens ein Test fehlgeschlagen ist.