Guest User

Untitled

a guest
May 28th, 2012
41
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.67 KB | None | 0 0
  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))
Advertisement
Add Comment
Please, Sign In to add comment