Skip to content

Latest commit

 

History

History
224 lines (177 loc) · 8.09 KB

README.md

File metadata and controls

224 lines (177 loc) · 8.09 KB

テストスクリプトについて

テストは TAP(Test Anything Protocol)1 を用いて行います.

How to Run

Run make check at the root directory of the project.

概要

Automake の TAP を用いて,自動的にテストを行います.

system_check では,

  • <testname>.lmntest ファイルは,LMNtal のプログラムだけでなく, 実行結果の予想などを含みます.

    • そのままではコンパイルできません.
  • <testname>.lmntest ファイルは, system_check/Makefile.am

    %.il: %.lmntest
      awk -f create_testdata.awk | \        ## Create a test program.
      $(LMNC) --stdin-lmn $(LMNCFLAGS) >$@  ## Compile with a compiler.

    によって,

    1. create_testdata.awk スクリプトによって, テストが成功した場合に最終状態のプロセスに ok を含むような, LMNtal プログラムへと作り替えられます.

    2. プログラムに変更があった場合は, コンパイラによってこの LMNtal プログラムは il ファイルにコンパイルされます.

  • check.pl は, 作成された il ファイルを slim に与えて実行し, 結果に ok があるかどうかを検査します.

statespace では,

  • 非決定実行したい LMNtal プログラムをおいておき, そのまま il ファイルにコンパイルします.
  • check.pl が, コンパイルされた il ファイルと,全状態数と,最終状態数を受け取り,状態空間をチェックします.

library_check では,

  • --use-builtin-rule をつけて実行したい LMNtal プログラムをおいておき, 単にそれがそのまま実行されます.
  • 実行結果の検査などは現在行っていません.
    • TODO: system_check を参考に,実行結果の確認まで行うようにする.

Advanced Usage

それぞれのディレクトリの中のテストのみ実行する.

  • library_check などのディレクトリに入って,make check-TESTS を実行する.

新たなテストを作成する手順

system_check にテストを追加する場合について,解説します.

新たなテストが必要な場合は,

  1. system_check ディレクトリ以下に, 新しくディレクトリ <dirname> を作って,または既存のディレクトリの中に,
    1. <testname>.lmntest ファイル(テストスクリプト)を新たに作成してください.
      • E.g., system_check/testsuite/append/append1.lmntest
        append(c(1,c(2,c(3,n))),c(4,c(5,n)),result), ( append(X,Y,Z), n(X) :- Y=Z ), ( append(X,Y,Z), c(A,X1,X) :- c(A,Z1,Z), append(X1,Y,Z1) ).
        result(c(1,c(2,c(3,c(4,c(5,n))))))
        ok
      • 構成
        1. 1 行目にテストしたい LMNtal プログラム,
        2. 2 行目に LMNtal プログラムの予想される出力,
        3. 3 行目に ok または ng を記述してください.
          • ok ならば, 1 行目の結果が 2 行目と等しいとき,
          • ng ならば, 1 行目の結果が 2 行目と異なるときにテストに成功します.
        4. 4 行目以降には,LMNtal コメント以外は書かないでください.
    2. check.sh (テストを実行するプログラム)を新たに生成, または既存のファイルに変更を加えてください.
      • TAP に従って結果を出力するシェルスクリプトです.
      • E.g., system_check/testsuite/append/check.sh
        #!/bin/sh
        ./check.pl \
            /testsuite/append/append1 \
            /testsuite/append/append2 \
            /testsuite/append/append3 \
            /testsuite/append/append4
      • check.sh ファイルでは, ./check.pl を呼び出し, その引数として, テストしたい <testname>.lmntest ファイルのパス (e.g., /testsuite/append/append1.lmntest) から .lmntest を除いたもの (e.g., /testsuite/append/append1) を全て与えてください.
  2. system_check/Makefile.am
    1. TESTS 変数に, 追加した check.sh スクリプトへのパス を追加してください.
      • E.g., TESTS = testsuite/<dirname>/check.sh
    2. check_DATA 変数に, 追加した <testname>.lmntest ファイルへのパス を追加してください.
      • E.g., check_DATA = testsuite/<dirname>/<testname>.lmntest

オプションの指定

Compiler option は <testdir>/Makefile.am で, LMNCFLAGS で指定している.

Runtime option は, <testdir>/check.pl で, slim_CHECK_OPTIONS 環境変数を読み込んで指定している.

  • E.g., system_check/check.pl

    $options = $ENV{slim_CHECK_OPTIONS};
  • 例えば,--history-management を用いながらテストしたい場合は,

    export slim_CHECK_OPTIONS="--history-management"

    してから make check する.

Directory Structure

system_check/testsuite

  1. append
    • Appending a list to a list.
  2. basic
    • 簡単な LMNtal プログラム
  3. count
    • ???
  4. cslmntal
    • Test some CSLMNtal programs. E.g., Skiplists.
  5. guard_float
    • ???
  6. guard_ground
    • ???
  7. guard_ground_multi
    • ???
  8. guard_int
    • ???
  9. guard_string
    • ???
  10. guard_unary
    • ???
  11. hyperlink
    • ???
  12. mem_name
    • ???
  13. miscellaneous
    • ???
  14. proccxt
    • ???
  15. proccxt_free
    • ???
  16. proxyatom
    • ???
  17. rulecxt
    • ???
  18. simpagation
    • ???
  19. unification
    • ???
  20. uniq
    • ???

library_check/testsuite

  1. integer
    • ???
  2. set
    • Test set module.
  3. statespace
    • ???

statespace/testsuite

  1. advanced
    • ???
  2. basic
    • ???
  3. hyperlink
    • Test hyperlinks

歴史的経緯

元々のテストスクリプトは LMNtal 処理系用のテストスクリプトを流用したもので, 以下のような欠点がありました.

  • テストが走るたびに lmn ファイルをコンパイルする
  • テストの結果如何にかかわらず PASS: 1 のみを表示する
  • ~.log にテスト結果が出力される

1回のテストに5分程度かかるため, 自動テストの利点があまり発揮できていませんでした.

そこで, Automake の TAP を用いてよりテストの利便性を高めました.

  • コンパイルを毎回しなくとも良いように, テストケースごとにファイルに分け, make によって監視しています.

Footnotes

  1. https://www.gnu.org/software/automake/manual/html_node/Using-the-TAP-test-protocol.html