2015-10-27 19 views
11

Próbuję generować losowe dane za pomocą Scalacheck. Mam hierarchię klas przypadków z wieloma właściwościami. Jedyny sposób, jaki znalazłem do wypełnienia klas przypadków, to:Generator liczb losowych skalowalnych case klasy

case class Data(a: String, 
       b: String, 
       c: String) 

val genLigneDecompte: Gen[Data] = for { 
    ag <- Gen.alphaStr 
    bg <- Gen.alphaStr 
    cg <- Gen.alphaStr 
} yield Data(
    a = ag, 
    b = bg, 
    c = cg 
) 

Dla klasy przypadków z 10-20 właściwościami jest to dość nudne. Zastanawiam się, czy był jakiś sposób, aby to zautomatyzować ...

Odpowiedz

10

Jestem pewny, że ktoś wymyśli rozwiązanie, które wykracza ponad arność przy użyciu shapeless. Ale istnieją pewne metody pomocnika do generowania Gen [T] instancje z funkcji zmieniającej liczbę operandów, które mogą być stosowane w sposobie zastosowania obiektu towarzyszącego klasy przypadek

case class Data(a: String, b: String, c: String) 

val dataArb = Arbitrary(Gen.resultOf(Data)) 
// equivalent to 
// val f: (String, String, String) => Data = Data.apply 
// val gen: Gen[Data] = Gen.resultOf(f) 
// val arb: Arbitrary[Data] = Arbitrary(gen) 
+0

Jestem zaskoczony, że libra bez Shapeless już nie istnieje – wheaties

+0

Okazuje się, że istnieją już pewne metody pomocnicze w Gen. –

+0

Dzięki, tego właśnie szukałem! – KaC

Powiązane problemy