From c406aceea233560330001e9a64bc0f35723962cf Mon Sep 17 00:00:00 2001 From: Dale Wijnand Date: Tue, 11 Oct 2022 14:00:01 +0100 Subject: [PATCH] Add fixed GADT exhaustivity test cases --- tests/pos/i7424.scala | 12 ++++++++++++ tests/pos/i7424b.scala | 12 ++++++++++++ tests/pos/i7424c.scala | 8 ++++++++ 3 files changed, 32 insertions(+) create mode 100644 tests/pos/i7424.scala create mode 100644 tests/pos/i7424b.scala create mode 100644 tests/pos/i7424c.scala diff --git a/tests/pos/i7424.scala b/tests/pos/i7424.scala new file mode 100644 index 000000000000..33987610519e --- /dev/null +++ b/tests/pos/i7424.scala @@ -0,0 +1,12 @@ +// scalac: -Werror +object GADT { + import =:=._ + + enum =:=[A, B] { + case Refl[C]() extends (C =:= C) + } + + def unwrap[A,B](opt: Option[A])(using ev: A =:= Option[B]): Option[B] = ev match { + case Refl() => opt.flatMap(identity[Option[B]]) + } +} diff --git a/tests/pos/i7424b.scala b/tests/pos/i7424b.scala new file mode 100644 index 000000000000..5fdf878a2330 --- /dev/null +++ b/tests/pos/i7424b.scala @@ -0,0 +1,12 @@ +// scalac: -Werror +object GADT { + import =:=._ + + enum =:=[A, B] { + case Refl[C]() extends (C =:= C) + } + + def unwrap[A,B](opt: Option[A])(using ev: A =:= Option[B]): Option[B] = ev match { + case _: Refl[?] => opt.flatMap(identity[Option[B]]) + } +} diff --git a/tests/pos/i7424c.scala b/tests/pos/i7424c.scala new file mode 100644 index 000000000000..e27b17964253 --- /dev/null +++ b/tests/pos/i7424c.scala @@ -0,0 +1,8 @@ +// scalac: -Werror +object Main extends App: + enum Extends[A, B]: + case Ev[B, A <: B]() extends (A Extends B) + + def cast(a: A): B = this match { + case Extends.Ev() => a + }