1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73
|
class TestSealedExhaustive { // compile only
sealed class Foo
case class Bar(x:Int) extends Foo
case object Baz extends Foo
def ma1(x:Foo) = x match {
case Bar(_) => // not exhaustive
}
def ma2(x:Foo) = x match {
case Baz => // not exhaustive
}
sealed class Mult
case class Kult(s:Mult) extends Mult
case class Qult() extends Mult
def ma33(x:Kult) = x match { // exhaustive
case Kult(_) => // exhaustive
}
def ma3(x:Mult) = (x,x) match { // not exhaustive
case (Kult(_), Qult()) => // Kult missing
//case Pair(Kult(_), Kult(_)) =>
case (Qult(), Kult(_)) => // Qult missing
//case Pair(Qult(), Qult()) =>
}
def ma3u(x:Mult) = ((x,x) : @unchecked) match { // not exhaustive, but not checked!
case (Kult(_), Qult()) =>
case (Qult(), Kult(_)) =>
}
sealed class Deep
case object Ga extends Deep
sealed class Gp extends Deep
case object Gu extends Gp
def zma3(x:Deep) = x match { // exhaustive!
case _ =>
}
def zma4(x:Deep) = x match { // exhaustive!
case Ga =>
case _ =>
}
def ma4(x:Deep) = x match { // missing cases: Gu, Gp
case Ga =>
}
def ma5(x:Deep) = x match { // Gp
case Gu =>
case _ if 1 == 0 =>
case Ga =>
}
def ma6 = List(1,2) match { // give up
case List(1,2) =>
case x :: xs =>
}
def ma7 = List(1,2) match { //exhaustive
case 1::2::Nil =>
case _ =>
}
def redundant = 1 match { // include this otherwise script won't test this in files/neg
case 1 =>
case 1 =>
}
}
|