diff --git a/tests/pending/tuple-cons.scala b/tests/pending/tuple-cons.scala new file mode 100644 index 000000000000..18225a640594 --- /dev/null +++ b/tests/pending/tuple-cons.scala @@ -0,0 +1,182 @@ +import dotty._ + +object Test { + def main(args: Array[String]) = { + val t1: *:[Int, *:[Int, Unit]] = (1, 2) + + val t2: *:[Int, *:[Int, *:[Int, Unit]]] = 0 *: t1 + + assert(t2.head == 0) + assert(t2.tail.head == 1) + assert(t2.tail.tail.head == 2) + + t2 match { + case e1 *: e2 *: e3 *: () => + assert(e1 == 0) + assert(e2 == 1) + assert(e3 == 2) + } + + val t3: *:[Int, *:[Int, *:[Int, *:[Int, Unit]]]] = -1 *: t2 + + assert(t3.head == -1) + assert(t3.tail.head == 0) + assert(t3.tail.tail.head == 1) + assert(t3.tail.tail.tail.head == 2) + + t3 match { + case e1 *: e2 *: e3 *: e4 *: () => + assert(e1 == -1) + assert(e2 == 0) + assert(e3 == 1) + assert(e4 == 2) + } + + type I = Int + + // 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 + val t20: *:[I,*:[I,*:[I,*:[I,*:[I,*:[I,*:[I,*:[I,*:[I,*:[I,*:[I,*:[I,*:[I,*:[I,*:[I,*:[I,*:[I,*:[I,*:[I,*:[I,Unit]]]]]]]]]]]]]]]]]]]] = 1 *: 2 *: 3 *: 4 *: 5 *: 6 *: 7 *: 8 *: 9 *: 10 *: 11 *: 12 *: 13 *: 14 *: 15 *: 16 *: 17 *: 18 *: 19 *: 20 *: () + + t20 match { + case e1 *: e2 *: e3 *: e4 *: e5 *: e6 *: e7 *: e8 *: e9 *: e10 *: e11 *: e12 *: e13 *: e14 *: e15 *: e16 *: e17 *: e18 *: e19 *: e20 *: () => + assert(e1 == 1) + assert(e2 == 2) + assert(e3 == 3) + assert(e4 == 4) + assert(e5 == 5) + assert(e6 == 6) + assert(e7 == 7) + assert(e8 == 8) + assert(e9 == 9) + assert(e10 == 10) + assert(e11 == 11) + assert(e12 == 12) + assert(e13 == 13) + assert(e14 == 14) + assert(e15 == 15) + assert(e16 == 16) + assert(e17 == 17) + assert(e18 == 18) + assert(e19 == 19) + assert(e20 == 20) + } + + // 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 + val t21: *:[I,*:[I,*:[I,*:[I,*:[I,*:[I,*:[I,*:[I,*:[I,*:[I,*:[I,*:[I,*:[I,*:[I,*:[I,*:[I,*:[I,*:[I,*:[I,*:[I,*:[I,Unit]]]]]]]]]]]]]]]]]]]]] = 21 *: t20 + + t21 match { + case e21 *: e1 *: e2 *: e3 *: e4 *: e5 *: e6 *: e7 *: e8 *: e9 *: e10 *: e11 *: e12 *: e13 *: e14 *: e15 *: e16 *: e17 *: e18 *: e19 *: e20 *: () => + assert(e1 == 1) + assert(e2 == 2) + assert(e3 == 3) + assert(e4 == 4) + assert(e5 == 5) + assert(e6 == 6) + assert(e7 == 7) + assert(e8 == 8) + assert(e9 == 9) + assert(e10 == 10) + assert(e11 == 11) + assert(e12 == 12) + assert(e13 == 13) + assert(e14 == 14) + assert(e15 == 15) + assert(e16 == 16) + assert(e17 == 17) + assert(e18 == 18) + assert(e19 == 19) + assert(e20 == 20) + assert(e21 == 21) + } + + // 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 + val t22: *:[I,*:[I,*:[I,*:[I,*:[I,*:[I,*:[I,*:[I,*:[I,*:[I,*:[I,*:[I,*:[I,*:[I,*:[I,*:[I,*:[I,*:[I,*:[I,*:[I,*:[I,*:[I,Unit]]]]]]]]]]]]]]]]]]]]]] = 22 *: t21 + + t22 match { + case e22 *: e21 *: e1 *: e2 *: e3 *: e4 *: e5 *: e6 *: e7 *: e8 *: e9 *: e10 *: e11 *: e12 *: e13 *: e14 *: e15 *: e16 *: e17 *: e18 *: e19 *: e20 *: () => + assert(e1 == 1) + assert(e2 == 2) + assert(e3 == 3) + assert(e4 == 4) + assert(e5 == 5) + assert(e6 == 6) + assert(e7 == 7) + assert(e8 == 8) + assert(e9 == 9) + assert(e10 == 10) + assert(e11 == 11) + assert(e12 == 12) + assert(e13 == 13) + assert(e14 == 14) + assert(e15 == 15) + assert(e16 == 16) + assert(e17 == 17) + assert(e18 == 18) + assert(e19 == 19) + assert(e20 == 20) + assert(e21 == 21) + assert(e22 == 22) + } + + // 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 + val t23: *:[I,*:[I,*:[I,*:[I,*:[I,*:[I,*:[I,*:[I,*:[I,*:[I,*:[I,*:[I,*:[I,*:[I,*:[I,*:[I,*:[I,*:[I,*:[I,*:[I,*:[I,*:[I,*:[I,Unit]]]]]]]]]]]]]]]]]]]]]]] = 23 *: t22 + + t23 match { + case e23 *: e22 *: e21 *: e1 *: e2 *: e3 *: e4 *: e5 *: e6 *: e7 *: e8 *: e9 *: e10 *: e11 *: e12 *: e13 *: e14 *: e15 *: e16 *: e17 *: e18 *: e19 *: e20 *: () => + assert(e1 == 1) + assert(e2 == 2) + assert(e3 == 3) + assert(e4 == 4) + assert(e5 == 5) + assert(e6 == 6) + assert(e7 == 7) + assert(e8 == 8) + assert(e9 == 9) + assert(e10 == 10) + assert(e11 == 11) + assert(e12 == 12) + assert(e13 == 13) + assert(e14 == 14) + assert(e15 == 15) + assert(e16 == 16) + assert(e17 == 17) + assert(e18 == 18) + assert(e19 == 19) + assert(e20 == 20) + assert(e21 == 21) + assert(e22 == 22) + assert(e23 == 23) + } + + // 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 + val t24: *:[I,*:[I,*:[I,*:[I,*:[I,*:[I,*:[I,*:[I,*:[I,*:[I,*:[I,*:[I,*:[I,*:[I,*:[I,*:[I,*:[I,*:[I,*:[I,*:[I,*:[I,*:[I,*:[I,*:[I,Unit]]]]]]]]]]]]]]]]]]]]]]]] = 24 *: t23 + + t24 match { + case e24 *: e23 *: e22 *: e21 *: e1 *: e2 *: e3 *: e4 *: e5 *: e6 *: e7 *: e8 *: e9 *: e10 *: e11 *: e12 *: e13 *: e14 *: e15 *: e16 *: e17 *: e18 *: e19 *: e20 *: () => + assert(e1 == 1) + assert(e2 == 2) + assert(e3 == 3) + assert(e4 == 4) + assert(e5 == 5) + assert(e6 == 6) + assert(e7 == 7) + assert(e8 == 8) + assert(e9 == 9) + assert(e10 == 10) + assert(e11 == 11) + assert(e12 == 12) + assert(e13 == 13) + assert(e14 == 14) + assert(e15 == 15) + assert(e16 == 16) + assert(e17 == 17) + assert(e18 == 18) + assert(e19 == 19) + assert(e20 == 20) + assert(e21 == 21) + assert(e22 == 22) + assert(e23 == 23) + assert(e24 == 24) + } + } +} diff --git a/tests/pending/tuple-erased.scala b/tests/pending/tuple-erased.scala new file mode 100644 index 000000000000..ebea5d30e782 --- /dev/null +++ b/tests/pending/tuple-erased.scala @@ -0,0 +1,59 @@ +object Test { + def main(args: Array[String]): Unit = { + val t02: Any = (1, 2) + val t05: Any = (1, 2, 4, 5, 6) + val t21: Any = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21) + val t22: Any = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22) + val t23: Any = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23) + val t24: Any = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24) + + assert(t02.asInstanceOf[Tuple] == t02) + assert(t05.asInstanceOf[Tuple] == t05) + assert(t21.asInstanceOf[Tuple] == t21) + assert(t22.asInstanceOf[Tuple] == t22) + assert(t23.asInstanceOf[Tuple] == t23) + assert(t24.asInstanceOf[Tuple] == t24) + + assert(t02.isInstanceOf[Tuple]) + assert(t05.isInstanceOf[Tuple]) + assert(t21.isInstanceOf[Tuple]) + assert(t22.isInstanceOf[Tuple]) + assert(t23.isInstanceOf[Tuple]) + assert(t24.isInstanceOf[Tuple]) + + assert(t02.asInstanceOf[Product] == t02) + assert(t05.asInstanceOf[Product] == t05) + assert(t21.asInstanceOf[Product] == t21) + assert(t22.asInstanceOf[Product] == t22) + assert(t23.asInstanceOf[Product] == t23) + assert(t24.asInstanceOf[Product] == t24) + + assert(t02.isInstanceOf[Product]) + assert(t05.isInstanceOf[Product]) + assert(t21.isInstanceOf[Product]) + assert(t22.isInstanceOf[Product]) + assert(t23.isInstanceOf[Product]) + assert(t24.isInstanceOf[Product]) + + assert(t02.asInstanceOf[*:[_, _]] == t02) + assert(t05.asInstanceOf[*:[_, _]] == t05) + assert(t21.asInstanceOf[*:[_, _]] == t21) + assert(t22.asInstanceOf[*:[_, _]] == t22) + assert(t23.asInstanceOf[*:[_, _]] == t23) + assert(t24.asInstanceOf[*:[_, _]] == t24) + + assert(t02.isInstanceOf[*:[_, _]]) + assert(t05.isInstanceOf[*:[_, _]]) + assert(t21.isInstanceOf[*:[_, _]]) + assert(t22.isInstanceOf[*:[_, _]]) + assert(t23.isInstanceOf[*:[_, _]]) + assert(t24.isInstanceOf[*:[_, _]]) + + val x = () + assert(x.asInstanceOf[Tuple] == x) + assert(x.asInstanceOf[Any] == x) + + val y: *:[Int, *:[String, Unit]] = (1, "s") + y: Tuple + } +} diff --git a/tests/pending/tuple-for-comprehension.scala b/tests/pending/tuple-for-comprehension.scala new file mode 100644 index 000000000000..cc2a453f103c --- /dev/null +++ b/tests/pending/tuple-for-comprehension.scala @@ -0,0 +1,140 @@ +object Test { + def main(args: Array[String]) = { + assert(Some(2) == (for { + x1 <- Some(1) + x2 = x1 + } yield x1 + x2)) + + assert(Some(3) == (for { + x1 <- Some(1) + x2 = x1 + x3 = x1 + } yield x1 + x2 + x3)) + + assert(Some(4) == (for { + x1 <- Some(1) + x2 = x1 + x3 = x1 + x4 = x1 + } yield x1 + x2 + x3 + x4)) + + assert(Some(5) == (for { + x1 <- Some(1) + x2 = x1 + x3 = x1 + x4 = x1 + x5 = x1 + } yield x1 + x2 + x3 + x4 + x5)) + + assert(Some(6) == (for { + x1 <- Some(1) + x2 = x1 + x3 = x1 + x4 = x1 + x5 = x1 + x6 = x1 + } yield x1 + x2 + x3 + x4 + x5 + x6)) + + assert(Some(21) == (for { + x1 <- Some(1) + x2 = x1 + x3 = x1 + x4 = x1 + x5 = x1 + x6 = x1 + x7 = x1 + x8 = x1 + x9 = x1 + x10 = x1 + x11 = x1 + x12 = x1 + x13 = x1 + x14 = x1 + x15 = x1 + x16 = x1 + x17 = x1 + x18 = x1 + x19 = x1 + x20 = x1 + x21 = x1 + } yield x1 + x2 + x3 + x4 + x5 + x6 + x7 + x8 + x9 + x10 + x11 + x12 + x13 + x14 + x15 + x16 + x17 + x18 + x19 + x20 + x21)) + + assert(Some(22) == (for { + x1 <- Some(1) + x2 = x1 + x3 = x1 + x4 = x1 + x5 = x1 + x6 = x1 + x7 = x1 + x8 = x1 + x9 = x1 + x10 = x1 + x11 = x1 + x12 = x1 + x13 = x1 + x14 = x1 + x15 = x1 + x16 = x1 + x17 = x1 + x18 = x1 + x19 = x1 + x20 = x1 + x21 = x1 + x22 = x1 + } yield x1 + x2 + x3 + x4 + x5 + x6 + x7 + x8 + x9 + x10 + x11 + x12 + x13 + x14 + x15 + x16 + x17 + x18 + x19 + x20 + x21 + x22)) + + assert(Some(23) == (for { + x1 <- Some(1) + x2 = x1 + x3 = x1 + x4 = x1 + x5 = x1 + x6 = x1 + x7 = x1 + x8 = x1 + x9 = x1 + x10 = x1 + x11 = x1 + x12 = x1 + x13 = x1 + x14 = x1 + x15 = x1 + x16 = x1 + x17 = x1 + x18 = x1 + x19 = x1 + x20 = x1 + x21 = x1 + x22 = x1 + x23 = x1 + } yield x1 + x2 + x3 + x4 + x5 + x6 + x7 + x8 + x9 + x10 + x11 + x12 + x13 + x14 + x15 + x16 + x17 + x18 + x19 + x20 + x21 + x22 + x23)) + + assert(Some(24) == (for { + x1 <- Some(1) + x2 = x1 + x3 = x1 + x4 = x1 + x5 = x1 + x6 = x1 + x7 = x1 + x8 = x1 + x9 = x1 + x10 = x1 + x11 = x1 + x12 = x1 + x13 = x1 + x14 = x1 + x15 = x1 + x16 = x1 + x17 = x1 + x18 = x1 + x19 = x1 + x20 = x1 + x21 = x1 + x22 = x1 + x23 = x1 + x24 = x1 + } yield x1 + x2 + x3 + x4 + x5 + x6 + x7 + x8 + x9 + x10 + x11 + x12 + x13 + x14 + x15 + x16 + x17 + x18 + x19 + x20 + x21 + x22 + x23 + x24)) + } +} diff --git a/tests/pending/tuple-patmat-extract.scala b/tests/pending/tuple-patmat-extract.scala new file mode 100644 index 000000000000..e5f420717e1b --- /dev/null +++ b/tests/pending/tuple-patmat-extract.scala @@ -0,0 +1,47 @@ +object Test { + def main(args: Array[String]): Unit = { + val Const, x = 0 + val (Const, List(`x`, _, a), b) = (0, List(0, 1337, 1), 2) + val (_, (c, _)) = (2, (3, 4)) + + assert(a == 1) + assert(b == 2) + assert(c == 3) + + val (Const, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, List(`x`, _, a21), b21) = + (0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, List(0, 1337, 1), 2) + val (_, (_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, c21, _)) = + (2, (1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 4)) + + assert(a21 == 1) + assert(b21 == 2) + assert(c21 == 3) + + val (Const, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, List(`x`, _, a22), b22) = + (0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, List(0, 1337, 1), 2) + val (_, (_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, c22, _)) = + (2, (1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 4)) + + assert(a22 == 1) + assert(b22 == 2) + assert(c22 == 3) + + val (Const, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, List(`x`, _, a23), b23) = + (0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, List(0, 1337, 1), 2) + val (_, (_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, c23, _)) = + (2, (1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 4)) + + assert(a23 == 1) + assert(b23 == 2) + assert(c23 == 3) + + val (Const, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, List(`x`, _, a24), b24) = + (0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, List(0, 1337, 1), 2) + val (_, (_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, c24, _)) = + (2, (1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 4)) + + assert(a24 == 1) + assert(b24 == 2) + assert(c24 == 3) + } +} diff --git a/tests/run/tuple-accessors.scala b/tests/run/tuple-accessors.scala new file mode 100644 index 000000000000..897b40bbcf2f --- /dev/null +++ b/tests/run/tuple-accessors.scala @@ -0,0 +1,61 @@ +import dotty._ + +case class X2[A, B](a: A, b: B) +case class X3[A, B, C](a: A, b: B, c: C) +case class X4[A, B, C, D](a: A, b: B, c: C, d: D) +case class X5[A, B, C, D, E](a: A, b: B, c: C, d: D, e: E) +case class X6[A, B, C, D, E, F](a: A, b: B, c: C, d: D, e: E, f: F) + +object Test { + def main(args: Array[String]) = { + + val x2 = X2("a", 2) + val X2(a2, b2) = x2 + + assert(a2 == "a") + assert(b2 == 2) + + val x3 = X3("a", 2, "b") + val X3(a3, b3, c3) = x3 + + assert(a3 == "a") + assert(b3 == 2) + assert(c3 == "b") + + val x4 = X4("a", 2, "b", 3) + val X4(a4, b4, c4, d4) = x4 + + assert(a4 == "a") + assert(b4 == 2) + assert(c4 == "b") + assert(d4 == 3) + + val x5 = X5("a", 2, "b", 3, "c") + val X5(a5, b5, c5, d5, e5) = x5 + + assert(a5 == "a") + assert(b5 == 2) + assert(c5 == "b") + assert(d5 == 3) + assert(e5 == "c") + + val x6 = X6("a", 2, "b", 3, "c", 4) + val X6(a6, b6, c6, d6, e6, f6) = x6 + + assert(a6 == "a") + assert(b6 == 2) + assert(c6 == "b") + assert(d6 == 3) + assert(e6 == "c") + assert(f6 == 4) + } + + def any = { + val x: Any = null + val X2(a2, b2) = x + val X3(a3, b3, c3) = x + val X4(a4, b4, c4, d4) = x + val X5(a5, b5, c5, d5, e5) = x + val X6(a6, b6, c6, d6, e6, f6) = x + } +} diff --git a/tests/run/tuple-patmat-size.scala b/tests/run/tuple-patmat-size.scala new file mode 100644 index 000000000000..66a1c5575020 --- /dev/null +++ b/tests/run/tuple-patmat-size.scala @@ -0,0 +1,154 @@ +object Test { + def main(args: Array[String]) = { + val x2 = ("a", 2) + val x3 = ("a", 2, "c") + val x4 = ("a", 2, "c", 3) + val x5 = ("a", 2, "c", 3, "e") + val x21 = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21) + val x22 = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22) + val x23 = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23) + val x24 = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24) + + (x2: Any) match { + case (a2, b2) => + assert(a2 == "a") + assert(b2 == 2) + case (a3, b3, c3) => + ??? + case _ => ??? + } + + (x2: Any) match { + case (a3, b3, c3) => + ??? + case (a2, b2) => + assert(a2 == "a") + assert(b2 == 2) + case _ => ??? + } + + (x3: Any) match { + case (a2, b2) => + ??? + case (a3, b3, c3) => + assert(a3 == "a") + assert(b3 == 2) + assert(c3 == "c") + } + + (x3: Any) match { + case (a3, b3, c3) => + assert(a3 == "a") + assert(b3 == 2) + assert(c3 == "c") + case (a2, b2) => + ??? + } + + (x4: Any) match { + case (a3, b3, c3) => + ??? + case (a4, b4, c4, d4) => + assert(a4 == "a") + assert(b4 == 2) + assert(c4 == "c") + assert(d4 == 3) + } + + (x4: Any) match { + case (a4, b4, c4, d4) => + assert(a4 == "a") + assert(b4 == 2) + assert(c4 == "c") + assert(d4 == 3) + case (a3, b3, c3) => + ??? + } + + (x5: Any) match { + case (a4, b4, c4, d4) => + ??? + case (a5, b5, c5, d5, e5) => + assert(a5 == "a") + assert(b5 == 2) + assert(c5 == "c") + assert(d5 == 3) + assert(e5 == "e") + } + + (x5: Any) match { + case (a5, b5, c5, d5, e5) => + assert(a5 == "a") + assert(b5 == 2) + assert(c5 == "c") + assert(d5 == 3) + assert(e5 == "e") + case (a4, b4, c4, d4) => + ??? + } + + (x21: Any) match { + case (e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21) => + assert(e1 == 1) + assert(e21 == 21) + case (e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20) => + ??? + } + + (x21: Any) match { + case (e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20) => + ??? + case (e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21) => + assert(e1 == 1) + assert(e21 == 21) + } + + (x22: Any) match { + case (e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22) => + assert(e1 == 1) + assert(e22 == 22) + case (e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21) => + ??? + } + + (x22: Any) match { + case (e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21) => + ??? + case (e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22) => + assert(e1 == 1) + assert(e22 == 22) + } + + (x23: Any) match { + case (e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23) => + assert(e1 == 1) + assert(e23 == 23) + case (e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22) => + ??? + } + + (x23: Any) match { + case (e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22) => + ??? + case (e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23) => + assert(e1 == 1) + assert(e23 == 23) + } + + (x24: Any) match { + case (e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24) => + assert(e1 == 1) + assert(e24 == 24) + case (e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23) => + ??? + } + + (x24: Any) match { + case (e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23) => + ??? + case (e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24) => + assert(e1 == 1) + assert(e24 == 24) + } + } +} diff --git a/tests/run/tuple-patmat.scala b/tests/run/tuple-patmat.scala new file mode 100644 index 000000000000..89e35bc0b152 --- /dev/null +++ b/tests/run/tuple-patmat.scala @@ -0,0 +1,294 @@ +case class Box(t: (String, Int, A)) +case class A(i: Int, j: Int) + +object Test { + def main(args: Array[String]) = { + val x1 = Box(("a", 2, A(3, 4))) + + x1 match { + case Box((a3, b3, A(a1, a2))) => + a3: String + b3: Int + a1: Int + a2: Int + assert(a3 == "a") + assert(b3 == 2) + assert(a1 == 3) + assert(a2 == 4) + } + + val x2 = ("a", 2) + + x2 match { + case (a2, b2) => + a2: String + b2: Int + assert(a2 == "a") + assert(b2 == 2) + } + + val x3 = ("a", 2, "c") + + x3 match { + case (a3, b3, c3) => + a3: String + b3: Int + c3: String + assert(a3 == "a") + assert(b3 == 2) + assert(c3 == "c") + } + + val x4 = ("a", 2, "c", 4) + + x4 match { + case (a4, b4, c4, d4) => + a4: String + b4: Int + c4: String + d4: Int + assert(a4 == "a") + assert(b4 == 2) + assert(c4 == "c") + assert(d4 == 4) + } + + val x5 = ("a", 2, "c", 4, "e") + + x5 match { + case (a5, b5, c5, d5, e5) => + a5: String + b5: Int + c5: String + d5: Int + e5: String + assert(a5 == "a") + assert(b5 == 2) + assert(c5 == "c") + assert(d5 == 4) + assert(e5 == "e") + } + + val x6 = ("a", 2, "c", 4, "e", 6) + + x6 match { + case (a6, b6, c6, d6, e6, f6) => + a6: String + b6: Int + c6: String + d6: Int + e6: String + f6: Int + assert(a6 == "a") + assert(b6 == 2) + assert(c6 == "c") + assert(d6 == 4) + assert(e6 == "e") + assert(f6 == 6) + } + + val x21 = ("a", 2, "c", 4, "e", 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, "21") + + x21 match { + case (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21) => + a1: String + a2: Int + a3: String + a4: Int + a5: String + a6: Int + a7: Int + a8: Int + a9: Int + a10: Int + a11: Int + a12: Int + a13: Int + a14: Int + a15: Int + a16: Int + a17: Int + a18: Int + a19: Int + a20: Int + a21: String + assert(a1 == "a") + assert(a2 == 2) + assert(a3 == "c") + assert(a4 == 4) + assert(a5 == "e") + assert(a6 == 6) + assert(a7 == 7) + assert(a8 == 8) + assert(a9 == 9) + assert(a10 == 10) + assert(a11 == 11) + assert(a12 == 12) + assert(a13 == 13) + assert(a14 == 14) + assert(a15 == 15) + assert(a16 == 16) + assert(a17 == 17) + assert(a18 == 18) + assert(a19 == 19) + assert(a20 == 20) + assert(a21 == "21") + } + + val x22 = ("a", 2, "c", 4, "e", 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, "21", 22) + + x22 match { + case (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22) => + a1: String + a2: Int + a3: String + a4: Int + a5: String + a6: Int + a7: Int + a8: Int + a9: Int + a10: Int + a11: Int + a12: Int + a13: Int + a14: Int + a15: Int + a16: Int + a17: Int + a18: Int + a19: Int + a20: Int + a21: String + a22: Int + assert(a1 == "a") + assert(a2 == 2) + assert(a3 == "c") + assert(a4 == 4) + assert(a5 == "e") + assert(a6 == 6) + assert(a7 == 7) + assert(a8 == 8) + assert(a9 == 9) + assert(a10 == 10) + assert(a11 == 11) + assert(a12 == 12) + assert(a13 == 13) + assert(a14 == 14) + assert(a15 == 15) + assert(a16 == 16) + assert(a17 == 17) + assert(a18 == 18) + assert(a19 == 19) + assert(a20 == 20) + assert(a21 == "21") + assert(a22 == 22) + } + + val x23 = ("a", 2, "c", 4, "e", 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, "21", 22, "23") + + x23 match { + case (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23) => + a1: String + a2: Int + a3: String + a4: Int + a5: String + a6: Int + a7: Int + a8: Int + a9: Int + a10: Int + a11: Int + a12: Int + a13: Int + a14: Int + a15: Int + a16: Int + a17: Int + a18: Int + a19: Int + a20: Int + a21: String + a22: Int + a23: String + assert(a1 == "a") + assert(a2 == 2) + assert(a3 == "c") + assert(a4 == 4) + assert(a5 == "e") + assert(a6 == 6) + assert(a7 == 7) + assert(a8 == 8) + assert(a9 == 9) + assert(a10 == 10) + assert(a11 == 11) + assert(a12 == 12) + assert(a13 == 13) + assert(a14 == 14) + assert(a15 == 15) + assert(a16 == 16) + assert(a17 == 17) + assert(a18 == 18) + assert(a19 == 19) + assert(a20 == 20) + assert(a21 == "21") + assert(a22 == 22) + assert(a23 == "23") + } + + val x24 = ("a", 2, "c", 4, "e", 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, "21", 22, "23", 24) + + x24 match { + case (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24) => + a1: String + a2: Int + a3: String + a4: Int + a5: String + a6: Int + a7: Int + a8: Int + a9: Int + a10: Int + a11: Int + a12: Int + a13: Int + a14: Int + a15: Int + a16: Int + a17: Int + a18: Int + a19: Int + a20: Int + a21: String + a22: Int + a23: String + a24: Int + assert(a1 == "a") + assert(a2 == 2) + assert(a3 == "c") + assert(a4 == 4) + assert(a5 == "e") + assert(a6 == 6) + assert(a7 == 7) + assert(a8 == 8) + assert(a9 == 9) + assert(a10 == 10) + assert(a11 == 11) + assert(a12 == 12) + assert(a13 == 13) + assert(a14 == 14) + assert(a15 == 15) + assert(a16 == 16) + assert(a17 == 17) + assert(a18 == 18) + assert(a19 == 19) + assert(a20 == 20) + assert(a21 == "21") + assert(a22 == 22) + assert(a23 == "23") + assert(a24 == 24) + } + } +} diff --git a/tests/run/tuple-underscore-syntax.scala b/tests/run/tuple-underscore-syntax.scala new file mode 100644 index 000000000000..497b3d0b0ae9 --- /dev/null +++ b/tests/run/tuple-underscore-syntax.scala @@ -0,0 +1,284 @@ +import dotty._ + +object Test { + def main(args: Array[String]) = { + // seq 22 | while read i; do echo -n "val t$i = ("; seq $i | xargs -i -n1 echo "_," | xargs; done + // seq 22 | while read i; do seq $i | xargs -i -n1 echo "assert(t$i._{} == {})"; done + + val t1 = Tuple1(1) + val t2 = (1, 2) + val t3 = (1, 2, 3) + val t4 = (1, 2, 3, 4) + val t5 = (1, 2, 3, 4, 5) + val t6 = (1, 2, 3, 4, 5, 6) + val t7 = (1, 2, 3, 4, 5, 6, 7) + val t8 = (1, 2, 3, 4, 5, 6, 7, 8) + val t9 = (1, 2, 3, 4, 5, 6, 7, 8, 9) + val t10 = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10) + val t11 = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11) + val t12 = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12) + val t13 = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13) + val t14 = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14) + val t15 = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15) + val t16 = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16) + val t17 = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17) + val t18 = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18) + val t19 = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19) + val t20 = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20) + val t21 = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21) + val t22 = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22) + assert(t1._1 == 1) + assert(t2._1 == 1) + assert(t2._2 == 2) + assert(t3._1 == 1) + assert(t3._2 == 2) + assert(t3._3 == 3) + assert(t4._1 == 1) + assert(t4._2 == 2) + assert(t4._3 == 3) + assert(t4._4 == 4) + assert(t5._1 == 1) + assert(t5._2 == 2) + assert(t5._3 == 3) + assert(t5._4 == 4) + assert(t5._5 == 5) + assert(t6._1 == 1) + assert(t6._2 == 2) + assert(t6._3 == 3) + assert(t6._4 == 4) + assert(t6._5 == 5) + assert(t6._6 == 6) + assert(t7._1 == 1) + assert(t7._2 == 2) + assert(t7._3 == 3) + assert(t7._4 == 4) + assert(t7._5 == 5) + assert(t7._6 == 6) + assert(t7._7 == 7) + assert(t8._1 == 1) + assert(t8._2 == 2) + assert(t8._3 == 3) + assert(t8._4 == 4) + assert(t8._5 == 5) + assert(t8._6 == 6) + assert(t8._7 == 7) + assert(t8._8 == 8) + assert(t9._1 == 1) + assert(t9._2 == 2) + assert(t9._3 == 3) + assert(t9._4 == 4) + assert(t9._5 == 5) + assert(t9._6 == 6) + assert(t9._7 == 7) + assert(t9._8 == 8) + assert(t9._9 == 9) + assert(t10._1 == 1) + assert(t10._2 == 2) + assert(t10._3 == 3) + assert(t10._4 == 4) + assert(t10._5 == 5) + assert(t10._6 == 6) + assert(t10._7 == 7) + assert(t10._8 == 8) + assert(t10._9 == 9) + assert(t10._10 == 10) + assert(t11._1 == 1) + assert(t11._2 == 2) + assert(t11._3 == 3) + assert(t11._4 == 4) + assert(t11._5 == 5) + assert(t11._6 == 6) + assert(t11._7 == 7) + assert(t11._8 == 8) + assert(t11._9 == 9) + assert(t11._10 == 10) + assert(t11._11 == 11) + assert(t12._1 == 1) + assert(t12._2 == 2) + assert(t12._3 == 3) + assert(t12._4 == 4) + assert(t12._5 == 5) + assert(t12._6 == 6) + assert(t12._7 == 7) + assert(t12._8 == 8) + assert(t12._9 == 9) + assert(t12._10 == 10) + assert(t12._11 == 11) + assert(t12._12 == 12) + assert(t13._1 == 1) + assert(t13._2 == 2) + assert(t13._3 == 3) + assert(t13._4 == 4) + assert(t13._5 == 5) + assert(t13._6 == 6) + assert(t13._7 == 7) + assert(t13._8 == 8) + assert(t13._9 == 9) + assert(t13._10 == 10) + assert(t13._11 == 11) + assert(t13._12 == 12) + assert(t13._13 == 13) + assert(t14._1 == 1) + assert(t14._2 == 2) + assert(t14._3 == 3) + assert(t14._4 == 4) + assert(t14._5 == 5) + assert(t14._6 == 6) + assert(t14._7 == 7) + assert(t14._8 == 8) + assert(t14._9 == 9) + assert(t14._10 == 10) + assert(t14._11 == 11) + assert(t14._12 == 12) + assert(t14._13 == 13) + assert(t14._14 == 14) + assert(t15._1 == 1) + assert(t15._2 == 2) + assert(t15._3 == 3) + assert(t15._4 == 4) + assert(t15._5 == 5) + assert(t15._6 == 6) + assert(t15._7 == 7) + assert(t15._8 == 8) + assert(t15._9 == 9) + assert(t15._10 == 10) + assert(t15._11 == 11) + assert(t15._12 == 12) + assert(t15._13 == 13) + assert(t15._14 == 14) + assert(t15._15 == 15) + assert(t16._1 == 1) + assert(t16._2 == 2) + assert(t16._3 == 3) + assert(t16._4 == 4) + assert(t16._5 == 5) + assert(t16._6 == 6) + assert(t16._7 == 7) + assert(t16._8 == 8) + assert(t16._9 == 9) + assert(t16._10 == 10) + assert(t16._11 == 11) + assert(t16._12 == 12) + assert(t16._13 == 13) + assert(t16._14 == 14) + assert(t16._15 == 15) + assert(t16._16 == 16) + assert(t17._1 == 1) + assert(t17._2 == 2) + assert(t17._3 == 3) + assert(t17._4 == 4) + assert(t17._5 == 5) + assert(t17._6 == 6) + assert(t17._7 == 7) + assert(t17._8 == 8) + assert(t17._9 == 9) + assert(t17._10 == 10) + assert(t17._11 == 11) + assert(t17._12 == 12) + assert(t17._13 == 13) + assert(t17._14 == 14) + assert(t17._15 == 15) + assert(t17._16 == 16) + assert(t17._17 == 17) + assert(t18._1 == 1) + assert(t18._2 == 2) + assert(t18._3 == 3) + assert(t18._4 == 4) + assert(t18._5 == 5) + assert(t18._6 == 6) + assert(t18._7 == 7) + assert(t18._8 == 8) + assert(t18._9 == 9) + assert(t18._10 == 10) + assert(t18._11 == 11) + assert(t18._12 == 12) + assert(t18._13 == 13) + assert(t18._14 == 14) + assert(t18._15 == 15) + assert(t18._16 == 16) + assert(t18._17 == 17) + assert(t18._18 == 18) + assert(t19._1 == 1) + assert(t19._2 == 2) + assert(t19._3 == 3) + assert(t19._4 == 4) + assert(t19._5 == 5) + assert(t19._6 == 6) + assert(t19._7 == 7) + assert(t19._8 == 8) + assert(t19._9 == 9) + assert(t19._10 == 10) + assert(t19._11 == 11) + assert(t19._12 == 12) + assert(t19._13 == 13) + assert(t19._14 == 14) + assert(t19._15 == 15) + assert(t19._16 == 16) + assert(t19._17 == 17) + assert(t19._18 == 18) + assert(t19._19 == 19) + assert(t20._1 == 1) + assert(t20._2 == 2) + assert(t20._3 == 3) + assert(t20._4 == 4) + assert(t20._5 == 5) + assert(t20._6 == 6) + assert(t20._7 == 7) + assert(t20._8 == 8) + assert(t20._9 == 9) + assert(t20._10 == 10) + assert(t20._11 == 11) + assert(t20._12 == 12) + assert(t20._13 == 13) + assert(t20._14 == 14) + assert(t20._15 == 15) + assert(t20._16 == 16) + assert(t20._17 == 17) + assert(t20._18 == 18) + assert(t20._19 == 19) + assert(t20._20 == 20) + assert(t21._1 == 1) + assert(t21._2 == 2) + assert(t21._3 == 3) + assert(t21._4 == 4) + assert(t21._5 == 5) + assert(t21._6 == 6) + assert(t21._7 == 7) + assert(t21._8 == 8) + assert(t21._9 == 9) + assert(t21._10 == 10) + assert(t21._11 == 11) + assert(t21._12 == 12) + assert(t21._13 == 13) + assert(t21._14 == 14) + assert(t21._15 == 15) + assert(t21._16 == 16) + assert(t21._17 == 17) + assert(t21._18 == 18) + assert(t21._19 == 19) + assert(t21._20 == 20) + assert(t21._21 == 21) + assert(t22._1 == 1) + assert(t22._2 == 2) + assert(t22._3 == 3) + assert(t22._4 == 4) + assert(t22._5 == 5) + assert(t22._6 == 6) + assert(t22._7 == 7) + assert(t22._8 == 8) + assert(t22._9 == 9) + assert(t22._10 == 10) + assert(t22._11 == 11) + assert(t22._12 == 12) + assert(t22._13 == 13) + assert(t22._14 == 14) + assert(t22._15 == 15) + assert(t22._16 == 16) + assert(t22._17 == 17) + assert(t22._18 == 18) + assert(t22._19 == 19) + assert(t22._20 == 20) + assert(t22._21 == 21) + assert(t22._22 == 22) + } +}