Common Lisp でごく基本的なテストを書くことについてのチュートリアル
テストの基本
1 + 1
を評価した値が本当に 2
かどうか知りたいとしましょう。
Lisp では (+ 1 1)
という風に書き、すぐにこのコードを REPL を使って確かめることができます。
あなたが CLISP をパソコンにインストールしているなら:
% clisp
と打つことで REPL*1 ループに身を置くことができます。
では先ほどのコードを打ってみましょう:
[1]> (+ 1 1)
2
見ましたか?
なんと、答えは 2
です*2!!
でも、眼で視るのはめんどくさいですよね。
ここで使えるのが equal
という関数です。
使ってみましょう:
[2]> (equal (+ 1 1) 2)
T
T
というのは真を表すリテラルです。
今は -modern
というコマンドラインオプションをつけていないので昔風にシンボルが大文字で表示されているのです。
CLISP の REPL を終了する時は:
[3]> (exit)
Bye.
と打ってください。
CLISP がさよならと云って終了します。
めんどくさい
でも、どんなコードも REPL でテストするなんてめんどくさいですよね。
そこで使われるのがテストフレームワーク*3です。
テストのメッカ、Perl 文化では Test::Simple という簡単なライブラリがあります。
幸運なことに test:simple
があります。
これは Test::Simple にインスパイアされた Common Lisp 製のライブラリ*4です。
test:simple
には ok
という 1 つの関数があります:
#!/usr/bin/env clisp
(require 'test:simple)
(tests 1)
(ok (equals (+ 1 1) 2))
これは上のコードと同じことをします。
ここからは、自分で ok や not ok を書く代わりに ok
を遣います。
ok
が真を返せば、テストは合格ということです。偽なら失敗です。
#!/usr/bin/env clisp
(require 'test:simple)
(tests 2)
(ok (equals (+ 1 1) 2))
(ok (equals (+ 2 2) 5))
このコードを評価すると、このような出力になるはずです:
1..2
ok 1
not ok 2
# failed test (demo-test-simple.lisp at line 7)
# looks like you failed 1 tests of 2.
この出力の意味はこうです:
1..2
1 行目は「2 つのテストを行う」ということを表します。
ok 1
2 行目は 1 番目のテスト結果が表示されています。
not ok 2
3 行目は 2 番目のテスト結果が表示されています。
# failed test (demo-test-simple.lisp at line 7)
# looks like you failed 1 tests of 2.
4 行目はテストが失敗した箇所を表し、5 行目では 2 つのテストのうち、1 つが失敗したことを知らせています。
怖くはありませんよ。さあ、お薬を飲みましょう……。
(l ω l〃) とここまで書いてなんなんですが、よく分からない理由により、脚注が出なくなっております……
このため、書く気が非常に失せております
╰( ´◔ ω ◔ `)╯ と思ったら、バックスラッシュ 3 つのソースコード記法を使うと良くないみたいだな…
(l ω l〃) さっぱりわからないよ……