diff options
Diffstat (limited to 'awk/scheme/scheme/test/unit/environment_scoping.scm')
-rw-r--r-- | awk/scheme/scheme/test/unit/environment_scoping.scm | 66 |
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 |