From 9f28641da43ed10aeeaa9aa6b97f572021ed693c Mon Sep 17 00:00:00 2001 From: David Hua Date: Tue, 14 Feb 2023 02:34:42 -0500 Subject: [PATCH 1/2] Add tests for clause interleaving to safe initialization test suite. --- tests/init/neg/interleaving-params.scala | 9 +++++++++ tests/init/pos/interleaving-overload.scala | 20 ++++++++++++++++++++ tests/init/pos/interleaving-params.scala | 8 ++++++++ 3 files changed, 37 insertions(+) create mode 100755 tests/init/neg/interleaving-params.scala create mode 100755 tests/init/pos/interleaving-overload.scala create mode 100755 tests/init/pos/interleaving-params.scala diff --git a/tests/init/neg/interleaving-params.scala b/tests/init/neg/interleaving-params.scala new file mode 100755 index 000000000000..f0f9cbaf3f53 --- /dev/null +++ b/tests/init/neg/interleaving-params.scala @@ -0,0 +1,9 @@ +import scala.language.experimental.clauseInterleaving + +class Params{ + def bar[T](x: T)[T]: String = ??? // error + def zoo(x: Int)[T, U](x: U): T = ??? // error + def bbb[T <: U](x: U)[U]: U = ??? // error // error + def f0[T](implicit x: T)[U](y: U) = (x,y) // error + def f1[T](implicit x: T)[U] = (x,y) // error +} \ No newline at end of file diff --git a/tests/init/pos/interleaving-overload.scala b/tests/init/pos/interleaving-overload.scala new file mode 100755 index 000000000000..4d9214bf4d09 --- /dev/null +++ b/tests/init/pos/interleaving-overload.scala @@ -0,0 +1,20 @@ +import scala.language.experimental.clauseInterleaving + +class A{ + + def f1[T](x: Any)[U] = ??? + def f1[T](x: Int)[U] = ??? + + f1(1) + f1("hello") + + case class B[U](x: Int) + def b[U](x: Int) = B[U](x) + + def f2[T]: [U] => Int => B[U] = [U] => (x: Int) => b[U](x) + + f2(1) + f2[Any](1) + f2[Any][Any](1) + +} \ No newline at end of file diff --git a/tests/init/pos/interleaving-params.scala b/tests/init/pos/interleaving-params.scala new file mode 100755 index 000000000000..08531a84e696 --- /dev/null +++ b/tests/init/pos/interleaving-params.scala @@ -0,0 +1,8 @@ +import scala.language.experimental.clauseInterleaving + +class Params{ + type U + def foo[T](x: T)[U >: x.type <: T](using U)[L <: List[U]](l: L): L = ??? + def aaa(x: U): U = ??? + def bbb[T <: U](x: U)[U]: U = ??? +} \ No newline at end of file From 294fae8969fcb8e6bc46132234900c60822604b3 Mon Sep 17 00:00:00 2001 From: David Hua Date: Tue, 28 Feb 2023 23:42:51 -0500 Subject: [PATCH 2/2] Added method calls to clause positive clause interleaving init tests --- tests/init/pos/interleaving-overload.scala | 4 ++++ tests/init/pos/interleaving-params.scala | 11 +++++++++++ 2 files changed, 15 insertions(+) diff --git a/tests/init/pos/interleaving-overload.scala b/tests/init/pos/interleaving-overload.scala index 4d9214bf4d09..260b3538214a 100755 --- a/tests/init/pos/interleaving-overload.scala +++ b/tests/init/pos/interleaving-overload.scala @@ -7,6 +7,8 @@ class A{ f1(1) f1("hello") + f1[Boolean]("a")[Int] + f1[Boolean](1)[Int] case class B[U](x: Int) def b[U](x: Int) = B[U](x) @@ -17,4 +19,6 @@ class A{ f2[Any](1) f2[Any][Any](1) + b[Int](5) + } \ No newline at end of file diff --git a/tests/init/pos/interleaving-params.scala b/tests/init/pos/interleaving-params.scala index 08531a84e696..9f98b5f35d5b 100755 --- a/tests/init/pos/interleaving-params.scala +++ b/tests/init/pos/interleaving-params.scala @@ -1,3 +1,5 @@ +import scala.collection.mutable.AbstractSet +import scala.collection.mutable.BitSet import scala.language.experimental.clauseInterleaving class Params{ @@ -5,4 +7,13 @@ class Params{ def foo[T](x: T)[U >: x.type <: T](using U)[L <: List[U]](l: L): L = ??? def aaa(x: U): U = ??? def bbb[T <: U](x: U)[U]: U = ??? + + foo[AbstractSet[Int]](BitSet())[AbstractSet[Int]](using BitSet())[List[AbstractSet[Int]]](List[AbstractSet[Int]]()) +} + +class Param2 extends Params { + type U = AbstractSet[Int] + + aaa(BitSet()) + bbb[BitSet](BitSet())[AbstractSet[Int]] } \ No newline at end of file