Common LispのTestingFrameworkを2つほど触ってみる
昨日に引き続きCLネタです。
引っ越しの準備で大江戸Ruby会議に行けなくて寂しいので、家で一人でLISPの妖精さんとお話して*1戯れて寂しさを紛らわせています。
で、CLでも当たり前の如くテスト書きたいよねーってことで http://quickdocs.org/ でライブラリを調べて、取り敢えず2つ試して見ました。
当然のごとくVimで書いています。 emacsでLISPとか今どきないわー(煽 *2
CL-TEST-MORE
perlのtest-moreに影響を受けているとのこと。 perlわからんので似てる〜とか言えない。 僕的にはあまり馴染みのない感じでしたけどとてもわかり易かったです。
;;; CL-TEST-MORE (ql:quickload :cl-test-more) (in-package :cl-test-more) (print "ok Function") (ok (eq 1 1) "description") ; ok (ok (eq 1 2) "description") ; not ok (print "is Function") (is 1 1 "description") ; ok (is 1 2 "description") ; not ok (print "isnt Function") (isnt 1 2 "description") ; ok (isnt 1 1 "description") ; not ok (defun fib (n) (if (< n 2) n (+ (fib (- n 2)) (fib (- n 1))))) (print "TEST Fibonacci Function") (is (fib 0) 0) (is (fib 1) 1) (is (fib 2) 1) (is (fib 3) 2) (is (fib 4) 3) (is (fib 5) 5) (is (fib 6) 8)
詳しくはこちら
lisp-unit
こっちのほうが僕の好みでした。 個人的に何か開発するときはこっちを使うかな。
;;; LISP-UNIT (ql:quickload :lisp-unit) (in-package :lisp-unit) (define-test fib (assert-equal 0 (fib 0)) (assert-equal 1 (fib 1)) (assert-equal 1 (fib 2)) (assert-equal 2 (fib 3)) (assert-equal 3 (fib 4)) (assert-equal 5 (fib 5)) (assert-equal 8 (fib 6))) (defun fib (n) (if (< n 2) n (+ (fib (- n 2)) (fib (- n 1))))) (run-tests '(fib)) (define-test my-sqrt (dotimes (i 5) (assert-equal i (my-sqrt (* i i))))) (defun my-sqrt (n) (/ n 2)) ; これはテストコケます (run-tests '(my-sqrt)) (run-tests :all)
詳しくはこちら
*1:ダグラス・ホフスタッターによるとREPL(対話型評価環境)の>や?はLISPの妖精で、REPLを使うことはLISPの妖精との対話である(ダグラス・ホフスタッター頭良すぎてぶっ飛んでる) メタマジック・ゲーム―科学と芸術のジグソーパズル
*2:冗談なのでマサカリ禁止