diff options
author | Martin Odersky <odersky@gmail.com> | 2016-03-09 18:34:31 +0100 |
---|---|---|
committer | Martin Odersky <odersky@gmail.com> | 2016-03-09 18:35:03 +0100 |
commit | 7dfab5f427ad9600b8e54b61716461787d7fa4a1 (patch) | |
tree | be29d0130d3c2d549993606d7e563b8c5621769e /tests | |
parent | f63110edc7ab8299ef1cd33b2b156e7987e35931 (diff) | |
download | dotty-7dfab5f427ad9600b8e54b61716461787d7fa4a1.tar.gz dotty-7dfab5f427ad9600b8e54b61716461787d7fa4a1.tar.bz2 dotty-7dfab5f427ad9600b8e54b61716461787d7fa4a1.zip |
Refine pretypeArgs
It worked more or less by accident before. Now it's more complicated,
but we also have tests.
Diffstat (limited to 'tests')
-rw-r--r-- | tests/neg/overloaded.scala | 17 | ||||
-rw-r--r-- | tests/pos/overloaded.scala | 24 |
2 files changed, 40 insertions, 1 deletions
diff --git a/tests/neg/overloaded.scala b/tests/neg/overloaded.scala new file mode 100644 index 000000000..ce971ebcf --- /dev/null +++ b/tests/neg/overloaded.scala @@ -0,0 +1,17 @@ +// testing the limits of parameter type inference + +object Test { + def mapX(f: Char => Char): String = ??? + def mapX[U](f: U => U): U = ??? + mapX(x => x) // error: missing parameter type + + def foo(f: Char => Char): Unit = ??? + def foo(f: Int => Int): String = ??? + foo(x => x) // error: missing parameter type + + def bar(f: (Char, Char) => Unit): Unit = ??? + def bar(f: Char => Unit) = ??? + bar((x, y) => ()) + bar (x => ()) + +} diff --git a/tests/pos/overloaded.scala b/tests/pos/overloaded.scala index 9e2260c1c..6a8e72714 100644 --- a/tests/pos/overloaded.scala +++ b/tests/pos/overloaded.scala @@ -24,5 +24,27 @@ object overloaded { def map(f: Char => Char): String = ??? def map[U](f: Char => U): Seq[U] = ??? - map(x => x.toUpper) + val r1 = map(x => x.toUpper) + val t1: String = r1 + val r2 = map(x => x.toInt) + val t2: Seq[Int] = r2 + + def flatMap(f: Char => String): String = ??? + def flatMap[U](f: Char => Seq[U]): Seq[U] = ??? + val r3 = flatMap(x => x.toString) + val t3: String = r3 + val r4 = flatMap(x => List(x)) + val t4: Seq[Char] = r4 + + def bar(f: (Char, Char) => Unit): Unit = ??? + def bar(f: Char => Unit) = ??? + bar((x, y) => ()) + bar (x => ()) + + def combine(f: (Char, Int) => Int): Int = ??? + def combine(f: (String, Int) => String): String = ??? + val r5 = combine((x: Char, y) => x + y) + val t5: Int = r5 + val r6 = combine((x: String, y) => x ++ y.toString) + val t6: String = r6 } |