Skip to content

Commit 954fe07

Browse files
committed
More tests
1 parent 976dee2 commit 954fe07

File tree

1 file changed

+63
-0
lines changed

1 file changed

+63
-0
lines changed
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
import language.experimental.captureChecking
2+
import caps.*
3+
4+
class Console extends SharedCapability:
5+
def println(msg: String): Unit = Predef.println("CONSOLE: " + msg)
6+
7+
class IO extends SharedCapability:
8+
def readLine(): String = scala.io.StdIn.readLine()
9+
10+
class Clazz(val console: Console^):
11+
val io: IO^ = IO()
12+
lazy val memberLazy: () ->{io} String = {
13+
console.println("Computing memberLazy")
14+
() => "Member Lazy Value" + io.readLine()
15+
}
16+
17+
def client(c: Clazz^): Unit =
18+
val io: IO^ = IO()
19+
trait Trait:
20+
lazy val memberLazy: () ->{io} String
21+
def memberMethod(): String
22+
23+
val t: Trait^ = ???
24+
25+
lazy val funky = t.memberLazy() + c.memberLazy()
26+
27+
lazy val anotherFunky =
28+
c.console.println("Computing anotherFunky")
29+
t.memberLazy
30+
31+
val v0: () -> () ->{io} String = () => t.memberLazy // error
32+
val v0_1: () ->{t} () ->{io} String = () => t.memberLazy // ok
33+
val v1: () -> String = () => t.memberLazy() // error
34+
val v2: (() -> String)^{t} = () => t.memberLazy() // ok
35+
val v3: (() -> String)^{c.console} = () => c.memberLazy() // error (but should this be allowed?)
36+
val v4: () -> String = () => t.memberMethod() // error
37+
val v5: (() -> String)^{t} = () => t.memberMethod() // ok
38+
39+
val v6: () ->{c} String = () => funky // error
40+
val v6_1: () ->{t} String = () => funky // error
41+
val v7: () ->{c, t} String = () => funky // ok
42+
43+
val v8: () ->{t, c.console} String = () => anotherFunky() // ok
44+
45+
class Clazz2(val console: Console^):
46+
val io: IO^ = IO()
47+
final lazy val memberLazy: () ->{io} String = {
48+
console.println("Computing memberLazy")
49+
() => "Member Lazy Value" + io.readLine()
50+
}
51+
52+
trait Trait2:
53+
final lazy val memberLazy : () ->{io} String = () => io.readLine()
54+
55+
val c2: Clazz2^ = ???
56+
val t2: Trait2^ = ???
57+
58+
lazy val funky2 = t2.memberLazy() + c2.memberLazy()
59+
60+
val v9: () ->{c2.memberLazy, t2.memberLazy} String = () => funky2 // error (but should this be allowed?)
61+
val v10: () ->{t2, c2} String = () => funky2 // ok
62+
63+
()

0 commit comments

Comments
 (0)