I'm trying to test some properties with quickcheck. If these tests fail,
they will almost certainly fail by nontermination.
I've been using the 'within' function to catch these nontermination cases.
However, I was surprised to find that this doesn't always work.
'within' uses the 'timeout' function under the hood. Here is an example that
demonstrates the problem:

import System.Timeout
import Control.Exception

works :: Int -> Int
works x = sum $ cycle [x]

doesntWork :: Int -> Int
doesntWork x = last $ cycle [x]

test1 = timeout 1 $ evaluate $ works 5 == 5            -- terminates
test2 = timeout 1 $ evaluate $ doesntWork 5 == 5   -- never terminates


test1 returns Nothing as expected, but test2 never terminates. Why?

I thought timeout exceptions are supposed to always work with pure (non FFI)
Haskell code.
Is there any way I can work around this?

I'm using ghc 6.12.2

Thanks,

- Job
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to