Powertest テストケース追加方法

テストケースの構成

test-+-apitestcases----+-PP               ... corbaインターフェーステストケース(PP,VICE)
     |                 +-SL               ... corbaインターフェーステストケース(PP,VICE)
     +-cgip------------+-CORE             ... インタープリタ/コード生成テストケース(PP,SL,VICE)
     |                 +-IMPL
     |                 +-IMPLMOD          ... インタープリタ/コード生成テストケース(SL)
     |                 +-PP               ... インタープリタ/コード生成テストケース(PP,VICE)
     |                 +-SL               ... インタープリタ/コード生成テストケース(SL)
     |                 +-TESTBYHAND
     |                 +-VICE             ... インタープリタ/コード生成テストケース(VICE)
     +-cgtestenv
     +-iptestcases-----+-CORE             ... インタープリタ/コード生成テストケース(PP,SL,VICE)
     |                 +-IMPL
     |                 +-IMPLMOD          ... インタープリタ/コード生成テストケース(SL)
     |                 +-PP               ... インタープリタ/コード生成テストケース(PP,VICE)
     |                 +-SL               ... インタープリタ/コード生成テストケース(SL)
     +-iptestcasesJP                      ... 未使用
     +-j2v-test                           ... 未使用
     +-j2vtf-testcases                    ... 未使用
     +-jss-test                           ... 未使用
     +-metaivtestcases                    ... メタデータテストケース(C++)
     +-pog-------------+-expertest-+-CORE ... 証明課題生成テストケース(PP,SL,VICE)
     |                 |           +-PP   ... 証明課題生成テストケース(PP,VICE)
     |                 |           +-SL   ... 証明課題生成テストケース(SL)
     |                 +-fulltest--+-CORE ... 証明課題生成テストケース(PP,SL,VICE)
     |                             +-PP   ... 証明課題生成テストケース(PP,VICE)
     |                             +-SL   ... 証明課題生成テストケース(SLE)
     |                             +-VICE ... 証明課題生成テストケース(VICE)
     +-pogtestcases                       ... 未使用
     +-powertest                          ... パワーテストプログラム
     +-tc--------------+-expertest-+-CORE ... 型チェックテストケース(PP,SL,VICE)
     |                 |           +-PP   ... 型チェックテストケース(PP,VICE)
     |                 |           +-SL   ... 型チェックテストケース(SL)
     |                 +-fulltest--+-CORE ... 型チェックテストケース(PP,SL,VICE)
     |                             +-PP   ... 型チェックテストケース(PP,VICE)
     |                             +-SL   ... 型チェックテストケース(SL)
     |                             +-VICE ... 型チェックテストケース(VICE)
     +-xformTestcases                     ... 未使用

ディレクトリの説明

テストケースは実行している言語やテストのレベルにより、ディレクトリ名でテスト対象かどうかを判断

  • CORE
    • このディレクトリ以下に全言語共通のテストケースを配置する。 書式はVDM++形式で記述する。VDM-SLでテストを行う場合は、自動的にVDM-SL形式に変換される。 そのため、VDM-SLに変換できない命令は使用できない。
  • PP
    • このディレクトリ以下にはVDM++のみを対象としたテストケースを配置する。VICEでも実行可能
  • SL
    • このディレクトリ以下にはVDM-SLのみを対象としたテストケースを配置する。
  • VICE
    • このディレクトリ以下にはVICEのみを対象としたテストケースを配置する。
  • IMPLMOD
    • このディレクトリ以下にはVDM-SLのみを対象としたテストケースを配置する。
  • IMPL
    • このディレクトリ以下には実装レベルのみを対象としたテストケースを配置する。
  • SPEC
    • このディレクトリ以下には仕様レベルのみを対象としたテストケースを配置する。

テストケースの構成

テストケースはテストを行う1ファイルの仕様とテスト結果のファイルで構成される。

テストケースの拡張子は.vdmを使用し、結果の拡張子は.resを使用する

test-01.vdm
test-01.res

インタープリタ/コード生成のテストケース

テストケースの実行は、クラスAの引数を取らないTest操作がデフォルトとなっている。 コード生成の場合は、値を返すことを前提としており、値を返さない場合はエラーとなる。

test-01.vdmの内容

class A

operations
 public Test: () ==> nat
 Test() ==
   return 5;

end A

test-01.resの内容

5

クラスAのTest操作以外のエントリポイントを指定する場合は、拡張子.arg のファイル を追加する。

test-02.vdmの内容

class A

operations
 public Test: () ==> nat
 Test() ==
   return 5;

end A

class B
 public Test2: () ==> nat
 Test2() ==
   return 6;

end A

test-02.resの内容

6

test-02.arg

B`Test2()

テストや実行オプションにより結果が変わる場合

実行オプションにより結果が異なる場合は、結果ファイルを複数用意して対応する。 ただし、候補が2個以上にならないように注意する。 またオプションは複数指定することが可能。

実装レベルと仕様レベルで結果が異なる場合

ファイル名に -impl-spec を付加した結果ファイルを作成する

test-01.res-impl
test-01.res-spec

言語によって結果が異なる場合

ファイル名に -sl-pp を付加した結果ファイルを作成する。

test-01.res-sl
test-01.res-pp

インタープリタテストで動的型チェックのON/OFFで結果が異なる場合

ファイル名に -dtcon-dtcoff を付加した結果ファイルを作成する。

test-01.res-dtcon
test-01.res-dtcoff

インタープリタテストとコード生成テストで結果が異なる場合

ファイル名に -ip-cpp-java を付加した結果ファイルを作成する。

test-01.res-ip
test-01.res-cpp
test-01.res-java

型チェックテストにおいてpos型とdef型で結果が異なる場合

ファイル名に -pos-def を付加した結果ファイルを作成する。

test-01.res-pos
test-01.res-def

テストを実行しないように指定する場合

ファイル名に -ignore-ignore-silently を付加した結果ファイルを作成する。 通常他のオプションと併用する。

-ignore は実行しなかったことがreportファイルに記載れるのに対し、 -ignore-silently はreportファイルに記載されず完全に無視される。

例えば型チェックエラーがあるような仕様でも、インタープリタは実行可能となるが、 コード生成は失敗する。このような場合、コード生成テストは無意味となる。 このような場合の結果ファイルの構成は以下のようになる。

test-01.res-ip
test-01.res-ignore-silently-cpp
test-01.res-ignore-silently-java