Je veux générer une liste d'entiers correspondant à une liste de générateurs dans pour le Ceci fonctionne, mais je ne veux pas utiliser des tuples depuis la liste des générateurs ( Je veux utiliser le générateur de la liste ( Ceci ressemble à un problème de jouet, mais c'est
le mieux que je puisse faire pour créer un extrait autonome reproduisant le problème réel que je suis
face. p> p> scalacheck code>. GENS code>, Je souhaite créer un générateur listgen code> dont l'échantillon valide peut être Liste (2, 2000, 0, 6) code>.
Voici ma première tentative d'utilisation des tuples. P> Gens Code>) est créé de manière dynamique
et la taille de la liste n'est pas corrigée. Existe-t-il un moyen de le faire avec des listes? P> listgen code>) dans Scalacheck Forall code> Vérification de la propriété. < / p>
4 Réponses :
Edit: S'il vous plaît ignorer, cela ne répond pas à la question de l'Asker Je ne peux pas commenter les messages encore, alors je vais devoir vous aventurer ici. Je présume que la fonction "échantillon" s'applique aux générateurs p> une raison pour laquelle vous ne pouvez pas faire: p>
Je ne veux pas créer des échantillons manuellement. Il sera fait par scalacheck code> lorsque j'utilise le générateur comme Forall (listgen) {list =>
Ah désolé pour ça, n'a pas réalisé que Scalacheck crée les échantillons
Que diriez-vous d'utiliser la méthode code> code>? Il transforme un itérable [gen [t]] code> dans un gen [c [t]] code>, où c code> peut être liste < / code>:
Fonctionne bien! J'ai dû expliquer explicitement l'argument implicite en raison de l'ambiguïté avec une autre méthode. Val ListGen = Gen.Suence (Gens) (Util.Buildable.Buildablise) Code>
Pour une réponse plus théorique: la méthode que vous souhaitez est il se comporte comme Traverse CODE>, qui est équivalente à la séquence Composez la carte code> Bien que cela puisse être plus efficace. Il est de la forme générale: cartographique code> mais vous permet de transporter une structure d'application code> supplémentaire code> pendant la traversée, le séquençant le long du chemin. p> p>
Il suffit d'utiliser Exemple de travail complet: P> gen.Unence code>, mais faites attention à ce qu'il tentera de renvoyer un java.util.arraylist [t] code> si vous ne le paramétriez pas complètement ( Bug ). def genIntList(): Gen[List[Int]] = {
val gens = List(Gen.chooseNum(1, 2), Gen.chooseNum(3, 4))
Gen.sequence[List[Int], Int](gens)
}
println(genIntList.sample.get) // prints: List(1,4)