関数型なら更に単体テストが有効だろうと、これを機会に単体テストの習慣を身につけようと思ったのですが、ファイルから関数への入力データを読み込んで結果を確認するだけのことがHUnitでできない。
ファイルから読み込もうとすると、IOモナドの世界に入り、そこから結果が取り出せなくなる。
うーん、どうしたもんか。
追記:
runTestTTがIOを返す関数だったので、こいつを取り込むように書いたらできました。
でも、do式中でのリストの扱い方がわからず、以下のように不細工。
completeLifeFiles = ["completeLife1.sgf", "completeLife2.sgf", "completeLife3.sgf"] main = do t1 <- readFile $ completeLifeFiles !! 0 t2 <- readFile $ completeLifeFiles !! 1 t3 <- readFile $ completeLifeFiles !! 2 runTestTT $ TestList $ (map completeLifeTest [(completeLifeFiles !! 0, t1), (completeLifeFiles !! 1, t2), (completeLifeFiles !! 2, t3)]) where completeLifeTest (fileName, sgf) = TestCase ...
追記:
できた。
completeLifeFiles = ["completeLife1.sgf", "completeLife2.sgf", "completeLife3.sgf"] main = do sgfs <- mapM readFile completeLifeFiles runTestTT $ TestList $ map completeLifeTest (zip completeLifeFiles sgfs) where completeLifeTest (fileName, sgf) = TestCase ...