====== 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.