Revision 2a8efa13 htest/Test/Ganeti/TestCommon.hs
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