[Haskell-beginners] hunit question
Daniel Fischer
daniel.is.fischer at web.de
Tue Feb 2 16:34:54 EST 2010
Am Dienstag 02 Februar 2010 22:18:50 schrieb Joe Van Dyk:
> I have a little binary search function and am trying to write tests
> for it in hunit.
>
> The below approach doesn't compile, because I'm attempting to build a
> list of tuples of different types, which isn't working for me.
>
> What's the appropriate way to do this test?
QuickCheck, I'd say. Let that create more testcases than you could bother
to write out.
Anyway, for testing lists of different types, you'd need separate tests
(properties/assertions).
*But* you don't need that. Because the algorithm is general (works the same
way for all types in Ord), the only way it could be correct on one type but
not on another is if the Ord instance of one (or both) of the types is
incorrect.
So it's sufficient to test on [Int].
>
> http://gist.github.com/293031
>
> import Test.HUnit
> import JoeBinarySearch
> -- Note:
> -- JoeBinarySearch.binary_search :: (Ord a) => [a] -> a -> Maybe Int
>
> assertions = [
> ([1], 1, (Just 0)),
> ([1, 3], 1, (Just 0)),
> ([1, 3, 4], 4, (Just 2)),
> ([1,2,4,6,8,9,12,15,17,20], 17, (Just 8)),
> ([1,2,4,6,8,9,12,15,17,20], 20, (Just 9)),
> ("hello", 'l', (Just 2)), -- BOOM
> ([0.0, 1.5, 3.0], 3.0, (Just 2)),
> ([], 1, Nothing),
> ([1,3], 2, Nothing),
> ([1,4,6,8,9,12,15,17,20], 2, Nothing),
> ([1,4,6,8,9,12,15,17,20], 100, Nothing),
> ([1,4,6,8,9,12,15,17,20], (-100), Nothing)]
>
> test_list = TestList test_cases
> where
> test_cases = map test_func assertions
> test_func (lst, input, expected) = TestCase $ assert_equal' (
> binary_search lst input ) expected
> assert_equal' = assertEqual "should equal"
>
> main :: IO ()
> main = do
> runTestTT test_list
> print "DONE"
More information about the Beginners
mailing list