HaskellのテストフレームワークHUnitを使ってみる。
テストしてみるライブラリは、行列計算のhmatrix。
stack test
で、テストを実行できる。
ただ、Doubleの計算誤差で、
連立方程式の解が微妙にズレてテストが失敗する。
失敗メッセージが出るので、参考として残した。
なお、ちゃんとしたソルバを使うと、きれいに計算される。
(テストで浮動小数点数の微妙なズレを許容する比較法を使うのもアリ)
HUnitはJUnitのHaskell版。
~=?や~?=でアサートしたり、
~:でテストにラベルをつけるなど、
独自の演算子を使っていくのはHaskellぽい
(Javaは演算子を独自に定義できない)。
ただ、JUnitは歴史が長いので、Rspecに比べると
なんとなく原始的な感じを受ける。
個人的には、普通にHSpecを使うかなぁ。
行列計算のhmatrixは、一通りの行列計算を
カバーしているらしい
(あまりマニアックなのはないのかもしれないが、
自分はそれが気になるレベルではないので)。
Fortranの数値計算ライブラリBLASとLAPACKを
呼び出して使っているので、かなり速い。
相当枯れた実績ある外部ライブラリなので、
Haskellだから遅いということはまずない。
Haskellだと演算子が簡単に定義できるのと、
型クラスのおかげで型の違うものも自然に計算できて、
コードがかなりすっきりする。
たとえば、matlabなどのように、普通の+演算子で
ベクトルどうしや、スカラと行列を足し算できる。
ベクトルで、dotで内積やcrossで外積を計算するのも簡単。