(require (lib "test.ss" "schemeunit")) (load "eval.ss") (define sa string-append) (define los2 (lambda (list pre in post) (letrec [(helper (lambda (list pre in) (if (null? list) "" (sa pre (car list) (helper (cdr list) in in)))))] (sa pre (helper list "" in) post)))) (define toStringV (lambda (val) (cond [(number? val) (number->string val)] [(list? val) (los2 (map toStringV val) "(" " " ")")] [(symbol? val) (symbol->string val)] [(boolean? val) (if val "true" "false")] [else (tostring val)] ))) (define valueCheck (lambda (output input) (assert equal? output (tostringV ((make-eval-string input) 'value))))) (define nameCheck (lambda (output input) (assert equal? output (tostringV ((make-eval-string input) 'name))))) (define needCheck (lambda (output input) (assert equal? output (tostringV ((make-eval-string input) 'need))))) (define allCheck (lambda (output input) (begin (valueCheck output input) (nameCheck output input) (needCheck output input) ))) (define assign2test (make-test-suite "Tests for eval.ss" (make-test-case "interface: make-eval-string" (assert-true (procedure? make-eval-string))) (make-test-case "interface: make-eval-file" (assert-true (procedure? make-eval-file))) (make-test-case "parseException" (with-handlers ([exn:user? (lambda (x) (or (regexp-match "parse" (exn-message x)) ) )]) (allCheck "whose your" "1 + ") ) ) (make-test-case "evalException" (with-handlers ([exn:user? (lambda (x) (or (regexp-match "eval" (exn-message x)) ) )]) (allCheck "mojo" "1 + number?") ) ) (make-test-case "numberP" (allCheck "number?" "number?") ) (make-test-case "mathOp" (allCheck "30" "2 * 3 + 12") ) (make-test-case "testAppend" (allCheck "(1 2 3 1 2 3)" "let Y := map f to let g := map x to f(map z1,z2 to (x(x))(z1,z2)); in g(g); APPEND := map ap to map x,y to if x = null then y else cons(first(x), ap(rest(x), y)); l := cons(1,cons(2,cons(3,null))); in (Y(APPEND))(l,l)")) )) (require (lib "text-ui.ss" "schemeunit")) (test/text-ui assign2test)