QCheckをSML#に対応させた
以前紹介したSML版QuickCheckであるところの QCheck を
SML#3.0.1で動作できるようにしてマージされましたヽ(゚ー゚*ヽ)(ノ*゚ー゚)ノ*1!!
そのマージに続いていくつか変更があって現在バージョンが v1.2 に上がっていますので今後はこれを使いましょう。
#どうでもいいけどREADMEにtravisバッジとか付いたら途端にそれらしく見えますよね
セットアップ
まずビルド方法ですが、これは make するだけです。
$ make -f Makefile.smlsharp
付属のBasisのテストも移植しました。
$ make -f Makefile.smlsharp test
恐らくString/from-toがいくつかfailしますが、これはBasisの仕様です(゚∀゚)。*2
使い方
QCheck のトップレベルのインターフェースファイル(qcheck.smi)を require します。
(* test.smi *) _require "basis.smi" _require "/path/to/qcheck.smi"
QCheck.checkGenを呼ぶコードを書きます。(コード例は前回と同じ)
(* test.sml *) structure Test = struct open QCheck (* 実装した(テストしたい)関数 *) fun succ x = x + 1 fun even x = x mod 2 = 0 fun odd x = x mod 2 = 1 (* 満たすべき性質 *) fun even_xor_odd x = even x <> odd x val int = (Gen.Int.int, SOME Int.toString) (* Check *) val _ = checkGen int ("even<>odd", pred even_xor_odd) end
後はリンクして実行するだけ。
$ smlsharp -I /path/to/qcheck.smi -o test test.smi $ ./test even<>odd..............ok (100 passed)