about summary refs log tree commit diff stats
path: root/awk/scheme/scheme/test/integration/complex_programs.scm
diff options
context:
space:
mode:
Diffstat (limited to 'awk/scheme/scheme/test/integration/complex_programs.scm')
-rw-r--r--awk/scheme/scheme/test/integration/complex_programs.scm86
1 files changed, 86 insertions, 0 deletions
diff --git a/awk/scheme/scheme/test/integration/complex_programs.scm b/awk/scheme/scheme/test/integration/complex_programs.scm
new file mode 100644
index 0000000..4ea5aa1
--- /dev/null
+++ b/awk/scheme/scheme/test/integration/complex_programs.scm
@@ -0,0 +1,86 @@
+;; Complex Program Integration Tests
+;; Tests that combine multiple language features in realistic scenarios
+
+;; Simple calculator with multiple operations
+(define calculator (op a b)
+  (cond ((= op "add") (+ a b))
+        ((= op "sub") (- a b))
+        ((= op "mul") (* a b))
+        ((= op "div") (/ a b))
+        (else "unknown operation")))
+
+(calculator "add" 5 3)
+(calculator "sub" 10 4)
+(calculator "mul" 6 7)
+(calculator "div" 15 3)
+
+;; List processing pipeline
+(define process-list (lst)
+  (if (null? lst)
+      nil
+      (cons (* (car lst) 2)
+            (process-list (cdr lst)))))
+
+(define filter-even (lst)
+  (if (null? lst)
+      nil
+      (if (= (modulo (car lst) 2) 0)
+          (cons (car lst) (filter-even (cdr lst)))
+          (filter-even (cdr lst)))))
+
+(define sample-list (cons 1 (cons 2 (cons 3 (cons 4 (cons 5 nil))))))
+(process-list sample-list)
+(filter-even sample-list)
+
+;; String processing utilities
+(define string-reverse (str)
+  (define reverse-helper (str idx)
+    (if (< idx 0)
+        ""
+        (string-append (substring str idx (+ idx 1))
+                      (reverse-helper str (- idx 1)))))
+  (reverse-helper str (- (string-length str) 1)))
+
+(string-reverse "hello")
+(string-reverse "racecar")
+
+;; Higher-order list operations
+(define map (f lst)
+  (if (null? lst)
+      nil
+      (cons (f (car lst))
+            (map f (cdr lst)))))
+
+(define square (x) (* x x))
+(map square (cons 1 (cons 2 (cons 3 nil))))
+
+;; Complex nested data structures
+(define make-person (name age)
+  (cons name (cons age nil)))
+
+(define person-name (person) (car person))
+(define person-age (person) (car (cdr person)))
+
+(define alice (make-person "Alice" 25))
+(define bob (make-person "Bob" 30))
+(define people (cons alice (cons bob nil)))
+
+(person-name alice)
+(person-age bob)
+(length people)
+
+;; Recursive tree-like structure
+(define make-tree (value left right)
+  (cons value (cons left (cons right nil))))
+
+(define tree-value (tree) (car tree))
+(define tree-left (tree) (car (cdr tree)))
+(define tree-right (tree) (car (cdr (cdr tree))))
+
+(define sample-tree (make-tree 5
+                              (make-tree 3 nil nil)
+                              (make-tree 7 nil nil)))
+
+(tree-value sample-tree)
+(tree-value (tree-left sample-tree))
+(tree-value (tree-right sample-tree)) 
\ No newline at end of file