|
| 1 | +import language.experimental.captureChecking |
| 2 | +import caps.* |
| 3 | + |
| 4 | +trait BoundsTest: |
| 5 | + |
| 6 | + trait Bar { val f: () => Unit } |
| 7 | + def bar(x: Bar^, y: () ->{x.f} Unit): Unit = ??? |
| 8 | + |
| 9 | + val b: Bar^ = ??? |
| 10 | + |
| 11 | + def testTransMixed[A^, |
| 12 | + B >: CapSet <: A, |
| 13 | + C >: CapSet <: CapSet^{B^}, |
| 14 | + D >: CapSet <: C, |
| 15 | + E >: CapSet <: CapSet^{D^}, |
| 16 | + F >: CapSet <: CapSet^{A^,b}, |
| 17 | + X >: CapSet <: CapSet^{F^,D^}, |
| 18 | + Y >: CapSet^{F^} <: CapSet^{F^,A^,b}, |
| 19 | + Z >: CapSet^{b} <: CapSet^{b,Y^}] = |
| 20 | + val e: E = ??? |
| 21 | + val e2: CapSet^{E^} = e |
| 22 | + val ed: D = e |
| 23 | + val ed2: CapSet^{D^} = e |
| 24 | + val ec: C = e |
| 25 | + val ec2: CapSet^{C^} = e |
| 26 | + val eb: B = e |
| 27 | + val eb2: CapSet^{B^} = e |
| 28 | + val ea: A = e |
| 29 | + val ea2: CapSet^{A^} = e |
| 30 | + val ex: X = e // error |
| 31 | + val ex2: CapSet^{X^} = e // error |
| 32 | + val f: F = ??? |
| 33 | + val f2: CapSet^{F^} = f |
| 34 | + val y: Y = f |
| 35 | + val y2: CapSet^{Y^} = f |
| 36 | + val cb: CapSet^{b} = ??? |
| 37 | + val z: Z = cb |
| 38 | + val z2: CapSet^{Z^} = cb |
| 39 | + |
| 40 | + def callTransMixed = |
| 41 | + val x, y, z: Bar^ = ??? |
| 42 | + testTransMixed[CapSet^{x,y,z}, CapSet^{x,y,z}, CapSet^{x,y,z}, CapSet^{x,y,z}, CapSet^{x,y,z}, CapSet^{x,y,z}, CapSet^{x,y,z}, CapSet^{x,y,z}, CapSet^{b,x,y,z}] |
| 43 | + testTransMixed[CapSet^{x,y,z}, CapSet^{x,y}, CapSet^{x,y}, CapSet^{x}, CapSet^{}, CapSet^{b,x}, CapSet^{b}, CapSet^{b,x}, CapSet^{b}] |
| 44 | + testTransMixed[CapSet^{x,y,z}, CapSet^{x,y}, CapSet^{x,y}, CapSet^{x}, CapSet^{}, CapSet^{b,x}, CapSet^{b}, CapSet^{b,x}, CapSet^{b,x,y,z}] // error |
0 commit comments