2016-07-25 11 views
2

scalacheck(バージョン1.12.2)を使用して任意のUUIDのリストを生成しようとしています。何らかの理由で、生成されたリストのすべてのUUIDが同じです。これは、List [String]やList [Int]などの他の型の場合には当てはまりません。Scalacheckは常にList [UUID]の任意のUUIDを生成します

import org.scalacheck.Arbitrary.arbitrary 
import org.scalacheck.Arbitrary 
import java.util.UUID 

case class SomeUUIDClass(field: List[UUID]) 
case class SomeOtherClass(field: List[Int]) 

object Arb { 
    implicit def arbUUID: Arbitrary[UUID] = Arbitrary { 
     UUID.randomUUID() 
    } 

    implicit def arbUUIDClass = Arbitrary { 
     for { 
      field <- arbitrary[List[UUID]] 
     } yield SomeUUIDClass(field) 
    } 

    implicit def arbOtherClass = Arbitrary { 
     for { 
      field <- arbitrary[List[Int]] 
     } yield SomeOtherClass(field) 
    } 

    def main(args: Array[String]) { 
     println("without uuids:") 
     arbitrary[SomeOtherClass].sample.get.field.foreach(println(_)) 
     println("") 

     println("with uuids:") 
     arbitrary[SomeUUIDClass].sample.get.field.foreach(println(_)) 
    } 
} 

とサンプルを実行します:

without uuids: 
-1 
0 
2147483647 
-1 
-2147483648 
527079214 
-698179980 
1192016877 
-1001957700 
0 
682853458 
-1 
-2147483648 
109314552 
1130736291 
1080418 
1771214863 
1164874892 
-1306566270 
2147483647 
-2009106057 
2147483647 
-2147483648 
-1 
-1 
-1 
945958506 
777623735 
-490377345 
-272177229 
0 
-2147483648 
-1753697474 
-1 
736327057 
415072340 
0 

with uuids: 
a49540b4-29ce-464f-946d-3649f38fb8a6 
a49540b4-29ce-464f-946d-3649f38fb8a6 
a49540b4-29ce-464f-946d-3649f38fb8a6 
a49540b4-29ce-464f-946d-3649f38fb8a6 
a49540b4-29ce-464f-946d-3649f38fb8a6 
a49540b4-29ce-464f-946d-3649f38fb8a6 
a49540b4-29ce-464f-946d-3649f38fb8a6 
a49540b4-29ce-464f-946d-3649f38fb8a6 
a49540b4-29ce-464f-946d-3649f38fb8a6 

答えて

2

使用Gen.wrapを()し、それが動作するはずここで私が書いたコードです。

だからあなたのサンプルコードの最初の暗黙的に、あなたはそれを変更します

import org.scalacheck.Gen 

implicit def arbUUID: Arbitrary[UUID] = Arbitrary { 
    Gen.wrap(UUID.randomUUID) 
} 
+0

ありがとう!それはそれを修正した。 – emccorson

関連する問題