
Excerpts from Xavier Shay's message of Tue Feb 22 05:59:12 -0500 2011:
Given the following contrived function:
giveMeThree x | x == 3 = True
How do I test with HUnit that 2 is invalid input?
giveMeThreeTests = [ "Likes 3" ~: True ~=? giveMeThree 3 , "Dislikes 2" ~: ..... -- what? ]
I couldn't find anything mentioned in the HUnit user guide. References to appropriate documentation appreciated.
On 23/02/11 1:31 AM, Edward Z. Yang wrote:
A partial function will emit an exception, which must be caught from IO. I'm sure HUnit has an appropriate mechanism for handling this, but I strongly suggest you redesign your function to be total: instead of omitting pattern matches, change it to use Maybe and return Nothing in the 'otherwise' case.
In this case, the inputs I am giving to the function are totally invalid - they should never occur in a running app. For context, the function takes a state, applies a transition, and returns the new state. There are certain invalid transitions. In other languages I would throw an ArgumentError or similar ... would the Haskell way be to return Nothing instead? To me this seems to be complicating my types (Maybe instead of a vanilla type) for a benefit that I don't see. What are the benefits to using Maybe in this case rather than throwing an exception? Cheers, Xavier