packages feed

shaker-0.4: testsuite/tests/Shaker/Properties.hs

module Shaker.Properties
 where 

import Control.Monad
import Test.QuickCheck 
import Shaker.Type
import System.Time
import Shaker.Reflexivite

instance Arbitrary TimeDiff where
   arbitrary =  TimeDiff `liftM` genSmallNumber
			 `ap` genSmallNumber 
			 `ap` genSmallNumber 
			 `ap` genSmallNumber 
			 `ap` genSmallNumber 
			 `ap` genSmallNumber 
			 `ap` elements [1..10] 

instance Arbitrary ClockTime where
   arbitrary = TOD `liftM` elements [1..1000]
		   `ap` elements [1..1000]

instance Arbitrary FileListenInfo where 
   arbitrary = do
     gen_dir <- elements ["src","testsuite"]
     sizeIgnore <- genSmallNumber
     gen_ignore <- vectorOf sizeIgnore $ elements ["\\.$","ab"]
     gen_include <- elements [[],[".*"]]
     return $ FileListenInfo gen_dir gen_ignore gen_include

instance Arbitrary FileInfo where
   arbitrary = arbitrary >>= \cl ->
               elements [".",".."] >>= \ele ->
               return $ FileInfo ele cl

instance Arbitrary ModuleMapping where 
  arbitrary = do 
              name <- createShortName
              listHunitName <- listOf createShortName 
              listPropName <- listOf createShortName 
              return $ ModuleMapping name listHunitName listPropName

genSmallNumber :: Gen Int
genSmallNumber = elements [0..10]

createListName :: Gen [String]
createListName = do 
 sizeList <- genSmallNumber
 vectorOf sizeList createShortName

createShortName :: Gen String
createShortName = do
 sizeName <- genSmallNumber
 vectorOf sizeName letters
 where letters = elements $ '.' : ['a'..'z']