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