Open
Description
A java.lang.ClassCastException
is raised when projecting a sample Coproduct
obtained through a scalacheck Arbitrary
. Example:
import iota.{ Cop, TNil }
import iota.TList.::
import iota.scalacheck._
import org.scalacheck.{ Arbitrary, Gen }
object IotaScalacheck {
object Monday
object Tuesday
object Wednesday
object Thursday
object Friday
type Weekday = Cop[
Monday.type ::
Tuesday.type ::
Wednesday.type ::
Thursday.type ::
Friday.type ::
TNil
]
implicit val arbMonday = Arbitrary(Gen.const(Monday))
implicit val arbTuesday = Arbitrary(Gen.const(Tuesday))
implicit val arbWednesday = Arbitrary(Gen.const(Wednesday))
implicit val arbThursday = Arbitrary(Gen.const(Thursday))
implicit val arbFriday = Arbitrary(Gen.const(Friday))
def main(args: Array[String]): Unit = {
val weekday: Weekday = implicitly[Arbitrary[Weekday]].arbitrary.sample.get
val MondayInject = Cop.Inject[Monday.type, Weekday]
val TuesdayInject = Cop.Inject[Tuesday.type, Weekday]
val WednesdayInject = Cop.Inject[Wednesday.type, Weekday]
val ThursdayInject = Cop.Inject[Thursday.type, Weekday]
val FridayInject = Cop.Inject[Friday.type, Weekday]
weekday match { // runtime error! java.lang.ClassCastException: org.scalacheck.ArbitraryLowPriority$$anon$1 cannot be cast to IotaScalacheck$Thursday$
case MondayInject(day) => println(day)
case TuesdayInject(day) => println(day)
case WednesdayInject(day) => println(day)
case ThursdayInject(day) => println(day)
case MondayInject(day) => println(day)
case FridayInject(day) => println(day)
}
}
}
Metadata
Metadata
Assignees
Labels
No labels