delete iterate.lisp
[screamer.git] / primordial.lisp
blobbfdf70d8dbb411e4bf2847b463079c8a1f6619ba
1 ;;; -*- Mode: LISP; Package: (PRIMORDIAL :USE CL :COLON-MODE :EXTERNAL); Base: 10; Syntax: Ansi-common-lisp -*-
3 ;;; LaHaShem HaAretz U'Mloah
5 ;;; This file contains a set of functions for testing Screamer prior to
6 ;;; release. Run the function (PRIME-ORDEAL). If it returns T and doesn't
7 ;;; produce any error messages then Screamer is probably OK.
9 ;;; CMU CommonLisp has a bug with DEFPACKAGE.
11 #-(or poplog akcl cmu) (in-package :screamer-user)
13 #-(or poplog akcl cmu)
14 (screamer:define-screamer-package :primordial (:use :iterate))
16 #+cmu
17 (defpackage :primordial
18 (:shadowing-import-from :screamer :defun :multiple-value-bind :y-or-n-p)
19 (:use :cl :screamer :iterate))
21 (in-package :primordial)
23 #+(or poplog akcl)
24 (shadowing-import
25 '(screamer::defun screamer::multiple-value-bind screamer::y-or-n-p))
27 #+(or poplog akcl) (use-package '(:cl :screamer :iterate))
29 (defun equal-set? (x y)
30 (and (subsetp x y :test #'equal) (subsetp y x :test #'equal)))
32 (defun attacks (qi qj distance)
33 (or (= qi qj) (= qi (+ qj distance)) (= qi (- qj distance))))
35 (defun check-queens (queen queens &optional (distance 1))
36 (unless (null queens)
37 (if (attacks queen (first queens) distance) (fail))
38 (check-queens queen (rest queens) (1+ distance))))
40 (defun n-queens (n &optional queens)
41 (if (= (length queens) n)
42 queens
43 (let ((queen (an-integer-between 1 n)))
44 (check-queens queen queens)
45 (n-queens n (cons queen queens)))))
47 (defun test1 () (= (length (all-values (n-queens 4))) 2))
49 (defun test2 () (= (length (all-values (n-queens 8))) 92))
51 (defun a-bit () (either 0 1))
53 ;;; note: DOLIST and DOTIMES work nondeterministically because PUSH doesn't
54 ;;; destructively modify the list that is being collected so each list
55 ;;; returned as a nondeterministic value is available after backtracking.
56 ;;; note: Tests 3 through 6 are commented out since they all contain
57 ;;; nondeterministc DOTIMES and DOLIST which don't work under CMU
58 ;;; Common Lisp and I don't have time to figure out why.
60 #+comment
61 (defun test3-internal (n)
62 (local
63 (let (collection)
64 (dotimes (i n) (push (either 0 1) collection))
65 collection)))
67 #+comment
68 (defun test3 ()
69 (equal-set? (all-values (test3-internal 2)) '((0 0) (1 0) (0 1) (1 1))))
71 #+comment
72 (defun test4-internal (n)
73 (local (let (collection)
74 (dotimes (i n) (push (a-bit) collection))
75 collection)))
77 #+comment
78 (defun test4 ()
79 (equal-set? (all-values (test3-internal 2)) '((0 0) (1 0) (0 1) (1 1))))
81 #+comment
82 (defun test5-internal (list)
83 (local (let (collection)
84 (dolist (e list) (push (either 0 1) collection))
85 collection)))
87 #+comment
88 (defun test5 ()
89 (equal-set? (all-values (test3-internal 2)) '((0 0) (1 0) (0 1) (1 1))))
91 #+comment
92 (defun test6-internal (list)
93 (local (let (collection)
94 (dolist (e list) (push (a-bit) collection))
95 collection)))
97 #+comment
98 (defun test6 ()
99 (equal-set? (all-values (test3-internal 2)) '((0 0) (1 0) (0 1) (1 1))))
101 ;;; Problems with LOOP:
102 ;;; 1. Symbolics implementation of LOOP expands directly into RPLACD without
103 ;;; going through SETF. This foils the LOCAL declaration.
104 ;;; 2. Results disappear upon ALL-VALUES internal backtracking.
105 ;;; 3. Lucid expands LOOP into a MULTIPLE-VALUE-CALL.
107 #+comment
108 (defun test7-internal (n) (local (loop repeat n collect (either 0 1))))
110 #+comment
111 (defun test7 ()
112 (equal-set? (all-values (test7-internal 2)) '((1 1) (0 1) (1 0) (0 0))))
114 #+comment
115 (defun test8-internal (n) (local (loop repeat n collect (a-bit))))
117 #+comment
118 (defun test8 ()
119 (equal-set? (all-values (test8-internal 2)) '((1 1) (0 1) (1 0) (0 0))))
121 ;;; Problems with ITERATE:
122 ;;; 1. Beta conversion of (let ((#:foo nil)) (setf foo 'bar)) is unsound.
123 ;;; 2. Results disappear upon ALL-VALUES internal backtracking.
125 #+comment
126 (defun test9-internal (n)
127 (local (iterate (repeat n) (collect (either 0 1)))))
129 #+comment
130 (defun test9 ()
131 (equal-set? (all-values (test9-internal 2)) '((1 1) (0 1) (1 0) (0 0))))
133 #+comment
134 (defun test10-internal (n) (local (iterate (repeat n) (collect (a-bit)))))
136 #+comment
137 (defun test10 ()
138 (equal-set? (all-values (test10-internal 2)) '((1 1) (0 1) (1 0) (0 0))))
140 #+comment
141 (defun bar (n)
142 (local (LET* ((COUNT789)
143 (RESULT788)
144 (END-POINTER790)
145 (TEMP791))
146 (BLOCK NIL
147 (TAGBODY
148 (SETQ COUNT789 N)
149 LOOP-TOP-NIL
150 (IF (<= COUNT789 0) (GO LOOP-END-NIL))
151 (PROGN
152 (SETQ TEMP791 (LIST (A-BIT)))
153 (IF TEMP791
154 (SETQ END-POINTER790
155 (IF RESULT788
156 (SETF (CDR END-POINTER790) TEMP791)
157 (SETQ RESULT788 TEMP791))))
158 RESULT788)
159 LOOP-STEP-NIL
160 (SETQ COUNT789 (1- COUNT789))
161 (GO LOOP-TOP-NIL)
162 LOOP-END-NIL)
163 RESULT788))))
165 (defun test11 ()
166 (let ((x (make-variable)))
167 (assert! (numberpv x))
168 (and (known? (numberpv x))
169 (not (known? (notv (numberpv x))))
170 (not (known? (realpv x)))
171 (not (known? (notv (realpv x))))
172 (not (known? (integerpv x)))
173 (not (known? (notv (integerpv x)))))))
175 (defun test12 ()
176 (let ((x (make-variable)))
177 (assert! (notv (numberpv x)))
178 (and (known? (andv (notv (numberpv x))
179 (notv (realpv x))
180 (notv (integerpv x))))
181 (not (known? (numberpv x)))
182 (not (known? (realpv x)))
183 (not (known? (integerpv x))))))
185 (defun test13 ()
186 (let ((x (make-variable)))
187 (assert! (realpv x))
188 (and (known? (andv (numberpv x) (realpv x)))
189 (not (known? (notv (numberpv x))))
190 (not (known? (notv (realpv x))))
191 (not (known? (integerpv x)))
192 (not (known? (notv (integerpv x)))))))
194 (defun test14 ()
195 (let ((x (make-variable)))
196 (assert! (notv (realpv x)))
197 (and (known? (andv (notv (realpv x)) (notv (integerpv x))))
198 (not (known? (numberpv x)))
199 (not (known? (notv (numberpv x))))
200 (not (known? (realpv x)))
201 (not (known? (integerpv x))))))
203 (defun test15 ()
204 (let ((x (make-variable)))
205 (assert! (integerpv x))
206 (and (known? (andv (integerpv x) (realpv x) (numberpv x)))
207 (not (known? (notv (numberpv x))))
208 (not (known? (notv (realpv x))))
209 (not (known? (notv (integerpv x)))))))
211 (defun test16 ()
212 (let ((x (make-variable)))
213 (assert! (notv (integerpv x)))
214 (and (known? (notv (integerpv x)))
215 (not (known? (numberpv x)))
216 (not (known? (realpv x)))
217 (not (known? (notv (numberpv x))))
218 (not (known? (notv (realpv x))))
219 (not (known? (integerpv x))))))
221 (defun test17 ()
222 (let ((x (make-variable)))
223 (assert! (numberpv x))
224 (assert! (notv (realpv x)))
225 (and (known? (andv (numberpv x) (notv (realpv x)) (notv (integerpv x))))
226 (not (known? (notv (numberpv x))))
227 (not (known? (realpv x)))
228 (not (known? (integerpv x))))))
230 (defun test18 ()
231 (let ((x (make-variable)))
232 (assert! (numberpv x))
233 (assert! (notv (integerpv x)))
234 (and (known? (andv (numberpv x) (notv (integerpv x))))
235 (not (known? (notv (numberpv x))))
236 (not (known? (realpv x)))
237 (not (known? (notv (realpv x))))
238 (not (known? (integerpv x))))))
240 (defun test19 ()
241 (let ((x (make-variable)))
242 (assert! (realpv x))
243 (assert! (notv (integerpv x)))
244 (and (known? (andv (numberpv x) (realpv x) (notv (integerpv x))))
245 (not (known? (notv (numberpv x))))
246 (not (known? (notv (realpv x))))
247 (not (known? (integerpv x))))))
249 (defun test20 ()
250 (let ((x (make-variable)))
251 (null (all-values (assert! (numberpv x)) (assert! (notv (numberpv x)))))))
253 (defun test21 ()
254 (let ((x (make-variable)))
255 (null (all-values (assert! (realpv x)) (assert! (notv (realpv x)))))))
257 (defun test22 ()
258 (let ((x (make-variable)))
259 (null (all-values (assert! (integerpv x)) (assert! (notv (integerpv x)))))))
261 (defun test23 ()
262 (let* ((x (make-variable))
263 (p1 (numberpv x))
264 (p2 (notv (numberpv x)))
265 (p3 (realpv x))
266 (p4 (notv (realpv x)))
267 (p5 (integerpv x))
268 (p6 (notv (integerpv x))))
269 (assert! p1)
270 (and (known? p1)
271 (not (known? p2))
272 (not (known? p3))
273 (not (known? p4))
274 (not (known? p5))
275 (not (known? p6)))))
277 (defun test24 ()
278 (let* ((x (make-variable))
279 (p1 (numberpv x))
280 (p2 (notv (numberpv x)))
281 (p3 (realpv x))
282 (p4 (notv (realpv x)))
283 (p5 (integerpv x))
284 (p6 (notv (integerpv x))))
285 (assert! p2)
286 (and (not (known? p1))
287 (known? p2)
288 (not (known? p3))
289 (known? p4)
290 (not (known? p5))
291 (known? p6))))
293 (defun test25 ()
294 (let* ((x (make-variable))
295 (p1 (numberpv x))
296 (p2 (notv (numberpv x)))
297 (p3 (realpv x))
298 (p4 (notv (realpv x)))
299 (p5 (integerpv x))
300 (p6 (notv (integerpv x))))
301 (assert! p3)
302 (and (known? p1)
303 (not (known? p2))
304 (known? p3)
305 (not (known? p4))
306 (not (known? p5))
307 (not (known? p6)))))
309 (defun test26 ()
310 (let* ((x (make-variable))
311 (p1 (numberpv x))
312 (p2 (notv (numberpv x)))
313 (p3 (realpv x))
314 (p4 (notv (realpv x)))
315 (p5 (integerpv x))
316 (p6 (notv (integerpv x))))
317 (assert! p4)
318 (and (not (known? p1))
319 (not (known? p2))
320 (not (known? p3))
321 (known? p4)
322 (not (known? p5))
323 (known? p6))))
325 (defun test27 ()
326 (let* ((x (make-variable))
327 (p1 (numberpv x))
328 (p2 (notv (numberpv x)))
329 (p3 (realpv x))
330 (p4 (notv (realpv x)))
331 (p5 (integerpv x))
332 (p6 (notv (integerpv x))))
333 (assert! p5)
334 (and (known? p1)
335 (not (known? p2))
336 (known? p3)
337 (not (known? p4))
338 (known? p5)
339 (not (known? p6)))))
341 (defun test28 ()
342 (let* ((x (make-variable))
343 (p1 (numberpv x))
344 (p2 (notv (numberpv x)))
345 (p3 (realpv x))
346 (p4 (notv (realpv x)))
347 (p5 (integerpv x))
348 (p6 (notv (integerpv x))))
349 (assert! p6)
350 (and (not (known? p1))
351 (not (known? p2))
352 (not (known? p3))
353 (not (known? p4))
354 (not (known? p5))
355 (known? p6))))
357 (defun test29 ()
358 (let* ((x (make-variable))
359 (p1 (numberpv x))
360 (p2 (notv (numberpv x))))
361 (null (all-values (assert! p1) (assert! p2)))))
363 (defun test30 ()
364 (let ((x (make-variable)))
365 (null
366 (all-values
367 (assert!
368 (memberv x '(a b c 1 2 3 1.0 2.0 3.0 #c(1 0.0) #c(2 0.0) #c(3 0.0))))
369 (assert!
370 (memberv x '(d e f 4 5 6 4.0 5.0 6.0 #c(4 0.0) #c(5 0.0) #c(6 0.0))))))))
372 (defun test31 ()
373 (let ((x (make-variable)))
374 (assert!
375 (memberv x '(a b c 1 2 3 1.0 2.0 3.0 #c(1 0.0) #c(2 0.0) #c(3 0.0))))
376 (assert!
377 (memberv x '(a b c 4 5 6 4.0 5.0 6.0 #c(4 0.0) #c(5 0.0) #c(6 0.0))))
378 (and (known? (andv (notv (numberpv x))
379 (notv (realpv x))
380 (notv (integerpv x))))
381 (not (known? (numberpv x)))
382 (not (known? (realpv x)))
383 (not (known? (integerpv x))))))
385 (defun test32 ()
386 (let ((x (make-variable)))
387 (assert!
388 (memberv x '(a b c 1 2 3 1.0 2.0 3.0 #c(1 0.0) #c(2 0.0) #c(3 0.0))))
389 (assert!
390 (memberv x '(d e f 1 2 3 4.0 5.0 6.0 #c(4 0.0) #c(5 0.0) #c(6 0.0))))
391 (and (known? (andv (numberpv x) (realpv x) (integerpv x)))
392 (not (known? (notv (numberpv x))))
393 (not (known? (notv (realpv x))))
394 (not (known? (notv (integerpv x)))))))
396 (defun test33 ()
397 (let ((x (make-variable)))
398 (assert!
399 (memberv x '(a b c 1 2 3 1.0 2.0 3.0 #c(1 0.0) #c(2 0.0) #c(3 0.0))))
400 (assert!
401 (memberv x '(d e f 4 5 6 1.0 2.0 3.0 #c(4 0.0) #c(5 0.0) #c(6 0.0))))
402 (and (known? (andv (numberpv x) (realpv x) (notv (integerpv x))))
403 (not (known? (notv (numberpv x))))
404 (not (known? (notv (realpv x))))
405 (not (known? (integerpv x))))))
407 (defun test34 ()
408 (let ((x (make-variable)))
409 (assert!
410 (memberv x '(a b c 1 2 3 1.0 2.0 3.0 #c(1 0.0) #c(2 0.0) #c(3 0.0))))
411 (assert!
412 (memberv x '(d e f 4 5 6 4.0 5.0 6.0 #c(1 0.0) #c(2 0.0) #c(3 0.0))))
413 (and (known? (andv (numberpv x) (notv (realpv x)) (notv (integerpv x))))
414 (not (known? (notv (numberpv x))))
415 (not (known? (realpv x)))
416 (not (known? (integerpv x))))))
418 (defun test35 ()
419 (let ((x (make-variable)))
420 (assert!
421 (memberv x '(a b c 1 2 3 1.0 2.0 3.0 #c(1 0.0) #c(2 0.0) #c(3 0.0))))
422 (assert!
423 (memberv x '(b c d 2 3 4 2.0 3.0 4.0 #c(2 0.0) #c(3 0.0) #c(4 0.0))))
424 (equal-set? (all-values (solution x (static-ordering #'linear-force)))
425 '(b c 2 3 2.0 3.0 #c(2 0.0) #c(3 0.0)))))
427 (defun test36 ()
428 (let ((x (make-variable)))
429 (assert!
430 (memberv x '(a b c 1 2 3 1.0 2.0 3.0 #c(1 0.0) #c(2 0.0) #c(3 0.0))))
431 (assert!
432 (memberv x '(b c d 2 3 4 2.0 3.0 4.0 #c(2 0.0) #c(3 0.0) #c(4 0.0))))
433 (assert! (numberpv x))
434 (equal-set? (all-values (solution x (static-ordering #'linear-force)))
435 '(2 3 2.0 3.0 #c(2 0.0) #c(3 0.0)))))
437 (defun test37 ()
438 (let ((x (make-variable)))
439 (assert!
440 (memberv x '(a b c 1 2 3 1.0 2.0 3.0 #c(1 0.0) #c(2 0.0) #c(3 0.0))))
441 (assert!
442 (memberv x '(b c d 2 3 4 2.0 3.0 4.0 #c(2 0.0) #c(3 0.0) #c(4 0.0))))
443 (assert! (notv (numberpv x)))
444 (equal-set? (all-values (solution x (static-ordering #'linear-force)))
445 '(b c))))
447 (defun test38 ()
448 (let ((x (make-variable)))
449 (assert!
450 (memberv x '(a b c 1 2 3 1.0 2.0 3.0 #c(1 0.0) #c(2 0.0) #c(3 0.0))))
451 (assert!
452 (memberv x '(b c d 2 3 4 2.0 3.0 4.0 #c(2 0.0) #c(3 0.0) #c(4 0.0))))
453 (assert! (realpv x))
454 (equal-set? (all-values (solution x (static-ordering #'linear-force)))
455 '(2 3 2.0 3.0))))
457 (defun test39 ()
458 (let ((x (make-variable)))
459 (assert!
460 (memberv x '(a b c 1 2 3 1.0 2.0 3.0 #c(1 0.0) #c(2 0.0) #c(3 0.0))))
461 (assert!
462 (memberv x '(b c d 2 3 4 2.0 3.0 4.0 #c(2 0.0) #c(3 0.0) #c(4 0.0))))
463 (assert! (notv (realpv x)))
464 (equal-set? (all-values (solution x (static-ordering #'linear-force)))
465 '(b c #c(2 0.0) #c(3 0.0)))))
467 (defun test40 ()
468 (let ((x (make-variable)))
469 (assert!
470 (memberv x '(a b c 1 2 3 1.0 2.0 3.0 #c(1 0.0) #c(2 0.0) #c(3 0.0))))
471 (assert!
472 (memberv x '(b c d 2 3 4 2.0 3.0 4.0 #c(2 0.0) #c(3 0.0) #c(4 0.0))))
473 (assert! (integerpv x))
474 (equal-set? (all-values (solution x (static-ordering #'linear-force)))
475 '(2 3))))
477 (defun test41 ()
478 (let ((x (make-variable)))
479 (assert!
480 (memberv x '(a b c 1 2 3 1.0 2.0 3.0 #c(1 0.0) #c(2 0.0) #c(3 0.0))))
481 (assert!
482 (memberv x '(b c d 2 3 4 2.0 3.0 4.0 #c(2 0.0) #c(3 0.0) #c(4 0.0))))
483 (assert! (notv (integerpv x)))
484 (equal-set? (all-values (solution x (static-ordering #'linear-force)))
485 '(b c 2.0 3.0 #c(2 0.0) #c(3 0.0)))))
487 (defun test42 ()
488 (let ((x (make-variable)))
489 (assert!
490 (memberv x '(a b c 1 2 3 1.0 2.0 3.0 #c(1 0.0) #c(2 0.0) #c(3 0.0))))
491 (assert!
492 (memberv x '(b c d 2 3 4 2.0 3.0 4.0 #c(2 0.0) #c(3 0.0) #c(4 0.0))))
493 (assert! (numberpv x))
494 (assert! (notv (integerpv x)))
495 (equal-set? (all-values (solution x (static-ordering #'linear-force)))
496 '(2.0 3.0 #c(2 0.0) #c(3 0.0)))))
498 (defun test43 ()
499 (let ((x (make-variable)))
500 (assert!
501 (memberv x '(a b c 1 2 3 1.0 2.0 3.0 #c(1 0.0) #c(2 0.0) #c(3 0.0))))
502 (assert!
503 (memberv x '(b c d 2 3 4 2.0 3.0 4.0 #c(2 0.0) #c(3 0.0) #c(4 0.0))))
504 (assert! (numberpv x))
505 (assert! (notv (realpv x)))
506 (equal-set? (all-values (solution x (static-ordering #'linear-force)))
507 '(#c(2 0.0) #c(3 0.0)))))
509 (defun test44 ()
510 (let ((x (make-variable)))
511 (assert!
512 (memberv x '(a b c 1 2 3 1.0 2.0 3.0 #c(1 0.0) #c(2 0.0) #c(3 0.0))))
513 (assert!
514 (memberv x '(b c d 2 3 4 2.0 3.0 4.0 #c(2 0.0) #c(3 0.0) #c(4 0.0))))
515 (assert! (realpv x))
516 (assert! (notv (integerpv x)))
517 (equal-set? (all-values (solution x (static-ordering #'linear-force)))
518 '(2.0 3.0))))
520 (defun test45 ()
521 (let* ((x (make-variable))
523 (memberv x '(a b c 1 2 3 1.0 2.0 3.0 #c(1 0.0) #c(2 0.0) #c(3 0.0))))
525 (memberv x '(d e f 4 5 6 4.0 5.0 6.0 #c(4 0.0) #c(5 0.0) #c(6 0.0)))))
526 (null (all-values (assert! p1) (assert! p2)))))
528 (defun test46 ()
529 (let* ((x (make-variable))
531 (memberv x '(a b c 1 2 3 1.0 2.0 3.0 #c(1 0.0) #c(2 0.0) #c(3 0.0))))
533 (memberv x '(a b c 4 5 6 4.0 5.0 6.0 #c(4 0.0) #c(5 0.0) #c(6 0.0))))
534 (p3 (numberpv x))
535 (p4 (notv (numberpv x)))
536 (p5 (realpv x))
537 (p6 (notv (realpv x)))
538 (p7 (integerpv x))
539 (p8 (notv (integerpv x))))
540 (assert! p1)
541 (assert! p2)
542 (and (not (known? p3))
543 (known? p4)
544 (not (known? p5))
545 (known? p6)
546 (not (known? p7))
547 (known? p8))))
549 (defun test47 ()
550 (let* ((x (make-variable))
552 (memberv x '(a b c 1 2 3 1.0 2.0 3.0 #c(1 0.0) #c(2 0.0) #c(3 0.0))))
554 (memberv x '(d e f 1 2 3 4.0 5.0 6.0 #c(4 0.0) #c(5 0.0) #c(6 0.0))))
555 (p3 (numberpv x))
556 (p4 (notv (numberpv x)))
557 (p5 (realpv x))
558 (p6 (notv (realpv x)))
559 (p7 (integerpv x))
560 (p8 (notv (integerpv x))))
561 (assert! p1)
562 (assert! p2)
563 (and (known? p3)
564 (not (known? p4))
565 (known? p5)
566 (not (known? p6))
567 (known? p7)
568 (not (known? p8)))))
570 (defun test48 ()
571 (let* ((x (make-variable))
573 (memberv x '(a b c 1 2 3 1.0 2.0 3.0 #c(1 0.0) #c(2 0.0) #c(3 0.0))))
575 (memberv x '(d e f 4 5 6 1.0 2.0 3.0 #c(4 0.0) #c(5 0.0) #c(6 0.0))))
576 (p3 (numberpv x))
577 (p4 (notv (numberpv x)))
578 (p5 (realpv x))
579 (p6 (notv (realpv x)))
580 (p7 (integerpv x))
581 (p8 (notv (integerpv x))))
582 (assert! p1)
583 (assert! p2)
584 (and (known? p3)
585 (not (known? p4))
586 (known? p5)
587 (not (known? p6))
588 (not (known? p7))
589 (known? p8))))
591 (defun test49 ()
592 (let* ((x (make-variable))
594 (memberv x '(a b c 1 2 3 1.0 2.0 3.0 #c(1 0.0) #c(2 0.0) #c(3 0.0))))
596 (memberv x '(d e f 4 5 6 4.0 5.0 6.0 #c(1 0.0) #c(2 0.0) #c(3 0.0))))
597 (p3 (numberpv x))
598 (p4 (notv (numberpv x)))
599 (p5 (realpv x))
600 (p6 (notv (realpv x)))
601 (p7 (integerpv x))
602 (p8 (notv (integerpv x))))
603 (assert! p1)
604 (assert! p2)
605 (and (known? p3)
606 (not (known? p4))
607 (not (known? p5))
608 (known? p6)
609 (not (known? p7))
610 (known? p8))))
612 (defun test50 ()
613 (let* ((x (make-variable))
615 (memberv x '(a b c 1 2 3 1.0 2.0 3.0 #c(1 0.0) #c(2 0.0) #c(3 0.0))))
617 (memberv x '(b c d 2 3 4 2.0 3.0 4.0 #c(2 0.0) #c(3 0.0) #c(4 0.0))))
618 (p3 (memberv x '(b c 2 3 2.0 3.0 #c(2 0.0) #c(3 0.0)))))
619 (assert! p1)
620 (assert! p2)
621 (known? p3)))
623 (defun test51 ()
624 (let* ((x (make-variable))
626 (memberv x '(a b c 1 2 3 1.0 2.0 3.0 #c(1 0.0) #c(2 0.0) #c(3 0.0))))
628 (memberv x '(b c d 2 3 4 2.0 3.0 4.0 #c(2 0.0) #c(3 0.0) #c(4 0.0))))
629 (p3 (memberv x '(2 3 2.0 3.0 #c(2 0.0) #c(3 0.0))))
630 (p4 (numberpv x)))
631 (assert! p1)
632 (assert! p2)
633 (assert! p4)
634 (known? p3)))
636 (defun test52 ()
637 (let* ((x (make-variable))
639 (memberv x '(a b c 1 2 3 1.0 2.0 3.0 #c(1 0.0) #c(2 0.0) #c(3 0.0))))
641 (memberv x '(b c d 2 3 4 2.0 3.0 4.0 #c(2 0.0) #c(3 0.0) #c(4 0.0))))
642 (p3 (memberv x '(b c)))
643 (p4 (notv (numberpv x))))
644 (assert! p1)
645 (assert! p2)
646 (assert! p4)
647 (known? p3)))
649 (defun test53 ()
650 (let* ((x (make-variable))
652 (memberv x '(a b c 1 2 3 1.0 2.0 3.0 #c(1 0.0) #c(2 0.0) #c(3 0.0))))
654 (memberv x '(b c d 2 3 4 2.0 3.0 4.0 #c(2 0.0) #c(3 0.0) #c(4 0.0))))
655 (p3 (memberv x '(2 3 2.0 3.0)))
656 (p4 (realpv x)))
657 (assert! p1)
658 (assert! p2)
659 (assert! p4)
660 (known? p3)))
662 (defun test54 ()
663 (let* ((x (make-variable))
665 (memberv x '(a b c 1 2 3 1.0 2.0 3.0 #c(1 0.0) #c(2 0.0) #c(3 0.0))))
667 (memberv x '(b c d 2 3 4 2.0 3.0 4.0 #c(2 0.0) #c(3 0.0) #c(4 0.0))))
668 (p3 (memberv x '(b c #c(2 0.0) #c(3 0.0))))
669 (p4 (notv (realpv x))))
670 (assert! p1)
671 (assert! p2)
672 (assert! p4)
673 (known? p3)))
675 (defun test55 ()
676 (let* ((x (make-variable))
678 (memberv x '(a b c 1 2 3 1.0 2.0 3.0 #c(1 0.0) #c(2 0.0) #c(3 0.0))))
680 (memberv x '(b c d 2 3 4 2.0 3.0 4.0 #c(2 0.0) #c(3 0.0) #c(4 0.0))))
681 (p3 (memberv x '(2 3)))
682 (p4 (integerpv x)))
683 (assert! p1)
684 (assert! p2)
685 (assert! p4)
686 (known? p3)))
688 (defun test56 ()
689 (let* ((x (make-variable))
691 (memberv x '(a b c 1 2 3 1.0 2.0 3.0 #c(1 0.0) #c(2 0.0) #c(3 0.0))))
693 (memberv x '(b c d 2 3 4 2.0 3.0 4.0 #c(2 0.0) #c(3 0.0) #c(4 0.0))))
694 (p3 (memberv x '(b c 2.0 3.0 #c(2 0.0) #c(3 0.0))))
695 (p4 (notv (integerpv x))))
696 (assert! p1)
697 (assert! p2)
698 (assert! p4)
699 (known? p3)))
701 (defun test57 ()
702 (let* ((x (make-variable))
704 (memberv x '(a b c 1 2 3 1.0 2.0 3.0 #c(1 0.0) #c(2 0.0) #c(3 0.0))))
706 (memberv x '(b c d 2 3 4 2.0 3.0 4.0 #c(2 0.0) #c(3 0.0) #c(4 0.0))))
707 (p3 (memberv x '(2.0 3.0 #c(2 0.0) #c(3 0.0))))
708 (p4 (andv (numberpv x) (notv (integerpv x)))))
709 (assert! p1)
710 (assert! p2)
711 (assert! p4)
712 (known? p3)))
714 (defun test58 ()
715 (let* ((x (make-variable))
717 (memberv x '(a b c 1 2 3 1.0 2.0 3.0 #c(1 0.0) #c(2 0.0) #c(3 0.0))))
719 (memberv x '(b c d 2 3 4 2.0 3.0 4.0 #c(2 0.0) #c(3 0.0) #c(4 0.0))))
720 (p3 (memberv x '(#c(2 0.0) #c(3 0.0))))
721 (p4 (andv (numberpv x) (notv (realpv x)))))
722 (assert! p1)
723 (assert! p2)
724 (assert! p4)
725 (known? p3)))
727 (defun test59 ()
728 (let* ((x (make-variable))
730 (memberv x '(a b c 1 2 3 1.0 2.0 3.0 #c(1 0.0) #c(2 0.0) #c(3 0.0))))
732 (memberv x '(b c d 2 3 4 2.0 3.0 4.0 #c(2 0.0) #c(3 0.0) #c(4 0.0))))
733 (p3 (memberv x '(2.0 3.0)))
734 (p4 (andv (realpv x) (notv (integerpv x)))))
735 (assert! p1)
736 (assert! p2)
737 (assert! p4)
738 (known? p3)))
740 (defun test60 ()
741 (let* ((x (make-variable))
742 (p1 (notv (memberv x '(a b c d))))
743 (p2 (memberv x '(c d e f g h)))
744 (p3 (notv (memberv x '(g h i j))))
745 (p4 (andv (memberv x '(e f)) (notv (memberv x '(a b c d g h i j z))))))
746 (assert! p1)
747 (assert! p2)
748 (assert! p3)
749 (known? p4)))
751 (defun test61 ()
752 (let* ((x (make-variable))
753 (p1 (notv (memberv x '(a b c d))))
754 (p2 (memberv x '(c d g h)))
755 (p3 (notv (memberv x '(g h i j)))))
756 (null (all-values (assert! p1) (assert! p2) (assert! p3)))))
758 (defun test62 ()
759 (let ((x (an-integer-betweenv 0 4))
760 (y (an-integer-betweenv 8 12))
761 (z (a-member-ofv '(-1 6 13))))
762 (assert! (<=v x z y))
763 (known? (memberv z '(6)))))
765 (defun test63 ()
766 (let* ((x (make-variable))
767 (y (make-variable))
768 (z (make-variable))
769 (p1 (andv (integerpv x) (>=v x 0) (<=v x 4)))
770 (p2 (andv (integerpv y) (>=v y 8) (<=v y 12)))
771 (p3 (memberv z '(-1 6 13)))
772 (p4 (<=v x z y))
773 (p5 (andv (memberv z '(6)) (notv (memberv z '(-1 13))))))
774 (assert! p1)
775 (assert! p2)
776 (assert! p3)
777 (assert! p4)
778 (known? p5)))
780 (defun test64-internal (n)
781 (let ((q (make-array (list n n)))
782 (top t))
783 (iterate (for i from 0 below n)
784 (iterate (for j from 0 below n)
785 (setf (aref q i j) (make-variable))
786 (assert! (booleanpv (aref q i j)))))
787 (iterate (for i from 0 below n)
788 (for row = nil)
789 (iterate (for j from 0 below n)
790 (setf row (orv row (aref q i j))))
791 (setf top (andv top row)))
792 (iterate (for j from 0 below n)
793 (for column = nil)
794 (iterate (for i from 0 below n)
795 (setf column (orv column (aref q i j))))
796 (setf top (andv top column)))
797 (iterate
798 (for i from 0 below n)
799 (iterate
800 (for j from 0 below n)
801 (iterate
802 (for k from 0 below n)
803 (if (/= j k)
804 (setf top (andv top (notv (andv (aref q i j) (aref q i k))))))
805 (if (/= i k)
806 (setf top (andv top (notv (andv (aref q i j) (aref q k j))))))
807 (if (and (/= k 0) (< (+ i k) n) (< (+ j k) n))
808 (setf top
809 (andv top (notv (andv (aref q i j) (aref q (+ i k) (+ j k)))))))
810 (if (and (/= k 0) (< (+ i k) n) (>= (- j k) 0))
811 (setf top
812 (andv top (notv (andv (aref q i j) (aref q (+ i k) (- j k)))))))
813 (if (and (/= k 0) (>= (- i k) 0) (< (+ j k) n))
814 (setf top
815 (andv top (notv (andv (aref q i j) (aref q (- i k) (+ j k)))))))
816 (if (and (/= k 0) (>= (- i k) 0) (>= (- j k) 0))
817 (setf top
818 (andv top (notv (andv (aref q i j)
819 (aref q (- i k) (- j k))))))))))
820 (assert! top)
821 (length
822 (all-values
823 (solution
824 (iterate outer
825 (for i from 0 below n)
826 (iterate (for j from 0 below n)
827 (in outer (collect (aref q i j)))))
828 (static-ordering #'linear-force))))))
830 (defun test64 () (= (test64-internal 8) 92))
832 (defun test65-internal (n)
833 (let ((q (make-array (list n n))))
834 (iterate (for i from 0 below n)
835 (iterate (for j from 0 below n)
836 (setf (aref q i j) (make-variable))
837 (assert! (booleanpv (aref q i j)))))
838 (iterate (for i from 0 below n)
839 (for row = nil)
840 (iterate (for j from 0 below n)
841 (setf row (orv row (aref q i j))))
842 (assert! row))
843 (iterate (for j from 0 below n)
844 (for column = nil)
845 (iterate (for i from 0 below n)
846 (setf column (orv column (aref q i j))))
847 (assert! column))
848 (iterate
849 (for i from 0 below n)
850 (iterate
851 (for j from 0 below n)
852 (iterate
853 (for k from 0 below n)
854 (if (/= j k)
855 (assert! (notv (andv (aref q i j) (aref q i k)))))
856 (if (/= i k)
857 (assert! (notv (andv (aref q i j) (aref q k j)))))
858 (if (and (/= k 0) (< (+ i k) n) (< (+ j k) n))
859 (assert! (notv (andv (aref q i j) (aref q (+ i k) (+ j k))))))
860 (if (and (/= k 0) (< (+ i k) n) (>= (- j k) 0))
861 (assert! (notv (andv (aref q i j) (aref q (+ i k) (- j k))))))
862 (if (and (/= k 0) (>= (- i k) 0) (< (+ j k) n))
863 (assert! (notv (andv (aref q i j) (aref q (- i k) (+ j k))))))
864 (if (and (/= k 0) (>= (- i k) 0) (>= (- j k) 0))
865 (assert! (notv (andv (aref q i j) (aref q (- i k) (- j k)))))))))
866 (length
867 (all-values
868 (solution
869 (iterate outer
870 (for i from 0 below n)
871 (iterate (for j from 0 below n)
872 (in outer (collect (aref q i j)))))
873 (static-ordering #'linear-force))))))
875 (defun test65 () (= (test65-internal 8) 92))
877 (defun test66 ()
878 (let ((x (an-integer-betweenv 1 4))
879 (y (a-member-ofv '(5 7))))
880 (known? (funcallv #'(lambda (x y z) (< x y z)) x y 10))))
882 (defun test67 ()
883 (let ((x (an-integer-betweenv 1 4))
884 (y (a-member-ofv '(5 7))))
885 (known? (notv (funcallv #'(lambda (x y z) (> x y z)) x y 10)))))
887 (defun test68 ()
888 (let ((w (an-integer-betweenv 1 4))
889 (x (a-member-ofv '(5 7)))
890 (y (a-member-ofv '(8 10))))
891 (known? (applyv #'(lambda (w x y z) (< w x y z)) w x (list y 11)))))
893 (defun test69 ()
894 (let ((w (an-integer-betweenv 1 4))
895 (x (a-member-ofv '(5 7)))
896 (y (a-member-ofv '(8 10))))
897 (known? (notv (applyv #'(lambda (w x y z) (> w x y z)) w x (list y 11))))))
899 (defun prime-ordeal ()
900 (let ((bug? nil))
901 (unless (test1) (format t "~% Test 1 failed") (setf bug? t))
902 (unless (test2) (format t "~% Test 2 failed") (setf bug? t))
903 (unless (test11) (format t "~% Test 11 failed") (setf bug? t))
904 (unless (test12) (format t "~% Test 12 failed") (setf bug? t))
905 (unless (test13) (format t "~% Test 13 failed") (setf bug? t))
906 (unless (test14) (format t "~% Test 14 failed") (setf bug? t))
907 (unless (test15) (format t "~% Test 15 failed") (setf bug? t))
908 (unless (test16) (format t "~% Test 16 failed") (setf bug? t))
909 (unless (test17) (format t "~% Test 17 failed") (setf bug? t))
910 (unless (test18) (format t "~% Test 18 failed") (setf bug? t))
911 (unless (test19) (format t "~% Test 19 failed") (setf bug? t))
912 (unless (test20) (format t "~% Test 20 failed") (setf bug? t))
913 (unless (test21) (format t "~% Test 21 failed") (setf bug? t))
914 (unless (test22) (format t "~% Test 22 failed") (setf bug? t))
915 (unless (test23) (format t "~% Test 23 failed") (setf bug? t))
916 (unless (test24) (format t "~% Test 24 failed") (setf bug? t))
917 (unless (test25) (format t "~% Test 25 failed") (setf bug? t))
918 (unless (test26) (format t "~% Test 26 failed") (setf bug? t))
919 (unless (test27) (format t "~% Test 27 failed") (setf bug? t))
920 (unless (test28) (format t "~% Test 28 failed") (setf bug? t))
921 (unless (test29) (format t "~% Test 29 failed") (setf bug? t))
922 (unless (test30) (format t "~% Test 30 failed") (setf bug? t))
923 (unless (test31) (format t "~% Test 31 failed") (setf bug? t))
924 (unless (test32) (format t "~% Test 32 failed") (setf bug? t))
925 (unless (test33) (format t "~% Test 33 failed") (setf bug? t))
926 (unless (test34) (format t "~% Test 34 failed") (setf bug? t))
927 (unless (test35) (format t "~% Test 35 failed") (setf bug? t))
928 (unless (test36) (format t "~% Test 36 failed") (setf bug? t))
929 (unless (test37) (format t "~% Test 37 failed") (setf bug? t))
930 (unless (test38) (format t "~% Test 38 failed") (setf bug? t))
931 (unless (test39) (format t "~% Test 39 failed") (setf bug? t))
932 (unless (test40) (format t "~% Test 40 failed") (setf bug? t))
933 (unless (test41) (format t "~% Test 41 failed") (setf bug? t))
934 (unless (test42) (format t "~% Test 42 failed") (setf bug? t))
935 (unless (test43) (format t "~% Test 43 failed") (setf bug? t))
936 (unless (test44) (format t "~% Test 44 failed") (setf bug? t))
937 (unless (test45) (format t "~% Test 45 failed") (setf bug? t))
938 (unless (test46) (format t "~% Test 46 failed") (setf bug? t))
939 (unless (test47) (format t "~% Test 47 failed") (setf bug? t))
940 (unless (test48) (format t "~% Test 48 failed") (setf bug? t))
941 (unless (test49) (format t "~% Test 49 failed") (setf bug? t))
942 (unless (test50) (format t "~% Test 50 failed") (setf bug? t))
943 (unless (test51) (format t "~% Test 51 failed") (setf bug? t))
944 (unless (test52) (format t "~% Test 52 failed") (setf bug? t))
945 (unless (test53) (format t "~% Test 53 failed") (setf bug? t))
946 (unless (test54) (format t "~% Test 54 failed") (setf bug? t))
947 (unless (test55) (format t "~% Test 55 failed") (setf bug? t))
948 (unless (test56) (format t "~% Test 56 failed") (setf bug? t))
949 (unless (test57) (format t "~% Test 57 failed") (setf bug? t))
950 (unless (test58) (format t "~% Test 58 failed") (setf bug? t))
951 (unless (test59) (format t "~% Test 59 failed") (setf bug? t))
952 (unless (test60) (format t "~% Test 60 failed") (setf bug? t))
953 (unless (test61) (format t "~% Test 61 failed") (setf bug? t))
954 (unless (test62) (format t "~% Test 62 failed") (setf bug? t))
955 (unless (test63) (format t "~% Test 63 failed") (setf bug? t))
956 (unless (test64) (format t "~% Test 64 failed") (setf bug? t))
957 (unless (test65) (format t "~% Test 65 failed") (setf bug? t))
958 (unless (test66) (format t "~% Test 66 failed") (setf bug? t))
959 (unless (test67) (format t "~% Test 67 failed") (setf bug? t))
960 (unless (test68) (format t "~% Test 68 failed") (setf bug? t))
961 (unless (test69) (format t "~% Test 69 failed") (setf bug? t))
962 (if bug? (error "Screamer has a bug")))
965 ;;; Tam V'Nishlam Shevah L'El Borei Olam