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
)
15 (< 123.12 123.123 123.124)
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
34 (test-js-eval funargs-let1
42 (test-js-eval times-rem
46 (test-js-eval divide-rem
50 (test-js-eval rem-divide
54 (test-js-eval rem-multiply
58 (test-js-eval case-return-break-null
65 (test-js-eval defun-return1
66 (progn (defun bar (x) (1+ x
))
70 (test-js-eval defun-return2
71 (progn (defun bar (fn)
75 (bar (lambda () (return-from foo
123))))
85 (test-js-eval block-dynamic-lambda
86 ((lambda () (block nil
(return 4) (+ 1 2))))
89 (test-js-eval block-dynamic-lambda1
90 ((lambda () (block nil
(return 4) (+ 1 2)) 5))
93 (test-js-eval loop-sum
94 (+ 1 (loop for i from
0 to
10 sum i
))
97 (test-js-eval loop-funcall-sum
98 ((lambda (x) (1+ x
)) (loop for i from
0 to
10 sum i
))
101 (test-js-eval loop-funcall-if-sum
102 (progn (defun one-plus (x)
105 (one-plus (if false
1 (loop for i from
0 to
10 sum i
))))
108 (test-js-eval case-return-break1-broken-return
109 (progn (defun foo (x y
)
111 ("bar" (if y
(return-from foo
1)))
113 (list (foo "bar" t
) (foo "bar" nil
) (foo "baz" nil
)))
116 (test-js-eval funcall-loop-doing
118 (loop for i from
0 to
10 do
(1+ i
)))
121 (test-js-eval block-dynamic-lambda2
122 ((lambda () (1+ (block nil
(return 4) (+ 1 2)))))
125 (test-js-eval block-dynamic-setf
126 (progn (defvar foo
(block nil
(return 4) (+ 1 2)))
130 (test-js-eval block-dynamic-return1
131 (progn (defvar foo
((lambda ()
133 ((lambda () (return 6)))
138 (test-js-eval block-lambda-dynamic-setf
139 (progn (defvar foo
(block nil
((lambda () (return 4))) (+ 1 2)))
143 (test-js-eval block-lambda-dynamic-lambda
144 ((lambda () (block nil
((lambda () (return 4))) (+ 1 2))))
147 (test-js-eval return-from-flet
149 (flet ((bar () (return-from foo
42)))
154 (test-js-eval plus-block
155 (1+ (block nil
(return 4) (+ 1 2)))
158 (test-js-eval let-closures-rename
159 (progn (defun make-closures ()
161 (let ((x 1)) (lambda () (1+ x
)))
162 (let ((x 2)) (lambda () (1+ x
)))))
164 (defvar foo
(make-closures))
166 (list (funcall (aref foo
0))
167 (funcall (aref foo
1))))
170 (test-js-eval labels-return
174 (return-from bar
"even"))
179 (test-js-eval labels-return1
183 (return-from foo
"even"))
190 (test-js-eval labels-return2
194 (when (evenp (+ x y
))
195 (return-from bar
"even"))))
203 (test-js-eval labels-return3
207 (when (evenp (+ x y
))
208 (return-from foo
"even"))))
217 (test-js-eval toplevel-local-scope
218 (progn (defvar foo
(create "fn" (let ((x 5)) (lambda () x
))))
219 (funcall (getprop foo
"fn")))
222 (test-js-eval special-var2
223 (progn (defvar *foo
*)
229 (test-js-eval special-var3
230 (progn (defvar *foo
* 1)
231 (+ *foo
* (let* ((*baz
* 3)
242 (test-js-eval operator-expressions-array-nested-let
243 (list (let ((y 1)) y
) 2)
246 (test-js-eval block-return-plus
247 (+ 1 (block foobar
(return-from foobar
2) 1))
250 (test-js-eval block-return-plus1
251 (+ 1 (block foobar
(+ 4 ((lambda (x) (return-from foobar x
)) 2)) 1))
254 (test-js-eval block-let
257 (return-from foobar x
)
261 (test-js-eval block-dynamic-return
262 (block nil
(return 4) (+ 1 2))
265 (test-js-eval block-lambda-dynamic-return
266 (block nil
((lambda () (return 4))) (+ 1 2))
269 (test-js-eval nil-block-return-1
270 (block nil
(return 1) 2)
273 (test-js-eval dolist-return
278 (test-js-eval let-defun-toplevel
279 (progn (let ((foo 0))
284 (test-js-eval let-defvar-toplevel
285 (progn (let ((foo 0))
286 (defvar bar
(1+ foo
)))
290 (test-js-eval values-not-returned
292 (setf x
(+ x
(values 2 (incf x
))))
296 (test-js-eval equality-nary1
297 (let ((x 10) (y 10) (z 10))
301 (test-js-eval values-not-returned1
303 (incf x
(+ x
(values 1 (incf x
))))
307 (test-js-eval incf-incf
313 (test-js-eval incf-setf
319 (test-js-eval values0
320 ((lambda () (values)))
323 (test-js-eval mv-return1
326 (multiple-value-bind (a b c
) (foo)
328 '(1 2 3)) ;; cl-js doesn't define callee.caller - fixme
330 (test-js-eval dynamic-extent-function-return-values
333 (return-from foo
(values 1 2 3)))))
334 (multiple-value-bind (a b c
) (foo)
336 '(1 2 3)) ;; cl-js doesn't define callee.caller - fixme
338 (test-js-eval plus-not-associative
344 (test-js-eval loop-return
346 (* 10 (loop for i from
0 below
10 do
352 (test-js-eval loop-with-clause
353 (loop for i
:from
0 :to
5
356 do
(return (setf x i
)))
359 (test-js-eval loop-extended-conditional-clauses
360 (loop for i
:from
0 :to
5
369 '(1 2 2 1 3 4 4 2 5 6 6 3))
371 (test-js-eval loop-extended-conditional-clauses1
373 (bar (loop for i
:from
0 :to
5
382 and do
(incf foo x
))))
383 (funcall (@ bar push
) foo
)
385 '(1 2 2 1 3 4 4 2 5 6 6 3 21))