HUnit入門

http://haskell.g.hatena.ne.jp/jmk/20060816/1155697498を参照しながら、自分で手を動かしながらmapとfoldrのテストを書いてみました。やっぱりコードの断片じゃなくて実際に動作するものがあった方が理解が進みます。
Haskellらしくまたよくわからない演算子を多用していますが、これはこれでとてもシンプルに書けるということがよくわかりました。

module Main (main) where

import Test.HUnit (runTestTT, test, Test, (~:), (~=?))

suite :: [Test]
suite = [
  "map"   ~: testMap,
  "foldr" ~: testFoldr
  ]

testMap :: [Test]
testMap = [
  [2, 3, 4] ~=? map (+ 1) [1, 2, 3],
  [2, 4, 6] ~=? map (* 2) [1, 2, 3],
  []        ~=? map (* 2) []
  ]

testFoldr :: [Test]
testFoldr = [
  55 ~=? foldr (+) 0 [1 .. 10],
  0  ~=? foldr (+) 0 []
  ]

main :: IO ()
main =  do
  runTestTT $ test suite 
  return ()

実行例:

$ ./hunit_sample.exe
Cases: 5  Tried: 5  Errors: 0  Failures: 0