Revision 619b12df test/hs/Test/Ganeti/Locking/Allocation.hs
b/test/hs/Test/Ganeti/Locking/Allocation.hs  

39  39  
40  40 
import Ganeti.BasicTypes 
41  41 
import Ganeti.Locking.Allocation 
42 
import Ganeti.Locking.Types 

42  43  
43  44 
{ 
44  45  
...  ...  
52  53 
data TestOwner = TestOwner Int deriving (Ord, Eq, Show) 
53  54  
54  55 
instance Arbitrary TestOwner where 
55 
arbitrary = TestOwner <$> choose (0, 7)


56 
arbitrary = TestOwner <$> choose (0, 2)


56  57  
57 
data TestLock = TestLock Int deriving (Ord, Eq, Show) 

58 
data TestLock = TestBigLock 

59 
 TestCollectionLockA 

60 
 TestLockA Int 

61 
 TestCollectionLockB 

62 
 TestLockB Int 

63 
deriving (Ord, Eq, Show) 

58  64  
59  65 
instance Arbitrary TestLock where 
60 
arbitrary = TestLock <$> choose (0, 7) 

61  
66 
arbitrary = frequency [ (1, elements [ TestBigLock 

67 
, TestCollectionLockA 

68 
, TestCollectionLockB 

69 
]) 

70 
, (2, TestLockA <$> choose (0, 2)) 

71 
, (2, TestLockB <$> choose (0, 2)) 

72 
] 

73  
74 
instance Lock TestLock where 

75 
lockImplications (TestLockA _) = [TestCollectionLockA, TestBigLock] 

76 
lockImplications (TestLockB _) = [TestCollectionLockB, TestBigLock] 

77 
lockImplications TestBigLock = [] 

78 
lockImplications _ = [TestBigLock] 

62  79  
63  80 
{ 
64  81  
...  ...  
79  96 
instance (Arbitrary a, Arbitrary b) => Arbitrary (UpdateRequest a b) where 
80  97 
arbitrary = UpdateRequest <$> arbitrary <*> arbitrary 
81  98  
82 
  Fold a sequence of update requests; all allocationscan be obtained in 

99 
  Fold a sequence of update requests; all allocations can be obtained in


83  100 
 this way, starting from the empty allocation. 
84 
foldUpdates :: (Ord a, Ord b, Show b)


85 
=> LockAllocation b a > [UpdateRequest a b] > LockAllocation b a


101 
foldUpdates :: (Lock a, Ord b, Show b)


102 
=> LockAllocation a b > [UpdateRequest b a] > LockAllocation a b


86  103 
foldUpdates = foldl (\s (UpdateRequest owner updates) > 
87  104 
fst $ updateLocks owner updates s) 
88  105  
89 
instance (Arbitrary a, Arbitrary b, Ord a, Ord b, Show a, Show b)


106 
instance (Arbitrary a, Lock a, Arbitrary b, Ord b, Show b)


90  107 
=> Arbitrary (LockAllocation a b) where 
91  108 
arbitrary = foldUpdates emptyAllocation <$> arbitrary 
92  109 
Also available in: Unified diff