Skip to content

Commit

Permalink
Spiced up the irrefutability tests a bit.
Browse files Browse the repository at this point in the history
  • Loading branch information
paulp committed Mar 20, 2012
1 parent 365bb2b commit 032b209
Show file tree
Hide file tree
Showing 4 changed files with 36 additions and 29 deletions.
21 changes: 14 additions & 7 deletions test/files/neg/t5589neg.check
@@ -1,30 +1,37 @@
t5589neg.scala:24: error: constructor cannot be instantiated to expected type;
t5589neg.scala:2: warning: `withFilter' method does not yet exist on Either.RightProjection[Int,String], using `filter' method instead
def f5(x: Either[Int, String]) = for ((y1, y2: String) <- x.right) yield ((y1, y2))
^
t5589neg.scala:2: error: constructor cannot be instantiated to expected type;
found : (T1, T2)
required: String
def f5(x: Either[Int, String]) = for ((y1, y2: String) <- x.right) yield ((y1, y2))
^
t5589neg.scala:25: error: constructor cannot be instantiated to expected type;
t5589neg.scala:3: warning: `withFilter' method does not yet exist on Either.RightProjection[Int,String], using `filter' method instead
def f6(x: Either[Int, String]) = for ((y1, y2: Any) <- x.right) yield ((y1, y2))
^
t5589neg.scala:3: error: constructor cannot be instantiated to expected type;
found : (T1, T2)
required: String
def f6(x: Either[Int, String]) = for ((y1, y2: Any) <- x.right) yield ((y1, y2))
^
t5589neg.scala:26: error: constructor cannot be instantiated to expected type;
t5589neg.scala:4: error: constructor cannot be instantiated to expected type;
found : (T1,)
required: (String, Int)
def f7(x: Either[Int, (String, Int)]) = for (y1 @ Tuple1(y2) <- x.right) yield ((y1, y2))
^
t5589neg.scala:26: error: not found: value y2
t5589neg.scala:4: error: not found: value y2
def f7(x: Either[Int, (String, Int)]) = for (y1 @ Tuple1(y2) <- x.right) yield ((y1, y2))
^
t5589neg.scala:27: error: constructor cannot be instantiated to expected type;
t5589neg.scala:5: error: constructor cannot be instantiated to expected type;
found : (T1, T2, T3)
required: (String, Int)
def f8(x: Either[Int, (String, Int)]) = for ((y1, y2, y3) <- x.right) yield ((y1, y2))
^
t5589neg.scala:27: error: not found: value y1
t5589neg.scala:5: error: not found: value y1
def f8(x: Either[Int, (String, Int)]) = for ((y1, y2, y3) <- x.right) yield ((y1, y2))
^
t5589neg.scala:27: error: not found: value y2
t5589neg.scala:5: error: not found: value y2
def f8(x: Either[Int, (String, Int)]) = for ((y1, y2, y3) <- x.right) yield ((y1, y2))
^
two warnings found
7 errors found
22 changes: 0 additions & 22 deletions test/files/neg/t5589neg.scala
@@ -1,26 +1,4 @@
class A {
// First three compile.
def f1(x: Either[Int, String]) = x.right map (y => y)
def f2(x: Either[Int, String]) = for (y <- x.right) yield y
def f3(x: Either[Int, (String, Int)]) = x.right map { case (y1, y2) => (y1, y2) }
// Last one fails.
def f4(x: Either[Int, (String, Int)]) = for ((y1, y2) <- x.right) yield ((y1, y2))
/**
./a.scala:5: error: constructor cannot be instantiated to expected type;
found : (T1, T2)
required: Either[Nothing,(String, Int)]
def f4(x: Either[Int, (String, Int)]) = for ((y1, y2) <- x.right) yield ((y1, y2))
^
./a.scala:5: error: not found: value y1
def f4(x: Either[Int, (String, Int)]) = for ((y1, y2) <- x.right) yield ((y1, y2))
^
./a.scala:5: error: not found: value y2
def f4(x: Either[Int, (String, Int)]) = for ((y1, y2) <- x.right) yield ((y1, y2))
^
three errors found
**/


def f5(x: Either[Int, String]) = for ((y1, y2: String) <- x.right) yield ((y1, y2))
def f6(x: Either[Int, String]) = for ((y1, y2: Any) <- x.right) yield ((y1, y2))
def f7(x: Either[Int, (String, Int)]) = for (y1 @ Tuple1(y2) <- x.right) yield ((y1, y2))
Expand Down
9 changes: 9 additions & 0 deletions test/files/neg/t5589neg2.check
@@ -0,0 +1,9 @@
t5589neg2.scala:7: error: constructor cannot be instantiated to expected type;
found : (T1, T2)
required: String
for (((((a, (b, (c, (d1, d2)))), es), fs), gs) <- x) yield (d :: es).mkString(", ") // not ok
^
t5589neg2.scala:7: error: not found: value d
for (((((a, (b, (c, (d1, d2)))), es), fs), gs) <- x) yield (d :: es).mkString(", ") // not ok
^
two errors found
13 changes: 13 additions & 0 deletions test/files/neg/t5589neg2.scala
@@ -0,0 +1,13 @@
class A {
def f1(x: List[((((Int, (Double, (Float, String))), List[String]), List[Int]), List[Float])]) = {
for (((((a, (b, (c, d))), es), fs), gs) <- x) yield (d :: es).mkString(", ") // ok
}

def f2(x: List[((((Int, (Double, (Float, String))), List[String]), List[Int]), List[Float])]) = {
for (((((a, (b, (c, (d1, d2)))), es), fs), gs) <- x) yield (d :: es).mkString(", ") // not ok
}

def f3(x: List[((((Int, (Double, (Float, String))), List[String]), List[Int]), List[Float])]) = {
for (((((a, (b, _)), es), fs), gs) <- x) yield (es ::: fs).mkString(", ") // ok
}
}

0 comments on commit 032b209

Please sign in to comment.