function の HUnit テストを書いていますeval :: Wff -> Assignment -> Maybe Bool
。Wff
ブール式の単純化されたサブセットの抽象解析ツリーであるカスタム データ型です。
data Wff = Var Name
| Not Wff
| Or Wff Wff
deriving (Eq)
およびAssignment
は、 a の各変数にブール値を与える連想リストの型エイリアスですWff
。
type Assignment = [(Name, Bool)]
私の現在のテストは次のようになります。
testEval :: Test
testEval = "Test eval"
~: TestList $ zipWith (\e (Just a) -> e ~=? a) expected (eval wff <$> assignments)
where expected = [True, False]
assignments = [[('p', True)], [('p', False)]]
Right wff = parse wffStr
wffStr = "p"
構築された両方のテストに合格します。ただし、このテストはあまり堅牢ではありません。のより複雑な値を変更してタイプミスをすると、 が aではなくa を返すためwffStr
、パターンRight wff
は失敗します。これにより、テストの実行が中止され、いくつかの悪いテストで失敗し、残りの実際の結果が得られます。現在の構造を変更して、エラーが伝播し、すべてを中止するのではなく、テストが失敗するようにするにはどうすればよいですか?parse
Left String
Rigth Wff