[Haskell-beginners] hunit question
Daniel Fischer
daniel.is.fischer at web.de
Tue Feb 2 17:37:18 EST 2010
Am Dienstag 02 Februar 2010 23:03:48 schrieb Daniel Fischer:
> Am Dienstag 02 Februar 2010 22:46:20 schrieb Joe Van Dyk:
> >
> > Any chance anyone can show me how to write a QuickCheck test for this?
> >
> > Joe
>
> prop_binary_search :: Int -> [Int] -> Bool
> prop_binary_search x xs =
> let ys = sort xs
> in binary_search x ys == elemIndex x ys
>
>
> ghci> quickCheck prop_binary_search
> +++ OK, passed 100 tests.
Ah, but:
ghci> quickCheckWith (stdArgs { maxSuccess = 10000, maxDiscard = 1000,
maxSize = 2000 }) prop_binary_search
*** Failed! Falsifiable (after 8007 tests and 3 shrinks):
-1
[-1,-1]
Okay, does that mean my function is wrong?
In this case, no, my test was wrong.
I intended binary_search to be used only on *strictly* ascending lists, so
change the test to
import Data.IntSet (fromList, toAscList)
prop_binary_search :: Int -> [Int] -> Bool
prop_binary_search x xs = let ys = toAscList (fromList xs)
in binary_search x ys == elemIndex x ys
Now:
ghci> quickCheckWith (stdArgs { maxSuccess = 10000, maxDiscard = 1000,
maxSize = 2000 }) prop_binary_search
+++ OK, passed 10000 tests.
or perhaps a different test:
prop_binary_search_2 :: Int -> [Int] -> Bool
prop_binary_search_2 x xs =
let ys = sort xs
in case binary_search x ys of
Nothing -> x `notElem` ys
Just k -> x == ys !! k
More information about the Beginners
mailing list