Don't like ads? PRO users don't see any ads ;-)
Guest

Untitled

By: a guest on May 28th, 2012  |  syntax: None  |  size: 1.67 KB  |  hits: 14  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. {-# LANGUAGE ScopedTypeVariables, RankNTypes #-}
  2.  
  3. import ModP
  4.  
  5. import Test.QuickCheck
  6. import Test.Framework
  7. import Test.Framework.Providers.QuickCheck2
  8. import Data.Int (Int64)
  9.  
  10. main = defaultMain tests
  11.  
  12. testOptions = TestOptions { topt_seed = Nothing
  13.                           , topt_maximum_generated_tests = Just 10000
  14.                           , topt_maximum_unsuitable_generated_tests = Just 100000
  15.                           , topt_timeout = Nothing
  16.                           }
  17.  
  18. tests = [ plusTestOptions testOptions $ testGroup "basics"
  19.           [ testProperty "add" prop_add
  20.           , testProperty "sub" prop_sub
  21.           , testProperty "mul" prop_mul
  22.           , testProperty "pow2" prop_pow2
  23.           , testProperty "inv" prop_inv
  24.           , testProperty "int64" prop_int64
  25.           ]
  26.         ]
  27.  
  28. prop_add :: Integer -> Integer -> Positive Integer -> Bool
  29. prop_add x y (Positive n) = (fromInteger x + fromInteger y) `modP` n == (x + y) `mod` n
  30.  
  31. prop_sub :: Integer -> Integer -> Positive Integer -> Bool
  32. prop_sub x y (Positive n) = (fromInteger x - fromInteger y) `modP` n == (x - y) `mod` n
  33.  
  34. prop_mul :: Integer -> Integer -> Positive Integer -> Bool
  35. prop_mul x y (Positive n) = (fromInteger x * fromInteger y) `modP` n == (x * y) `mod` n
  36.  
  37. prop_pow2 :: Integer -> NonNegative Integer -> Positive Integer -> Bool
  38. prop_pow2 x (NonNegative y) (Positive n) = (fromInteger x ^ y) `modP` n == (x ^ y) `mod` n
  39.  
  40. prop_inv :: Integer -> Positive Integer -> Property
  41. prop_inv x (Positive n) = gcd (abs x) n == 1 && n > 1 ==> ((1 / fromInteger x) `modP` n) * x `mod` n == 1
  42.  
  43. prop_int64 :: Integer -> Bool
  44. prop_int64 n = n <= 0 || (2 ^ n) `modP` (10^9+7 :: Int64) == fromInteger ((2 ^ n) `mod` (10^9+7))