JSL アプリケーションの単体テストは、JSL-Unit GUI ドライバー スクリプト (RunJSL_Unit.jsl) および単体テスト スクリプトとテーブルのセットを使用して実行できます。 単体テストのスクリプトとテーブルは、tests ディレクトリ (またはそのサブディレクトリの 1 つ) 内にある、プレフィックス test (例: test Geometry Mean.jsl) が付いた JSL ファイルと JMP ファイルです。 ドライバーは、各単体テストが各テスト ケースに対して呼び出す必要がある ut アサート関数を定義します。 utassert のプロトタイプは次のとおりです。
ut assert(expression, expectedvalue <,stresscase="N">)
最初の引数は、評価時にテスト ケースの実際の値に評価される式であり、2 番目の引数はテスト ケースの期待値です。 式と期待値は必須の引数ですが、ストレスケースはオプションであり、デフォルト値は N であることに注意してください。 ストレスケース引数は、まれなイベントとみなされる可能性があり、失敗する可能性が高いため、通常のテスト実行ではバイパスされる可能性があるテスト ケースを対象としています。
注: GUI ドライバーにはチェックボックスがあり、チェックするとストレス テスト ケースが含まれます。
数値テストの結果は、許容可能な変動を表すイプシロンを使用して比較されます (つまり、ファジー比較)。 イプシロン値には 2 つあり、期待される結果が 0 の場合は絶対イプシロンが使用され、その他すべての場合には相対イプシロンが使用されます。 イプシロン値は、各テスト スクリプトを実行する前にデフォルト値にリセットされます。これらは、必要に応じてテスト スクリプトで上書きできるグローバル変数です。
ut zero epsilon = 1e-12; // close enough when expected is 0
ut relative epsilon = 1e-9; // close enough relative to expected value
実行の詳細はログに書き込まれます。 失敗の場合は、実際の結果と予想される結果に加えて、LRE (数値テストのみ) が報告されます。 LRE は、相対誤差の対数 (底 10) を指す頭字語です (つまり、-log10(abs(q - c)/abs(c))。
注: と呼ばれる utassert バリアントもあります。 ut 数字をアサートする指定した桁数の精度をテストするために、オンザフライでイプシロンを設定する場合に使用します。 必要な精度の桁数である 3 番目の引数を追加します。 これは、期待値が特定の桁数にのみ提供される場合に特に便利です。 例えば、
ut assert digits(Expr(Sqrt(2)), 1.414, 4); // is sqrt(2) accurate to 4 digits
ut assert digits(Expr(Pi()), 3.14159, 6); // is pi() accurate to 6 digits
ut Assert Digit は、4 番目のオプションの引数としてストレス ケースの引数も提供します。 テスト データ テーブルの場合、イプシロン値はテーブル変数として保存され、合否結果の計算に使用される必要があります。
これは、5000 行を超える JSL スクリプトをデバッグするために、私が探していたものに似ています。 試してみるのが楽しみです。ありがとう!