about summary refs log tree commit diff stats
path: root/awk/scheme/scheme/test/unit/environment_scoping.scm
diff options
context:
space:
mode:
Diffstat (limited to 'awk/scheme/scheme/test/unit/environment_scoping.scm')
-rw-r--r--awk/scheme/scheme/test/unit/environment_scoping.scm66
1 files changed, 66 insertions, 0 deletions
diff --git a/awk/scheme/scheme/test/unit/environment_scoping.scm b/awk/scheme/scheme/test/unit/environment_scoping.scm
new file mode 100644
index 0000000..3d208cf
--- /dev/null
+++ b/awk/scheme/scheme/test/unit/environment_scoping.scm
@@ -0,0 +1,66 @@
+;; Environment and Scoping Tests
+;; Tests for lexical scoping, variable shadowing, and environment management
+
+;; Variable shadowing
+(define x 10)
+(let ((x 20))
+  x)
+x
+
+;; Nested let expressions
+(let ((x 1))
+  (let ((y 2))
+    (let ((z 3))
+      (+ x (+ y z)))))
+
+;; Shadowing in nested environments
+(define global 100)
+(let ((global 200))
+  (let ((global 300))
+    global)
+  global)
+global
+
+;; Function parameter shadowing
+(define shadow-test (x)
+  (let ((x (+ x 10)))
+    x))
+
+(shadow-test 5)
+
+;; Complex nested scoping
+(let ((a 1))
+  (let ((b (+ a 1)))
+    (let ((c (+ b 1)))
+      (let ((a (+ c 1)))  ;; shadows outer a
+        (+ a b c)))))
+
+;; Environment persistence in closures
+(define make-counter ()
+  (let ((count 0))
+    (lambda ()
+      (let ((old-count count))
+        (let ((count (+ count 1)))  ;; shadows outer count
+          old-count)))))
+
+(define counter (make-counter))
+(counter)
+(counter)
+(counter)
+
+;; Multiple closures sharing environment
+(define make-pair (x y)
+  (let ((get-x (lambda () x))
+        (get-y (lambda () y))
+        (set-x (lambda (new-x) (let ((x new-x)) x))))
+    (list get-x get-y set-x)))
+
+;; Complex environment nesting with functions
+(define outer-env (x)
+  (define inner-env (y)
+    (define deepest-env (z)
+      (+ x (+ y z)))
+    (deepest-env 1))
+  (inner-env 2))
+
+(outer-env 3) 
\ No newline at end of file