元ネタは、ここです。

coursera で Programming Languages のコースを受講している。

Assignment でテストファイルが与えられるのだが、これをうまく実行する方法についてのメモ。

Preparation

  • hw1.sml … 提出用ファイル
fun is_older(date1: int*int*int, date2: int*int*int) =
  (* implementation *)
  • hw1.sml … テストファイル
(* Test is_older *)
val test_is_older_1 = is_older((2012,1,1), (2012,1,1)) = false
val test_is_older_2 = is_older((2012,1,1), (2013,1,1)) = true
val test_is_older_3 = is_older((2013,1,1), (2013,2,1)) = true
val test_is_older_4 = is_older((2013,1,1), (2013,1,2)) = true

Execute

以下のコマンドで実行できる。

$ cat hw1.sml hw1_test.sml | sml
Standard ML of New Jersey v110.74 [built: Fri Dec  7 10:09:50 2012]
...
val is_older = fn : (int * int * int) * (int * int * int) -> bool
...
val test_is_older_1 = true : bool
val test_is_older_2 = true : bool
val test_is_older_3 = true : bool
val test_is_older_4 = true : bool

Emacs を私はつかっているので、=M-!= (shell-command)で、Emacs の中から実行。

grep

結果を以下のように grep するとなおよい。

$ cat hw1.sml hw1_test.sml | sml | grep false

まとめ

Lecture では、use “hw1.sml”; を利用して、ファイルを読み込むことを推奨しているけれども、 こっちのやり方のほうがフィードバックが素早く得られるのでよい。

いわゆる TDD ができる。