SATySFiでテストをするためのパッケージ

概要

自分が作成したassert-eqというパッケージを使用することで、関数のテストが簡単に行えます。

インストール方法

使用しているプリミティブの都合で、SATySFi v0.0.4以降でないと行けません。

Satyrographosを使う場合

$ opam update
$ opam install satysfi-assert-eq
$ satyrographos install

でインストールができます。

手動で行う場合

まず

$ git clone https://github.com/puripuri2100/SATySFi-assert-eq.git

をすることで手元にリポジトリのコピーを作成します。

次に、LIBROOT/local/packages/以下にassert-eqというフォルダを作ります。

最後に、フォルダ内のassert-eq.satygLIBROOT/local/packages/assert-eq/にコピーします。

これで完了です。

提供する関数

モジュール名はAssertEqです。

  • assert-eq : string?-> ('a -> string) -> 'a -> 'a -> unit
  • \assert-eq : [string?; ('a -> string);'a; 'a] inline-cmd
  • +assert-eq : [string?; ('a -> string);'a; 'a] block-cmd

組版時には\assert-eqコマンドはinline-nilと同じ挙動をし、+assert-eqblock-nilと同じ挙動をします。

assert-eq <function> <left> <right><left><right>が一致すると標準出力でログが、一致しないとエラー報告が出ます。

<function><left><right>での値を文字列に変換するための関数です。

例えば

assert-eq arabic (1+2) 3

ではログが、

assert-eq arabic (1+2) 4

ではエラーが出ます。

ログを見るときにわかりやすいようにラベルを付けることができます。

assert-eq ?:(`label`) arabic (1+2) 3のようにして使えます(\assert-eq+assert-eqでも同様にしてに使えます)。

具体的な使い方

先日記事を書いたdebug-show-valueと組み合わせることで簡単にテストできることを期待しています。

例えば、num-conversionでは

@require: stdjabook
@import: ../num-conversion

@require: assert-eq/assert-eq
@require: debug-show-value/debug-show-value


open NumConversion
open DebugShowValue

in

document (|
  title = {変換テスト};
  author = {\@puripuri2100};
  show-title = false;
  show-toc = false;
|) '<
  +assert-eq(show-opt show-string)(to-zenkaku 1230)(Some(`1230`));
  +assert-eq(show-opt show-int)(from-zenkaku `1230`)(Some(1230));
  +assert-eq(show-opt show-string)(to-zenkaku (-100))(None);
  +assert-eq(show-opt show-int)(from-zenkaku `1230`)(None);


  +assert-eq(show-opt show-string)(to-roman-upper 0)   (None);
  +assert-eq(show-opt show-string)(to-roman-upper 1)   (Some(`I`));
  +assert-eq(show-opt show-string)(to-roman-upper 2)   (Some(`II`));
  +assert-eq(show-opt show-string)(to-roman-upper 3)   (Some(`III`));
  +assert-eq(show-opt show-string)(to-roman-upper 4)   (Some(`IV`));
  +assert-eq(show-opt show-string)(to-roman-upper 5)   (Some(`V`));
  +assert-eq(show-opt show-string)(to-roman-upper 6)   (Some(`VI`));
  +assert-eq(show-opt show-string)(to-roman-upper 7)   (Some(`VII`));
  +assert-eq(show-opt show-string)(to-roman-upper 8)   (Some(`VIII`));
  +assert-eq(show-opt show-string)(to-roman-upper 9)   (Some(`IX`));
  +assert-eq(show-opt show-string)(to-roman-upper 10)  (Some(`X`));
  +assert-eq(show-opt show-string)(to-roman-upper 11)  (Some(`XI`));
  +assert-eq(show-opt show-string)(to-roman-upper 14)  (Some(`XIV`));
  +assert-eq(show-opt show-string)(to-roman-upper 100) (Some(`C`));
  +assert-eq(show-opt show-string)(to-roman-upper 4999)(Some(`MMMMCMXCIX`));
  +assert-eq(show-opt show-string)(to-roman-upper 5000)(None);

  +assert-eq(show-opt show-string)(to-roman-lower 0)   (None);
  +assert-eq(show-opt show-string)(to-roman-lower 1)   (Some(`i`));
  +assert-eq(show-opt show-string)(to-roman-lower 2)   (Some(`ii`));
  +assert-eq(show-opt show-string)(to-roman-lower 3)   (Some(`iii`));
  +assert-eq(show-opt show-string)(to-roman-lower 4)   (Some(`iv`));
  +assert-eq(show-opt show-string)(to-roman-lower 5)   (Some(`v`));
  +assert-eq(show-opt show-string)(to-roman-lower 6)   (Some(`vi`));
  +assert-eq(show-opt show-string)(to-roman-lower 7)   (Some(`vii`));
  +assert-eq(show-opt show-string)(to-roman-lower 8)   (Some(`viii`));
  +assert-eq(show-opt show-string)(to-roman-lower 9)   (Some(`ix`));
  +assert-eq(show-opt show-string)(to-roman-lower 10)  (Some(`x`));
  +assert-eq(show-opt show-string)(to-roman-lower 11)  (Some(`xi`));
  +assert-eq(show-opt show-string)(to-roman-lower 14)  (Some(`xiv`));
  +assert-eq(show-opt show-string)(to-roman-lower 100) (Some(`c`));
  +assert-eq(show-opt show-string)(to-roman-lower 4999)(Some(`mmmmcmxcix`));
  +assert-eq(show-opt show-string)(to-roman-lower 5000)(None);


  +assert-eq(show-opt show-int)(from-roman-upper `I`)        (Some(1));
  +assert-eq(show-opt show-int)(from-roman-upper `II`)       (Some(2));
  +assert-eq(show-opt show-int)(from-roman-upper `III`)      (Some(3));
  +assert-eq(show-opt show-int)(from-roman-upper `IV`)       (Some(4));
  +assert-eq(show-opt show-int)(from-roman-upper `IIII`)     (Some(4));
  +assert-eq(show-opt show-int)(from-roman-upper `V`)        (Some(5));
  +assert-eq(show-opt show-int)(from-roman-upper `VI`)       (Some(6));
  +assert-eq(show-opt show-int)(from-roman-upper `VII`)      (Some(7));
  +assert-eq(show-opt show-int)(from-roman-upper `VIII`)     (Some(8));
  +assert-eq(show-opt show-int)(from-roman-upper `IX`)       (Some(9));
  +assert-eq(show-opt show-int)(from-roman-upper `VIIII`)    (Some(9));
  +assert-eq(show-opt show-int)(from-roman-upper `X`)        (Some(10));
  +assert-eq(show-opt show-int)(from-roman-upper `XI`)       (Some(11));
  +assert-eq(show-opt show-int)(from-roman-upper `XIV`)      (Some(14));
  +assert-eq(show-opt show-int)(from-roman-upper `C`)        (Some(100));
  +assert-eq(show-opt show-int)(from-roman-upper `MMMMCMXCIX`)(Some(4999));

  +assert-eq(show-opt show-int)(from-roman-lower `i`)        (Some(1));
  +assert-eq(show-opt show-int)(from-roman-lower `ii`)       (Some(2));
  +assert-eq(show-opt show-int)(from-roman-lower `iii`)      (Some(3));
  +assert-eq(show-opt show-int)(from-roman-lower `iv`)       (Some(4));
  +assert-eq(show-opt show-int)(from-roman-lower `iiii`)     (Some(4));
  +assert-eq(show-opt show-int)(from-roman-lower `v`)        (Some(5));
  +assert-eq(show-opt show-int)(from-roman-lower `vi`)       (Some(6));
  +assert-eq(show-opt show-int)(from-roman-lower `vii`)      (Some(7));
  +assert-eq(show-opt show-int)(from-roman-lower `viii`)     (Some(8));
  +assert-eq(show-opt show-int)(from-roman-lower `ix`)       (Some(9));
  +assert-eq(show-opt show-int)(from-roman-lower `viiii`)    (Some(9));
  +assert-eq(show-opt show-int)(from-roman-lower `x`)        (Some(10));
  +assert-eq(show-opt show-int)(from-roman-lower `xi`)       (Some(11));
  +assert-eq(show-opt show-int)(from-roman-lower `xiv`)      (Some(14));
  +assert-eq(show-opt show-int)(from-roman-lower `c`)        (Some(100));
  +assert-eq(show-opt show-int)(from-roman-lower `mmmmcmxcix`)(Some(4999));


  +assert-eq(show-opt show-string)(to-kansujix 100)(Some(`一〇〇`));
  +assert-eq(show-opt show-int)(from-kansujix `一〇〇`)(Some(100));
  +assert-eq(show-opt show-string)(to-kansujix (-100))(None);
  +assert-eq(show-opt show-int)(from-kansujix `1〇〇`)(None);
  +assert-eq(show-opt show-int)(from-kansujix `百`)(None);
>

のようにしてテストファイルを書き、コンパイルをしてエラーが出ないかを確かめています。

おわりに

これでようやくテストを回せるようになりました。

使いこなしていきたいものです。