
On Oct 27, 2005, at 5:34 PM, Sebastian Sylvan wrote:
import Data.Word import Test.QuickCheck
instance Arbitrary Word32 where arbitrary = do let mx,mn :: Integer mx = fromIntegral (maxBound :: Word32) mn = fromIntegral (minBound :: Word32) c <- choose (mx, mn) return (fromIntegral c)
Awesome! This actually works!
instance Arbitrary Word32 where arbitrary = do c <- arbitrary :: Gen Integer return (fromIntegral c)
Though I'm not sure of the range and distribution of the generated Word32's (since it would depend on how fromIntegral behaves transforming an Integer to a Word32 when the Integer is larger than maxBound::Word32).
It wraps around, apparently *Foo> maxBound :: Word32 4294967295 *Foo> let x :: Integer = 4294967295 + 1 *Foo> x 4294967296 *Foo> fromIntegral x :: Word32 0 *Foo> let x :: Integer = 4294967295 + 10 *Foo> x 4294967305 *Foo> fromIntegral x :: Word32 9 *Foo> let x :: Integer = 4294967295 * 2 *Foo> x 8589934590 *Foo> fromIntegral x :: Word32 4294967294 Thanks, Joel -- http://wagerlabs.com/