78 lines
1.2 KiB
Text
78 lines
1.2 KiB
Text
(namespace tests.scopes
|
|
(test.case "def"
|
|
(def x 1)
|
|
(assert.eq! x 1)
|
|
|
|
(def [y z] [1 2])
|
|
(assert.eq! y 1)
|
|
(assert.eq! z 2)
|
|
)
|
|
|
|
(test.case "def bounded"
|
|
(def x 1)
|
|
(try
|
|
(def x 2)
|
|
(catch :Panic (return))
|
|
)
|
|
(unreachable!)
|
|
)
|
|
|
|
(test.case "set!"
|
|
(def [x y] [1 1])
|
|
(set! x 2)
|
|
(assert.eq! x 2)
|
|
|
|
(set! [x y] [3 4])
|
|
(assert.eq! x 3)
|
|
(assert.eq! y 4)
|
|
)
|
|
|
|
(test.case "set! unbounded"
|
|
(try
|
|
(set! x 2)
|
|
(catch :UnboundVariable (return))
|
|
)
|
|
(unreachable!)
|
|
)
|
|
|
|
(test.case "lookup"
|
|
(def x 1)
|
|
(assert.eq! (lookup x null) 1)
|
|
(assert.eq! (lookup y null) null)
|
|
)
|
|
|
|
(test.case "inheritance"
|
|
(scope
|
|
(def x 1)
|
|
(scope
|
|
(assert.eq! x 1)
|
|
(set! x 2)
|
|
)
|
|
(assert.eq! x 2)
|
|
)
|
|
)
|
|
|
|
(test.case "shadowing"
|
|
(scope
|
|
(def x 100)
|
|
(scope
|
|
(def x 1)
|
|
)
|
|
(assert.eq! x 100)
|
|
)
|
|
(assert.eq! (lookup x null) null)
|
|
)
|
|
|
|
(test.case "leakage"
|
|
(scope (def x 1))
|
|
(assert.eq! (lookup x null) null)
|
|
|
|
(scope (def y 2))
|
|
(assert.eq! (lookup y null) null)
|
|
|
|
(scope
|
|
(scope (def z 1))
|
|
(assert.eq! (lookup z null) null)
|
|
)
|
|
)
|
|
)
|