aboutsummaryrefslogtreecommitdiff
path: root/tests/pending/pos/ticket2251.scala
diff options
context:
space:
mode:
authorSamuel Gruetter <samuel.gruetter@epfl.ch>2014-12-16 16:38:09 +0100
committerSamuel Gruetter <samuel.gruetter@epfl.ch>2014-12-16 16:38:09 +0100
commit42851ed2675015d42bb341b82a09bd0bef4a8ce4 (patch)
tree06806b4183cf74a43553e9a8a9acfeff84fdf712 /tests/pending/pos/ticket2251.scala
parent5be609fc4e04e3cca5e1435ee41b8cacac9b0513 (diff)
downloaddotty-42851ed2675015d42bb341b82a09bd0bef4a8ce4.tar.gz
dotty-42851ed2675015d42bb341b82a09bd0bef4a8ce4.tar.bz2
dotty-42851ed2675015d42bb341b82a09bd0bef4a8ce4.zip
move failing tests from tests/untried/pos to tests/pending/pos
Diffstat (limited to 'tests/pending/pos/ticket2251.scala')
-rw-r--r--tests/pending/pos/ticket2251.scala39
1 files changed, 39 insertions, 0 deletions
diff --git a/tests/pending/pos/ticket2251.scala b/tests/pending/pos/ticket2251.scala
new file mode 100644
index 000000000..006407247
--- /dev/null
+++ b/tests/pending/pos/ticket2251.scala
@@ -0,0 +1,39 @@
+
+// Martin: I am not sure this is a solvable problem right now. I'll leave it in pending.
+// derived from pos/t1001
+class A
+trait B[T <: B[T]] extends A
+class C extends B[C]
+class D extends B[D]
+
+class Data {
+ // force computing lub of C and D (printLubs enabled:)
+
+/*
+lub of List(D, C) at depth 2
+ lub of List(D, C) at depth 1
+ lub of List(D, C) at depth 0
+ lub of List(D, C) is A
+ lub of List(D, C) is B[_1] forSome { type _1 >: D with C <: A }
+lub of List(D, C) is B[_2] forSome { type _2 >: D with C{} <: B[_1] forSome { type _1 >: D with C{} <: A } }
+*/
+// --> result = WRONG
+
+ // should be: B[X] forSome {type X <: B[X]} -- can this be done automatically? for now, just detect f-bounded polymorphism and fall back to more coarse approximation
+
+ val data: List[A] = List(new C, new D)
+
+ val data2 = List(new C, new D)
+
+ val data3: List[B[_ <: B[_ <: A]]] = List(new C, new D)
+
+ // Not yet --
+ // val data4: List[B[X] forSome { type X <: B[X] }] = List(new C, new D)
+ // <console>:7: error: type mismatch;
+ // found : List[B[_ >: D with C <: B[_ >: D with C <: A]]]
+ // required: List[B[X] forSome { type X <: B[X] }]
+ // val data4: List[B[X] forSome { type X <: B[X] }] = List(new C, new D)
+
+ // works
+ val data5 = List[B[X] forSome { type X <: B[X] }](new C, new D)
+}