[Haskell-cafe] HUnit and table-driven tests

Matthew wonderzombie at gmail.com
Sun Aug 5 03:21:39 CEST 2012

I've got a function which takes in two chars, describing a playing
card and a suit. An example would be 4C or TH for a 4 of Clubs or a
Ten of Hearts. I need to be able to compare the ranks of a card (e.g.
a King is 13), so a Card is a tuple of rank and suit. The function
which parses a Card is type String -> Maybe Card.

I'm writing unit tests for this using HUnit, and ideally I'd go with a
table-driven[1] approach, where each test case is a tuple of the input
and the expected output. (Possibly I could expand this to a triple, or
simply a list, to allow for an error message for each test case.) Then
all the test function has to do is run through each case and assert as
necessary. Example: [("TH", Just (Hearts, 10)), ("XH", Nothing)].

The problem, of course, is that I've no clue how to make this work. I
still don't *quite* grok do notation well enough to understand how I
can bind a monadic value (in this case a Maybe Card), pattern match on
such as the Integer in there, and then assertEqual. I suspect I'm just
thinking about this all wrong.

Any suggestions? Thanks again!

[1]: http://code.google.com/p/go-wiki/wiki/TableDrivenTests

More information about the Haskell-Cafe mailing list