Unit Test環境の構築

今までのテストは

  • test.scm を実行して結果を目視
  • cppunitC++ の関数をテスト


というフローでした。


マクロの実装が進んできたので Scheme での Unit Test の必要性が出てきました。
そこで目をつけたのが id:kzk さんの SigSchemeの unittest.scm です。
これをそのまま動かせれば Unit Test 環境のテストはしなくても良いはず!。


set!/load はこのための布石だったのです。意外と大変だった。
ふと SigScheme の test ディレクトリを見ると、外部で提供されている数々のテストコードがあってこれを活用しているようです。
つーかこれ全部通らないといけないのか、今の段階では絶対無理だな。。

まずは - 演算子と for-eachと list を動かして total report をうごかす。

(load "./test/scheme.scm")
(load "./test/unittest.scm")

(define test-name "procedure +")
(assert-true test-name (= 3 (+ 1 2)))
(assert-true test-name (= 2 (+ 4 -2)))
(assert-true test-name (= 11 (+ 4 2 5)))

(define test-name "procedure -")
(assert-true test-name (= 2 (- 3 1)))
(assert-true test-name (= 0 (- 3 1 2)))
(assert-true test-name (= -3 (- 3 1 2 3)))
(assert-true test-name (= -3 (- 3)))

(define test-name "procedure /")
(assert-true test-name (= 2 (/ 4 2)))
(assert-true test-name (= 2 (/ 8 2 2)))
(assert-true test-name (= 1 (/ 54 2 9 3)))

(define test-name "procedure *")
(assert-true test-name (= 2 (* 1 2)))
(assert-true test-name (= -8 (* 4 -2)))
(assert-true test-name (= 40 (* 4 2 5)))

(total-report)
OK: 1 tests, 13 assertions, 13 successes, 0 failures, 0 errors

きたきた!