Salut,

Pour ceux qui s'en souviennent, j'ai écrit une petite librairie pour calculer les points d'une main de cribbage. J'aimerais utiliser QuickCheck pour faire des vérifications, mais j'ai des petits ennuis dû en grande partie à ma "newbieness".

Pour commencer, voici mes déclarations de types:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
 
data Suit = Clubs | Diamond | Heart | Spade
   deriving (Show, Eq)
 
data Rank = Ace
          | Two
          | Three
          | Four
          | Five
          | Six
          | Seven
          | Eight
          | Nine
          | Ten
          | Jack
          | Queen
          | King
   deriving (Show, Eq, Enum)
 
type Card    = (Rank, Suit)
type Hand    = [Card]
type Starter = Maybe Card
Maintenant, voici mes déclarations d'instances d'Arbitrary:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 
newtype CribbageHand = CribbageHand Hand
    deriving (Show)
 
instance Arbitrary Suit where
    arbitrary = do
        suit <- oneof $ map return [Clubs, Diamond, Heart, Spade]
        return suit
 
instance Arbitrary Rank where
    arbitrary = do
        n <- choose (0, 12)
        return (toEnum n)
 
instance Arbitrary CribbageHand where
    arbitrary = do
        cards <- vector 5::Gen [Card]
        return $ CribbageHand cards
Première chose, si vous voyez des problèmes avec ces déclarations, dites-le moi. Ces déclarations semble fonctionner, car j'ai pu écrire quelques propriétés et les exécuter. J'aimerais avoir un peu plus de contrôle sur la distribution des cartes:

  • Je voudrais pouvoir choisir que des cartes différentes
  • Pour tester la flush, j'aimerais pouvoir choisir la couleur des cartes
  • Pour tester le point avec le valet, j'aimerais pouvoir m'assurer qu'il y a un valet dans le jeu
  • Etc.


Si vous pouviez me donner des indications sur comment arriver à ces buts, j'apprécierais énormément.

Merci.