Revision 2a8efa13

b/htest/Test/Ganeti/TestCommon.hs
29 29
import Control.Exception (catchJust)
30 30
import Control.Monad
31 31
import Data.List
32
import qualified Test.HUnit as HUnit
33
import Test.QuickCheck
34
import Test.QuickCheck.Monadic
35
import qualified Text.JSON as J
32
import qualified Data.Set as Set
36 33
import System.Environment (getEnv)
37 34
import System.Exit (ExitCode(..))
38 35
import System.IO.Error (isDoesNotExistError)
39 36
import System.Process (readProcessWithExitCode)
37
import qualified Test.HUnit as HUnit
38
import Test.QuickCheck
39
import Test.QuickCheck.Monadic
40
import qualified Text.JSON as J
40 41

  
41 42
import qualified Ganeti.BasicTypes as BasicTypes
42 43

  
......
196 197
instance Arbitrary SmallRatio where
197 198
  arbitrary = liftM SmallRatio $ choose (0, 1)
198 199

  
200
-- | Helper for 'genSet', declared separately due to type constraints.
201
genSetHelper :: (Ord a) => [a] -> Maybe Int -> Gen (Set.Set a)
202
genSetHelper candidates size = do
203
  size' <- case size of
204
             Nothing -> choose (0, length candidates)
205
             Just s | s > length candidates ->
206
                        error $ "Invalid size " ++ show s ++ ", maximum is " ++
207
                                show (length candidates)
208
                    | otherwise -> return s
209
  foldM (\set _ -> do
210
           newelem <- elements candidates `suchThat` (`Set.notMember` set)
211
           return (Set.insert newelem set)) Set.empty [1..size']
212

  
213
-- | Generates a set of arbitrary elements.
214
genSet :: (Ord a, Bounded a, Enum a) => Maybe Int -> Gen (Set.Set a)
215
genSet = genSetHelper [minBound..maxBound]
216

  
217
-- * Helper functions
218

  
199 219
-- | Checks for serialisation idempotence.
200 220
testSerialisation :: (Eq a, Show a, J.JSON a) => a -> Property
201 221
testSerialisation a =

Also available in: Unified diff