Made return-from and statement expressionization work better.
[parenscript.git] / t / eval-tests.lisp
blobcc99e3eb64a44d2c2f32b745d772a7ff021759a9
1 ;; Copying and distribution of this file, with or without
2 ;; modification, are permitted in any medium without royalty. This
3 ;; file is offered as-is, without any warranty.
5 (in-package #:ps-eval-tests)
6 (named-readtables:in-readtable :parenscript)
8 (in-suite ps-test::eval-tests)
10 (test-js-eval number
14 (test-js-eval float
15 (< 123.12 123.123 123.124)
18 (test-js-eval string
19 "foobar"
20 "foobar")
22 (test-js-eval statements-and-expressions-2
23 ((lambda () (if 1 2 3)))
26 (test-js-eval statements-and-expressions-1
27 ((lambda () (+ 2 (if 1 2 3))))
30 (test-js-eval empty-array
31 (array)
32 (jsarray '()))
34 (test-js-eval funargs-let1
35 ((lambda (x)
36 (let ((x 10))
37 (incf x))
38 (incf x)) 0)
41 (test-js-eval times-rem
42 (* 12 (rem 10 3))
43 12)
45 (test-js-eval divide-rem
46 (rem 10 (/ 12 4))
49 (test-js-eval rem-divide
50 (/ 9 (rem 11 4))
53 (test-js-eval rem-multiply
54 (* 5 (rem 4 3))
57 (test-js-eval case-return-break-null
58 ((lambda (x) (case x (1) (2 3))) 1)
59 :null)
61 (test-js-eval defun-return1
62 (progn (defun bar (x) (1+ x))
63 (bar 1))
66 (test-js-eval defun-return2
67 (progn (defun bar (fn)
68 (funcall fn))
70 (defun foo ()
71 (bar (lambda () (return-from foo 123))))
73 (foo))
74 123)
76 (test-js-eval defvar
77 (progn (defvar foo 1)
78 foo)
81 (test-js-eval block-dynamic-lambda
82 ((lambda () (block nil (return 4) (+ 1 2))))
85 (test-js-eval block-dynamic-lambda1
86 ((lambda () (block nil (return 4) (+ 1 2)) 5))
89 (test-js-eval loop-sum
90 (+ 1 (loop for i from 0 to 10 sum i))
91 56)
93 (test-js-eval loop-funcall-sum
94 ((lambda (x) (1+ x)) (loop for i from 0 to 10 sum i))
95 56)
97 (test-js-eval loop-funcall-if-sum
98 (progn (defun one-plus (x)
99 (1+ x))
101 (one-plus (if false 1 (loop for i from 0 to 10 sum i))))
104 (test-js-eval case-return-break1-broken-return
105 (progn (defun foo (x y)
106 (case x
107 ("bar" (if y (return-from foo 1)))
108 ("baz" 2)))
109 (list (foo "bar" t) (foo "bar" nil) (foo "baz" nil)))
110 (jsarray '(1 :undefined 2)))
112 (test-js-eval funcall-loop-doing
113 ((lambda (x) x)
114 (loop for i from 0 to 10 do (1+ i)))
115 :null)
117 (test-js-eval block-dynamic-lambda2
118 ((lambda () (1+ (block nil (return 4) (+ 1 2)))))
121 (test-js-eval block-dynamic-setf
122 (progn (defvar foo (block nil (return 4) (+ 1 2)))
123 foo)
126 (test-js-eval block-dynamic-return1
127 (progn (defvar foo ((lambda ()
128 (block nil
129 ((lambda () (return 6)))
130 (+ 1 2)))))
131 foo)
134 (test-js-eval block-lambda-dynamic-setf
135 (progn (defvar foo (block nil ((lambda () (return 4))) (+ 1 2)))
136 foo)
139 (test-js-eval block-lambda-dynamic-lambda
140 ((lambda () (block nil ((lambda () (return 4))) (+ 1 2))))
143 (test-js-eval return-from-flet
144 (progn (defun foo ()
145 (flet ((bar () (return-from foo 42)))
146 (bar)))
147 (foo))
150 (test-js-eval plus-block
151 (1+ (block nil (return 4) (+ 1 2)))
154 ;;; broken
156 (test-js-eval block-dynamic-return
157 (block nil (return 4) (+ 1 2))
160 (test-js-eval block-lambda-dynamic-return
161 (block nil ((lambda () (return 4))) (+ 1 2))
164 (test-js-eval dolist-return
165 (dolist (x '(5 2 3))
166 (return (1+ x)))