[Haskell-cafe] class Arbitrary in quickcheck

2010-05-05 Thread Tim Docker
I've notice a behaviour of quickcheck that is unexpected to me. With
this code:

import Test.QuickCheck

main = check myconfig 
 ((\v - v == v) :: (Maybe Double,Maybe Double) - Bool)

myconfig = defaultConfig{configMaxTest=10,
 configEvery = \n args - show n ++ :\n
  ++ unlines args}

I am relying on the default Arbitrary instances to generate pairs of
maybe doubles. But to my surprise, all of the pairs have these patterns:

(Just _ Just _)
(Nothing, Nothing)

I never see patterns:

(Just _, Nothing)
(Nothing, Just _)

Why is this the case?

Thanks,

Tim






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


Re: [Haskell-cafe] class Arbitrary in quickcheck

2010-05-05 Thread Ozgur Akgun
your quick check property (in a different way of writing) is the following:

prop_1 :: Maybe Double - Bool
prop_1 v = v == v

but what you want is actually the following:

prop_2 :: Maybe Double - Maybe Double - Bool
prop_2 v1 v2 = v2 == v2

if I understood the problem correctly, using prop_2 should solve it. just
run 
verboseCheckhttp://hackage.haskell.org/packages/archive/QuickCheck/1.1.0.0/doc/html/Test-QuickCheck.html#v:verboseCheckon
these two and observe the results.

Best,



On 5 May 2010 08:47, Tim Docker t...@dockerz.net wrote:

 I've notice a behaviour of quickcheck that is unexpected to me. With
 this code:

 import Test.QuickCheck

 main = check myconfig
 ((\v - v == v) :: (Maybe Double,Maybe Double) - Bool)

 myconfig = defaultConfig{configMaxTest=10,
 configEvery = \n args - show n ++ :\n
  ++ unlines args}

 I am relying on the default Arbitrary instances to generate pairs of
 maybe doubles. But to my surprise, all of the pairs have these patterns:

(Just _ Just _)
(Nothing, Nothing)

 I never see patterns:

(Just _, Nothing)
(Nothing, Just _)

 Why is this the case?

 Thanks,

 Tim






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




-- 
Ozgur Akgun
___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe


Re: [Haskell-cafe] class Arbitrary in quickcheck

2010-05-05 Thread Ozgur Akgun
There is a typo, in my previous post, It should have been: prop_2 v1 v2 = v1
== v2
not: prop_2 v1 v2 = v2 == v2

Moreover, I realised that the (nice) function verboseCheck doesn't exist in
QuickCheck 2. However you can always do the following in ghci, to see
whether my suggestion works or not:

sample (arbitrary :: Gen (Maybe Double, Maybe Double) )


On 5 May 2010 09:01, Ozgur Akgun ozgurak...@gmail.com wrote:

 your quick check property (in a different way of writing) is the following:

 prop_1 :: Maybe Double - Bool
 prop_1 v = v == v

 but what you want is actually the following:

 prop_2 :: Maybe Double - Maybe Double - Bool
 prop_2 v1 v2 = v2 == v2

 if I understood the problem correctly, using prop_2 should solve it. just
 run 
 verboseCheckhttp://hackage.haskell.org/packages/archive/QuickCheck/1.1.0.0/doc/html/Test-QuickCheck.html#v:verboseCheckon
  these two and observe the results.

 Best,




 On 5 May 2010 08:47, Tim Docker t...@dockerz.net wrote:

 I've notice a behaviour of quickcheck that is unexpected to me. With
 this code:

 import Test.QuickCheck

 main = check myconfig
 ((\v - v == v) :: (Maybe Double,Maybe Double) - Bool)

 myconfig = defaultConfig{configMaxTest=10,
 configEvery = \n args - show n ++ :\n
  ++ unlines args}

 I am relying on the default Arbitrary instances to generate pairs of
 maybe doubles. But to my surprise, all of the pairs have these patterns:

(Just _ Just _)
(Nothing, Nothing)

 I never see patterns:

(Just _, Nothing)
(Nothing, Just _)

 Why is this the case?

 Thanks,

 Tim






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




 --
 Ozgur Akgun




-- 
Ozgur Akgun
___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe


Re: [Haskell-cafe] class Arbitrary in quickcheck

2010-05-05 Thread Tim Docker
On 5 May 2010 09:01, Ozgur Akgun ozgurak...@gmail.com wrote:
 your quick check property (in a different way of writing) is
 the following:
 
 prop_1 :: Maybe Double - Bool
 prop_1 v = v == v

I think you misunderstood me. The property was fabricated just for  
the example.

My question was why, when I generate random values for (Maybe t, Maybe  
t) using the Arbitrary type class, do I always see two Nothing values  
or two Just values, and never one of each?

Tim


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


Re: [Haskell-cafe] class Arbitrary in quickcheck

2010-05-05 Thread Ozgur Akgun
On 5 May 2010 11:38, Tim Docker t...@dockerz.net wrote:

 On 5 May 2010 09:01, Ozgur Akgun ozgurak...@gmail.com wrote:
  your quick check property (in a different way of writing) is
  the following:
 
  prop_1 :: Maybe Double - Bool
  prop_1 v = v == v

 I think you misunderstood me. The property was fabricated just for
 the example.


OK that's possible :)



 My question was why, when I generate random values for (Maybe t, Maybe
 t) using the Arbitrary type class, do I always see two Nothing values
 or two Just values, and never one of each?


Let me try to understand you then. What happens when you run the following
command in ghci?

sample (arbitrary :: Gen (Maybe Int, Maybe Int) )

Do you still always get (Just _, Just _) or (Nothing, Nothing) pairs, or do
you also get some (Nothing, Just _) or (Just _, Nothing) pairs?

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