1 ;;;; numbers.test --- tests guile's numbers -*- scheme -*-
2 ;;;; Copyright (C) 2000, 2001 Free Software Foundation, Inc.
4 ;;;; This program is free software; you can redistribute it and/or modify
5 ;;;; it under the terms of the GNU General Public License as published by
6 ;;;; the Free Software Foundation; either version 2, or (at your option)
7 ;;;; any later version.
9 ;;;; This program is distributed in the hope that it will be useful,
10 ;;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
11 ;;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 ;;;; GNU General Public License for more details.
14 ;;;; You should have received a copy of the GNU General Public License
15 ;;;; along with this software; see the file COPYING. If not, write to
16 ;;;; the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
17 ;;;; Boston, MA 02111-1307 USA
19 ;;;; As a special exception, the Free Software Foundation gives permission
20 ;;;; for additional uses of the text contained in its release of GUILE.
22 ;;;; The exception is that, if you link the GUILE library with other files
23 ;;;; to produce an executable, this does not by itself cause the
24 ;;;; resulting executable to be covered by the GNU General Public License.
25 ;;;; Your use of that executable is in no way restricted on account of
26 ;;;; linking the GUILE library code into it.
28 ;;;; This exception does not however invalidate any other reasons why
29 ;;;; the executable file might be covered by the GNU General Public License.
31 ;;;; This exception applies only to the code released by the
32 ;;;; Free Software Foundation under the name GUILE. If you copy
33 ;;;; code from other Free Software Foundation releases into a copy of
34 ;;;; GUILE, as the General Public License permits, the exception does
35 ;;;; not apply to the code that you add in this way. To avoid misleading
36 ;;;; anyone as to the status of such modified files, you must delete
37 ;;;; this exception notice from them.
39 ;;;; If you write modifications of your own for GUILE, it is your choice
40 ;;;; whether to permit this exception to apply to your modifications.
41 ;;;; If you do not wish that, delete this exception notice.
43 (use-modules (ice-9 documentation))
49 (define exception:numerical-overflow
50 (cons 'numerical-overflow "^Numerical overflow"))
52 (define (documented? object)
53 (not (not (object-documentation object))))
56 (inexact->exact (+ (/ (log (+ most-positive-fixnum 1)) (log 2)) 1)))
58 (define fixnum-min most-negative-fixnum)
59 (define fixnum-max most-positive-fixnum)
65 (with-test-prefix "exact?"
67 (pass-if "documented?"
70 (with-test-prefix "integers"
78 (pass-if "fixnum-max + 1"
79 (exact? (+ fixnum-max 1)))
84 (pass-if "fixnum-min - 1"
85 (exact? (- fixnum-min 1))))
87 (with-test-prefix "reals"
89 ;; (FIXME: need better examples.)
91 (pass-if "sqrt (fixnum-max^2 - 1)"
92 (eq? #f (exact? (sqrt (- (expt fixnum-max 2) 1)))))
94 (pass-if "sqrt ((fixnum-max+1)^2 - 1)"
95 (eq? #f (exact? (sqrt (- (expt (+ fixnum-max 1) 2) 1)))))))
101 (with-test-prefix "odd?"
102 (pass-if (documented? odd?))
105 (expect-fail (odd? 0))
106 (expect-fail (odd? 2))
107 (expect-fail (odd? -2))
108 (pass-if (odd? (+ (* 2 fixnum-max) 1)))
109 (expect-fail (odd? (* 2 fixnum-max)))
110 (pass-if (odd? (- (* 2 fixnum-min) 1)))
111 (expect-fail (odd? (* 2 fixnum-min))))
117 (with-test-prefix "even?"
118 (pass-if (documented? even?))
122 (expect-fail (even? 1))
123 (expect-fail (even? -1))
124 (expect-fail (even? (+ (* 2 fixnum-max) 1)))
125 (pass-if (even? (* 2 fixnum-max)))
126 (expect-fail (even? (- (* 2 fixnum-min) 1)))
127 (pass-if (even? (* 2 fixnum-min))))
133 (with-test-prefix "inf?"
134 (pass-if (documented? inf?))
135 (pass-if (inf? (inf)))
136 ;; FIXME: what are the expected behaviors?
137 ;; (pass-if (inf? (/ 1.0 0.0))
138 ;; (pass-if (inf? (/ 1 0.0))
139 (expect-fail (inf? 0))
140 (expect-fail (inf? 42.0))
141 (expect-fail (inf? (+ fixnum-max 1)))
142 (expect-fail (inf? (- fixnum-min 1))))
148 (with-test-prefix "nan?"
149 (pass-if (documented? nan?))
150 (pass-if (nan? (nan)))
151 ;; FIXME: other ways we should be able to generate NaN?
152 (expect-fail (nan? 0))
153 (expect-fail (nan? 42.0))
154 (expect-fail (nan? (+ fixnum-max 1)))
155 (expect-fail (nan? (- fixnum-min 1))))
161 (with-test-prefix "abs"
162 (pass-if (documented? abs))
163 (pass-if (zero? (abs 0)))
164 (pass-if (= 1 (abs 1)))
165 (pass-if (= 1 (abs -1)))
166 (pass-if (= (+ fixnum-max 1) (abs (+ fixnum-max 1))))
167 (pass-if (= (+ (- fixnum-min) 1) (abs (- fixnum-min 1))))
168 (pass-if (positive? (abs 1.0)))
169 (pass-if (positive? (abs -1.0))))
175 (with-test-prefix "quotient"
177 (expect-fail "documented?"
178 (documented? quotient))
180 (with-test-prefix "0 / n"
183 (eqv? 0 (quotient 0 1)))
186 (eqv? 0 (quotient 0 -1)))
189 (eqv? 0 (quotient 0 2)))
191 (pass-if "n = fixnum-max"
192 (eqv? 0 (quotient 0 fixnum-max)))
194 (pass-if "n = fixnum-max + 1"
195 (eqv? 0 (quotient 0 (+ fixnum-max 1))))
197 (pass-if "n = fixnum-min"
198 (eqv? 0 (quotient 0 fixnum-min)))
200 (pass-if "n = fixnum-min - 1"
201 (eqv? 0 (quotient 0 (- fixnum-min 1)))))
203 (with-test-prefix "1 / n"
206 (eqv? 1 (quotient 1 1)))
209 (eqv? -1 (quotient 1 -1)))
212 (eqv? 0 (quotient 1 2)))
214 (pass-if "n = fixnum-max"
215 (eqv? 0 (quotient 1 fixnum-max)))
217 (pass-if "n = fixnum-max + 1"
218 (eqv? 0 (quotient 1 (+ fixnum-max 1))))
220 (pass-if "n = fixnum-min"
221 (eqv? 0 (quotient 1 fixnum-min)))
223 (pass-if "n = fixnum-min - 1"
224 (eqv? 0 (quotient 1 (- fixnum-min 1)))))
226 (with-test-prefix "-1 / n"
229 (eqv? -1 (quotient -1 1)))
232 (eqv? 1 (quotient -1 -1)))
235 (eqv? 0 (quotient -1 2)))
237 (pass-if "n = fixnum-max"
238 (eqv? 0 (quotient -1 fixnum-max)))
240 (pass-if "n = fixnum-max + 1"
241 (eqv? 0 (quotient -1 (+ fixnum-max 1))))
243 (pass-if "n = fixnum-min"
244 (eqv? 0 (quotient -1 fixnum-min)))
246 (pass-if "n = fixnum-min - 1"
247 (eqv? 0 (quotient -1 (- fixnum-min 1)))))
249 (with-test-prefix "fixnum-max / n"
252 (eqv? fixnum-max (quotient fixnum-max 1)))
255 (eqv? (- fixnum-max) (quotient fixnum-max -1)))
258 (eqv? fixnum-max (+ (* (quotient fixnum-max 2) 2) 1)))
260 (pass-if "n = fixnum-max"
261 (eqv? 1 (quotient fixnum-max fixnum-max)))
263 (pass-if "n = fixnum-max + 1"
264 (eqv? 0 (quotient fixnum-max (+ fixnum-max 1))))
266 (pass-if "n = fixnum-min"
267 (eqv? 0 (quotient fixnum-max fixnum-min)))
269 (pass-if "n = fixnum-min - 1"
270 (eqv? 0 (quotient fixnum-max (- fixnum-min 1)))))
272 (with-test-prefix "(fixnum-max + 1) / n"
275 (eqv? (+ fixnum-max 1) (quotient (+ fixnum-max 1) 1)))
278 (eqv? (- (+ fixnum-max 1)) (quotient (+ fixnum-max 1) -1)))
281 (eqv? (+ fixnum-max 1) (* (quotient (+ fixnum-max 1) 2) 2)))
283 (pass-if "n = fixnum-max"
284 (eqv? 1 (quotient (+ fixnum-max 1) fixnum-max)))
286 (pass-if "n = fixnum-max + 1"
287 (eqv? 1 (quotient (+ fixnum-max 1) (+ fixnum-max 1))))
289 (pass-if "n = fixnum-min"
290 (eqv? -1 (quotient (+ fixnum-max 1) fixnum-min)))
292 (pass-if "n = fixnum-min - 1"
293 (eqv? 0 (quotient (+ fixnum-max 1) (- fixnum-min 1)))))
295 (with-test-prefix "fixnum-min / n"
298 (eqv? fixnum-min (quotient fixnum-min 1)))
301 (eqv? (- fixnum-min) (quotient fixnum-min -1)))
304 (eqv? fixnum-min (* (quotient fixnum-min 2) 2)))
306 (pass-if "n = fixnum-max"
307 (eqv? -1 (quotient fixnum-min fixnum-max)))
309 (pass-if "n = fixnum-max + 1"
310 (eqv? -1 (quotient fixnum-min (+ fixnum-max 1))))
312 (pass-if "n = fixnum-min"
313 (eqv? 1 (quotient fixnum-min fixnum-min)))
315 (pass-if "n = fixnum-min - 1"
316 (eqv? 0 (quotient fixnum-min (- fixnum-min 1)))))
318 (with-test-prefix "(fixnum-min - 1) / n"
321 (eqv? (- fixnum-min 1) (quotient (- fixnum-min 1) 1)))
324 (eqv? (- (- fixnum-min 1)) (quotient (- fixnum-min 1) -1)))
327 (eqv? fixnum-min (* (quotient (- fixnum-min 1) 2) 2)))
329 (pass-if "n = fixnum-max"
330 (eqv? -1 (quotient (- fixnum-min 1) fixnum-max)))
332 (pass-if "n = fixnum-max + 1"
333 (eqv? -1 (quotient (- fixnum-min 1) (+ fixnum-max 1))))
335 (pass-if "n = fixnum-min"
336 (eqv? 1 (quotient (- fixnum-min 1) fixnum-min)))
338 (pass-if "n = fixnum-min - 1"
339 (eqv? 1 (quotient (- fixnum-min 1) (- fixnum-min 1)))))
341 ;; Positive dividend and divisor
344 (eqv? 5 (quotient 35 7)))
346 ;; Negative dividend, positive divisor
349 (eqv? -5 (quotient -35 7)))
351 ;; Positive dividend, negative divisor
354 (eqv? -5 (quotient 35 -7)))
356 ;; Negative dividend and divisor
359 (eqv? 5 (quotient -35 -7)))
361 ;; Are numerical overflows detected correctly?
363 (with-test-prefix "division by zero"
365 (pass-if-exception "(quotient 1 0)"
366 exception:numerical-overflow
369 (pass-if-exception "(quotient bignum 0)"
370 exception:numerical-overflow
371 (quotient (+ fixnum-max 1) 0)))
373 ;; Are wrong type arguments detected correctly?
381 (with-test-prefix "remainder"
383 (expect-fail "documented?"
384 (documented? remainder))
386 (with-test-prefix "0 / n"
389 (eqv? 0 (remainder 0 1)))
392 (eqv? 0 (remainder 0 -1)))
394 (pass-if "n = fixnum-max"
395 (eqv? 0 (remainder 0 fixnum-max)))
397 (pass-if "n = fixnum-max + 1"
398 (eqv? 0 (remainder 0 (+ fixnum-max 1))))
400 (pass-if "n = fixnum-min"
401 (eqv? 0 (remainder 0 fixnum-min)))
403 (pass-if "n = fixnum-min - 1"
404 (eqv? 0 (remainder 0 (- fixnum-min 1)))))
406 (with-test-prefix "1 / n"
409 (eqv? 0 (remainder 1 1)))
412 (eqv? 0 (remainder 1 -1)))
414 (pass-if "n = fixnum-max"
415 (eqv? 1 (remainder 1 fixnum-max)))
417 (pass-if "n = fixnum-max + 1"
418 (eqv? 1 (remainder 1 (+ fixnum-max 1))))
420 (pass-if "n = fixnum-min"
421 (eqv? 1 (remainder 1 fixnum-min)))
423 (pass-if "n = fixnum-min - 1"
424 (eqv? 1 (remainder 1 (- fixnum-min 1)))))
426 (with-test-prefix "-1 / n"
429 (eqv? 0 (remainder -1 1)))
432 (eqv? 0 (remainder -1 -1)))
434 (pass-if "n = fixnum-max"
435 (eqv? -1 (remainder -1 fixnum-max)))
437 (pass-if "n = fixnum-max + 1"
438 (eqv? -1 (remainder -1 (+ fixnum-max 1))))
440 (pass-if "n = fixnum-min"
441 (eqv? -1 (remainder -1 fixnum-min)))
443 (pass-if "n = fixnum-min - 1"
444 (eqv? -1 (remainder -1 (- fixnum-min 1)))))
446 (with-test-prefix "fixnum-max / n"
449 (eqv? 0 (remainder fixnum-max 1)))
452 (eqv? 0 (remainder fixnum-max -1)))
454 (pass-if "n = fixnum-max"
455 (eqv? 0 (remainder fixnum-max fixnum-max)))
457 (pass-if "n = fixnum-max + 1"
458 (eqv? fixnum-max (remainder fixnum-max (+ fixnum-max 1))))
460 (pass-if "n = fixnum-min"
461 (eqv? fixnum-max (remainder fixnum-max fixnum-min)))
463 (pass-if "n = fixnum-min - 1"
464 (eqv? fixnum-max (remainder fixnum-max (- fixnum-min 1)))))
466 (with-test-prefix "(fixnum-max + 1) / n"
469 (eqv? 0 (remainder (+ fixnum-max 1) 1)))
472 (eqv? 0 (remainder (+ fixnum-max 1) -1)))
474 (pass-if "n = fixnum-max"
475 (eqv? 1 (remainder (+ fixnum-max 1) fixnum-max)))
477 (pass-if "n = fixnum-max + 1"
478 (eqv? 0 (remainder (+ fixnum-max 1) (+ fixnum-max 1))))
480 (pass-if "n = fixnum-min"
481 (eqv? 0 (remainder (+ fixnum-max 1) fixnum-min)))
483 (pass-if "n = fixnum-min - 1"
484 (eqv? (+ fixnum-max 1) (remainder (+ fixnum-max 1) (- fixnum-min 1)))))
486 (with-test-prefix "fixnum-min / n"
489 (eqv? 0 (remainder fixnum-min 1)))
492 (eqv? 0 (remainder fixnum-min -1)))
494 (pass-if "n = fixnum-max"
495 (eqv? -1 (remainder fixnum-min fixnum-max)))
497 (pass-if "n = fixnum-max + 1"
498 (eqv? 0 (remainder fixnum-min (+ fixnum-max 1))))
500 (pass-if "n = fixnum-min"
501 (eqv? 0 (remainder fixnum-min fixnum-min)))
503 (pass-if "n = fixnum-min - 1"
504 (eqv? fixnum-min (remainder fixnum-min (- fixnum-min 1)))))
506 (with-test-prefix "(fixnum-min - 1) / n"
509 (eqv? 0 (remainder (- fixnum-min 1) 1)))
512 (eqv? 0 (remainder (- fixnum-min 1) -1)))
514 (pass-if "n = fixnum-max"
515 (eqv? -2 (remainder (- fixnum-min 1) fixnum-max)))
517 (pass-if "n = fixnum-max + 1"
518 (eqv? -1 (remainder (- fixnum-min 1) (+ fixnum-max 1))))
520 (pass-if "n = fixnum-min"
521 (eqv? -1 (remainder (- fixnum-min 1) fixnum-min)))
523 (pass-if "n = fixnum-min - 1"
524 (eqv? 0 (remainder (- fixnum-min 1) (- fixnum-min 1)))))
526 ;; Positive dividend and divisor
529 (eqv? 0 (remainder 35 7)))
531 ;; Negative dividend, positive divisor
534 (eqv? 0 (remainder -35 7)))
536 ;; Positive dividend, negative divisor
539 (eqv? 0 (remainder 35 -7)))
541 ;; Negative dividend and divisor
544 (eqv? 0 (remainder -35 -7)))
546 ;; Are numerical overflows detected correctly?
548 (with-test-prefix "division by zero"
550 (pass-if-exception "(remainder 1 0)"
551 exception:numerical-overflow
554 (pass-if-exception "(remainder bignum 0)"
555 exception:numerical-overflow
556 (remainder (+ fixnum-max 1) 0)))
558 ;; Are wrong type arguments detected correctly?
566 (with-test-prefix "modulo"
568 (expect-fail "documented?"
569 (documented? modulo))
571 (with-test-prefix "0 % n"
574 (eqv? 0 (modulo 0 1)))
577 (eqv? 0 (modulo 0 -1)))
579 (pass-if "n = fixnum-max"
580 (eqv? 0 (modulo 0 fixnum-max)))
582 (pass-if "n = fixnum-max + 1"
583 (eqv? 0 (modulo 0 (+ fixnum-max 1))))
585 (pass-if "n = fixnum-min"
586 (eqv? 0 (modulo 0 fixnum-min)))
588 (pass-if "n = fixnum-min - 1"
589 (eqv? 0 (modulo 0 (- fixnum-min 1)))))
591 (with-test-prefix "1 % n"
594 (eqv? 0 (modulo 1 1)))
597 (eqv? 0 (modulo 1 -1)))
599 (pass-if "n = fixnum-max"
600 (eqv? 1 (modulo 1 fixnum-max)))
602 (pass-if "n = fixnum-max + 1"
603 (eqv? 1 (modulo 1 (+ fixnum-max 1))))
605 (pass-if "n = fixnum-min"
606 (eqv? (+ fixnum-min 1) (modulo 1 fixnum-min)))
608 (pass-if "n = fixnum-min - 1"
609 (eqv? fixnum-min (modulo 1 (- fixnum-min 1)))))
611 (with-test-prefix "-1 % n"
614 (eqv? 0 (modulo -1 1)))
617 (eqv? 0 (modulo -1 -1)))
619 (pass-if "n = fixnum-max"
620 (eqv? (- fixnum-max 1) (modulo -1 fixnum-max)))
622 (pass-if "n = fixnum-max + 1"
623 (eqv? fixnum-max (modulo -1 (+ fixnum-max 1))))
625 (pass-if "n = fixnum-min"
626 (eqv? -1 (modulo -1 fixnum-min)))
628 (pass-if "n = fixnum-min - 1"
629 (eqv? -1 (modulo -1 (- fixnum-min 1)))))
631 (with-test-prefix "fixnum-max % n"
634 (eqv? 0 (modulo fixnum-max 1)))
637 (eqv? 0 (modulo fixnum-max -1)))
639 (pass-if "n = fixnum-max"
640 (eqv? 0 (modulo fixnum-max fixnum-max)))
642 (pass-if "n = fixnum-max + 1"
643 (eqv? fixnum-max (modulo fixnum-max (+ fixnum-max 1))))
645 (pass-if "n = fixnum-min"
646 (eqv? -1 (modulo fixnum-max fixnum-min)))
648 (pass-if "n = fixnum-min - 1"
649 (eqv? -2 (modulo fixnum-max (- fixnum-min 1)))))
651 (with-test-prefix "(fixnum-max + 1) % n"
654 (eqv? 0 (modulo (+ fixnum-max 1) 1)))
657 (eqv? 0 (modulo (+ fixnum-max 1) -1)))
659 (pass-if "n = fixnum-max"
660 (eqv? 1 (modulo (+ fixnum-max 1) fixnum-max)))
662 (pass-if "n = fixnum-max + 1"
663 (eqv? 0 (modulo (+ fixnum-max 1) (+ fixnum-max 1))))
665 (pass-if "n = fixnum-min"
666 (eqv? 0 (modulo (+ fixnum-max 1) fixnum-min)))
668 (pass-if "n = fixnum-min - 1"
669 (eqv? -1 (modulo (+ fixnum-max 1) (- fixnum-min 1)))))
671 (with-test-prefix "fixnum-min % n"
674 (eqv? 0 (modulo fixnum-min 1)))
677 (eqv? 0 (modulo fixnum-min -1)))
679 (pass-if "n = fixnum-max"
680 (eqv? (- fixnum-max 1) (modulo fixnum-min fixnum-max)))
682 (pass-if "n = fixnum-max + 1"
683 (eqv? 0 (modulo fixnum-min (+ fixnum-max 1))))
685 (pass-if "n = fixnum-min"
686 (eqv? 0 (modulo fixnum-min fixnum-min)))
688 (pass-if "n = fixnum-min - 1"
689 (eqv? fixnum-min (modulo fixnum-min (- fixnum-min 1)))))
691 (with-test-prefix "(fixnum-min - 1) % n"
694 (eqv? 0 (modulo (- fixnum-min 1) 1)))
697 (eqv? 0 (modulo (- fixnum-min 1) -1)))
699 (pass-if "n = fixnum-max"
700 (eqv? (- fixnum-max 2) (modulo (- fixnum-min 1) fixnum-max)))
702 (pass-if "n = fixnum-max + 1"
703 (eqv? fixnum-max (modulo (- fixnum-min 1) (+ fixnum-max 1))))
705 (pass-if "n = fixnum-min"
706 (eqv? -1 (modulo (- fixnum-min 1) fixnum-min)))
708 (pass-if "n = fixnum-min - 1"
709 (eqv? 0 (modulo (- fixnum-min 1) (- fixnum-min 1)))))
711 ;; Positive dividend and divisor
714 (eqv? 1 (modulo 13 4)))
716 (pass-if "2177452800 % 86400"
717 (eqv? 0 (modulo 2177452800 86400)))
719 ;; Negative dividend, positive divisor
722 (eqv? 3 (modulo -13 4)))
724 (pass-if "-2177452800 % 86400"
725 (eqv? 0 (modulo -2177452800 86400)))
727 ;; Positive dividend, negative divisor
730 (eqv? -3 (modulo 13 -4)))
732 (pass-if "2177452800 % -86400"
733 (eqv? 0 (modulo 2177452800 -86400)))
735 ;; Negative dividend and divisor
738 (eqv? -1 (modulo -13 -4)))
740 (pass-if "-2177452800 % -86400"
741 (eqv? 0 (modulo -2177452800 -86400)))
743 ;; Are numerical overflows detected correctly?
745 (with-test-prefix "division by zero"
747 (pass-if-exception "(modulo 1 0)"
748 exception:numerical-overflow
751 (pass-if-exception "(modulo bignum 0)"
752 exception:numerical-overflow
753 (modulo (+ fixnum-max 1) 0)))
755 ;; Are wrong type arguments detected correctly?
763 (with-test-prefix "gcd"
765 (expect-fail "documented?"
768 (with-test-prefix "(0 n)"
779 (pass-if "n = fixnum-max"
780 (eqv? fixnum-max (gcd 0 fixnum-max)))
782 (pass-if "n = fixnum-max + 1"
783 (eqv? (+ fixnum-max 1) (gcd 0 (+ fixnum-max 1))))
785 (pass-if "n = fixnum-min"
786 (eqv? (- fixnum-min) (gcd 0 fixnum-min)))
788 (pass-if "n = fixnum-min - 1"
789 (eqv? (- (- fixnum-min 1)) (gcd 0 (- fixnum-min 1)))))
791 (with-test-prefix "(1 n)"
802 (pass-if "n = fixnum-max"
803 (eqv? 1 (gcd 1 fixnum-max)))
805 (pass-if "n = fixnum-max + 1"
806 (eqv? 1 (gcd 1 (+ fixnum-max 1))))
808 (pass-if "n = fixnum-min"
809 (eqv? 1 (gcd 1 fixnum-min)))
811 (pass-if "n = fixnum-min - 1"
812 (eqv? 1 (gcd 1 (- fixnum-min 1)))))
814 (with-test-prefix "(-1 n)"
823 (eqv? 1 (gcd -1 -1)))
825 (pass-if "n = fixnum-max"
826 (eqv? 1 (gcd -1 fixnum-max)))
828 (pass-if "n = fixnum-max + 1"
829 (eqv? 1 (gcd -1 (+ fixnum-max 1))))
831 (pass-if "n = fixnum-min"
832 (eqv? 1 (gcd -1 fixnum-min)))
834 (pass-if "n = fixnum-min - 1"
835 (eqv? 1 (gcd -1 (- fixnum-min 1)))))
837 (with-test-prefix "(fixnum-max n)"
840 (eqv? fixnum-max (gcd fixnum-max 0)))
843 (eqv? 1 (gcd fixnum-max 1)))
846 (eqv? 1 (gcd fixnum-max -1)))
848 (pass-if "n = fixnum-max"
849 (eqv? fixnum-max (gcd fixnum-max fixnum-max)))
851 (pass-if "n = fixnum-max + 1"
852 (eqv? 1 (gcd fixnum-max (+ fixnum-max 1))))
854 (pass-if "n = fixnum-min"
855 (eqv? 1 (gcd fixnum-max fixnum-min)))
857 (pass-if "n = fixnum-min - 1"
858 (eqv? 1 (gcd fixnum-max (- fixnum-min 1)))))
860 (with-test-prefix "((+ fixnum-max 1) n)"
863 (eqv? (+ fixnum-max 1) (gcd (+ fixnum-max 1) 0)))
866 (eqv? 1 (gcd (+ fixnum-max 1) 1)))
869 (eqv? 1 (gcd (+ fixnum-max 1) -1)))
871 (pass-if "n = fixnum-max"
872 (eqv? 1 (gcd (+ fixnum-max 1) fixnum-max)))
874 (pass-if "n = fixnum-max + 1"
875 (eqv? (+ fixnum-max 1) (gcd (+ fixnum-max 1) (+ fixnum-max 1))))
877 (pass-if "n = fixnum-min"
878 (eqv? (+ fixnum-max 1) (gcd (+ fixnum-max 1) fixnum-min)))
880 (pass-if "n = fixnum-min - 1"
881 (eqv? 1 (gcd (+ fixnum-max 1) (- fixnum-min 1)))))
883 (with-test-prefix "(fixnum-min n)"
886 (eqv? (- fixnum-min) (gcd fixnum-min 0)))
889 (eqv? 1 (gcd fixnum-min 1)))
892 (eqv? 1 (gcd fixnum-min -1)))
894 (pass-if "n = fixnum-max"
895 (eqv? 1 (gcd fixnum-min fixnum-max)))
897 (pass-if "n = fixnum-max + 1"
898 (eqv? (+ fixnum-max 1) (gcd fixnum-min (+ fixnum-max 1))))
900 (pass-if "n = fixnum-min"
901 (eqv? (- fixnum-min) (gcd fixnum-min fixnum-min)))
903 (pass-if "n = fixnum-min - 1"
904 (eqv? 1 (gcd fixnum-min (- fixnum-min 1)))))
906 (with-test-prefix "((- fixnum-min 1) n)"
909 (eqv? (- (- fixnum-min 1)) (gcd (- fixnum-min 1) 0)))
912 (eqv? 1 (gcd (- fixnum-min 1) 1)))
915 (eqv? 1 (gcd (- fixnum-min 1) -1)))
917 (pass-if "n = fixnum-max"
918 (eqv? 1 (gcd (- fixnum-min 1) fixnum-max)))
920 (pass-if "n = fixnum-max + 1"
921 (eqv? 1 (gcd (- fixnum-min 1) (+ fixnum-max 1))))
923 (pass-if "n = fixnum-min"
924 (eqv? 1 (gcd (- fixnum-min 1) fixnum-min)))
926 (pass-if "n = fixnum-min - 1"
927 (eqv? (- (- fixnum-min 1)) (gcd (- fixnum-min 1) (- fixnum-min 1)))))
929 ;; Are wrong type arguments detected correctly?
937 (with-test-prefix "lcm"
938 ;; FIXME: more tests?
939 ;; (some of these are already in r4rs.test)
940 (expect-fail (documented? lcm))
941 (pass-if (= (lcm) 1))
942 (pass-if (= (lcm 32 -36) 288))
943 (let ((big-n 115792089237316195423570985008687907853269984665640564039457584007913129639936) ; 2 ^ 256
944 (lcm-of-big-n-and-11 1273712981610478149659280835095566986385969831322046204434033424087044426039296))
945 (pass-if (= lcm-of-big-n-and-11 (lcm big-n 11)))
946 (pass-if (= lcm-of-big-n-and-11 (lcm 11 big-n 11)))))
952 (with-test-prefix "number->string"
955 (string->number (number->string n radix) radix))))
957 (pass-if (documented? number->string))
958 (pass-if (string=? (number->string 0) "0"))
959 (pass-if (string=? (number->string 171) "171"))
960 (pass-if (= (+ fixnum-max 1) (num->str->num (+ fixnum-max 1) 10)))
961 (pass-if (= (- fixnum-min 1) (num->str->num (- fixnum-min 1) 10)))
962 (pass-if (= (inf) (num->str->num (inf) 10)))
963 (pass-if (= 1.3 (num->str->num 1.3 10)))))
969 (with-test-prefix "string->number"
971 (pass-if "string->number"
972 (documented? string->number))
974 (pass-if "non number strings"
975 (for-each (lambda (x) (if (string->number x) (throw 'fail)))
976 '("" "q" "1q" "6+7iq" "8+9q" "10+11" "13+" "18@19q" "20@q" "23@"
977 "+25iq" "26i" "-q" "-iq" "i" "5#.0" "8/" "10#11" ".#" "."
978 "#o.2" "3.4q" "15.16e17q" "18.19e+q" ".q" ".17#18" "10q" "#b2"
979 "#b3" "#b4" "#b5" "#b6" "#b7" "#b8" "#b9" "#ba" "#bb" "#bc"
980 "#bd" "#be" "#bf" "#q" "#b#b1" "#o#o1" "#d#d1" "#x#x1" "#e#e1"
984 (pass-if "valid number strings"
985 (for-each (lambda (couple)
988 (let ((x (string->number x)))
989 (if (or (eq? x #f) (not (eqv? x y))) (throw 'fail))))
992 ("#b0" 0) ("#B0" 0) ("#b1" 1) ("#B1" 1) ("#o0" 0) ("#O0" 0)
993 ("#o1" 1) ("#O1" 1) ("#o2" 2) ("#O2" 2) ("#o3" 3) ("#O3" 3)
994 ("#o4" 4) ("#O4" 4) ("#o5" 5) ("#O5" 5) ("#o6" 6) ("#O6" 6)
995 ("#o7" 7) ("#O7" 7) ("#d0" 0) ("#D0" 0) ("#d1" 1) ("#D1" 1)
996 ("#d2" 2) ("#D2" 2) ("#d3" 3) ("#D3" 3) ("#d4" 4) ("#D4" 4)
997 ("#d5" 5) ("#D5" 5) ("#d6" 6) ("#D6" 6) ("#d7" 7) ("#D7" 7)
998 ("#d8" 8) ("#D8" 8) ("#d9" 9) ("#D9" 9)
999 ("#xa" 10) ("#Xa" 10) ("#xb" 11) ("#Xb" 11)
1000 ("#xc" 12) ("#Xc" 12) ("#xd" 13) ("#Xd" 13)
1001 ("#xe" 14) ("#Xe" 14) ("#xf" 15) ("#Xf" 15)
1003 ("#o12345670" 2739128)
1004 ("#d1234567890" 1234567890)
1005 ("#x1234567890abcdef" 1311768467294899695)
1007 ("#e1" 1) ("#e1.2" 1) ("#i1.1" 1.1) ("#i1" 1.0)
1009 ("1" ,(1+ 0)) ("23" ,(+ 9 9 5)) ("-1" ,(- 0 1))
1010 ("-45" ,(- 0 45)) ("2#" 20.0) ("2##" 200.0) ("12##" 1200.0)
1013 ("1/1" 1) ("1/2" 0.5) ("-1/2" -0.5) ("1#/1" 10.0)
1014 ("10/1#" 1.0) ("1#/1#" 1.0) ("#e9/10" 1) ("#e10/1#" 1)
1015 ("#i6/8" 0.75) ("#i1/1" 1.0)
1017 ;; * <uinteger 10> <suffix>
1018 ("1e2" 100.0) ("1E2" 100.0) ("1s2" 100.0) ("1S2" 100.0)
1019 ("1f2" 100.0) ("1F2" 100.0) ("1d2" 100.0) ("1D2" 100.0)
1020 ("1l2" 100.0) ("1L2" 100.0) ("1e+2" 100.0) ("1e-2" 0.01)
1021 ;; * . <digit 10>+ #* <suffix>
1022 (".1" .1) (".0123456789" 123456789e-10) (".16#" 0.16)
1023 (".0123456789e10" 123456789.0) (".16#e3" 160.0) ("#d.3" 0.3)
1024 ;; * <digit 10>+ . <digit 10>* #* <suffix>
1025 ("3." ,(exact->inexact 3)) ("3.e0" ,(exact->inexact 3))
1026 ("3.1" ,(exact->inexact 31/10)) ("3.1e0" 3.1) ("3.1#" 3.1)
1028 ;; * <digit 10>+ #+ . #* <suffix>
1029 ("3#." 30.0) ("3#.e0" 30.0) ("3#.#" 30.0) ("3#.#e0" 30.0)
1031 ("1@0" 1.0) ("1@+0" 1.0) ("1@-0" 1.0)
1032 ("2+3i" ,(+ 2 (* 3 +i))) ("4-5i" ,(- 4 (* 5 +i)))
1033 ("1+i" 1+1i) ("1-i" 1-1i) ("+1i" 0+1i) ("-1i" 0-1i)
1034 ("+i" +1i) ("-i" -1i)))
1037 (pass-if-exception "exponent too big"
1038 exception:out-of-range
1039 (string->number "12.13e141414")))
1045 (with-test-prefix "number?"
1046 (pass-if (documented? number?))
1047 (pass-if (number? 0))
1048 (pass-if (number? 7))
1049 (pass-if (number? -7))
1050 (pass-if (number? 1.3))
1051 (pass-if (number? (+ 1 fixnum-max)))
1052 (pass-if (number? (- 1 fixnum-min)))
1053 (pass-if (number? 3+4i))
1054 (expect-fail (number? #\a))
1055 (expect-fail (number? "a"))
1056 (expect-fail (number? (make-vector 0)))
1057 (expect-fail (number? (cons 1 2)))
1058 (expect-fail (number? #t))
1059 (expect-fail (number? (lambda () #t)))
1060 (expect-fail (number? (current-input-port))))
1066 (with-test-prefix "complex?"
1067 (pass-if (documented? complex?))
1068 (pass-if (complex? 0))
1069 (pass-if (complex? 7))
1070 (pass-if (complex? -7))
1071 (pass-if (complex? (+ 1 fixnum-max)))
1072 (pass-if (complex? (- 1 fixnum-min)))
1073 (pass-if (complex? 1.3))
1074 (pass-if (complex? 3+4i))
1075 (expect-fail (complex? #\a))
1076 (expect-fail (complex? "a"))
1077 (expect-fail (complex? (make-vector 0)))
1078 (expect-fail (complex? (cons 1 2)))
1079 (expect-fail (complex? #t))
1080 (expect-fail (complex? (lambda () #t)))
1081 (expect-fail (complex? (current-input-port))))
1087 (with-test-prefix "real?"
1088 (pass-if (documented? real?))
1091 (pass-if (real? -7))
1092 (pass-if (real? (+ 1 fixnum-max)))
1093 (pass-if (real? (- 1 fixnum-min)))
1094 (pass-if (real? 1.3))
1095 (expect-fail (real? 3+4i))
1096 (expect-fail (real? #\a))
1097 (expect-fail (real? "a"))
1098 (expect-fail (real? (make-vector 0)))
1099 (expect-fail (real? (cons 1 2)))
1100 (expect-fail (real? #t))
1101 (expect-fail (real? (lambda () #t)))
1102 (expect-fail (real? (current-input-port))))
1105 ;;; rational? (same as real? right now)
1108 (with-test-prefix "rational?"
1109 (pass-if (documented? rational?))
1110 (pass-if (rational? 0))
1111 (pass-if (rational? 7))
1112 (pass-if (rational? -7))
1113 (pass-if (rational? (+ 1 fixnum-max)))
1114 (pass-if (rational? (- 1 fixnum-min)))
1115 (pass-if (rational? 1.3))
1116 (expect-fail (rational? 3+4i))
1117 (expect-fail (rational? #\a))
1118 (expect-fail (rational? "a"))
1119 (expect-fail (rational? (make-vector 0)))
1120 (expect-fail (rational? (cons 1 2)))
1121 (expect-fail (rational? #t))
1122 (expect-fail (rational? (lambda () #t)))
1123 (expect-fail (rational? (current-input-port))))
1129 (with-test-prefix "integer?"
1130 (pass-if (documented? integer?))
1131 (pass-if (integer? 0))
1132 (pass-if (integer? 7))
1133 (pass-if (integer? -7))
1134 (pass-if (integer? (+ 1 fixnum-max)))
1135 (pass-if (integer? (- 1 fixnum-min)))
1136 (pass-if (and (= 3+0i (round 3+0i)) (integer? 3+0i)))
1137 (pass-if (and (= 1.0 (round 1.0)) (integer? 1.0)))
1138 (expect-fail (integer? 1.3))
1139 (expect-fail (integer? 3+4i))
1140 (expect-fail (integer? #\a))
1141 (expect-fail (integer? "a"))
1142 (expect-fail (integer? (make-vector 0)))
1143 (expect-fail (integer? (cons 1 2)))
1144 (expect-fail (integer? #t))
1145 (expect-fail (integer? (lambda () #t)))
1146 (expect-fail (integer? (current-input-port))))
1152 (with-test-prefix "inexact?"
1153 (pass-if (documented? inexact?))
1154 (expect-fail (inexact? 0))
1155 (expect-fail (inexact? 7))
1156 (expect-fail (inexact? -7))
1157 (expect-fail (inexact? (+ 1 fixnum-max)))
1158 (expect-fail (inexact? (- 1 fixnum-min)))
1159 (pass-if (inexact? 1.3))
1160 (pass-if (inexact? 3.1+4.2i))
1161 (expect-fail (inexact? #\a))
1162 (expect-fail (inexact? "a"))
1163 (expect-fail (inexact? (make-vector 0)))
1164 (expect-fail (inexact? (cons 1 2)))
1165 (expect-fail (inexact? #t))
1166 (expect-fail (inexact? (lambda () #t)))
1167 (expect-fail (inexact? (current-input-port))))
1173 (with-test-prefix "="
1174 (expect-fail (documented? =))
1178 (pass-if (= (+ 1 fixnum-max) (+ 1 fixnum-max)))
1179 (pass-if (= (- 1 fixnum-min) (- 1 fixnum-min)))
1180 (expect-fail (= 0 1))
1181 (expect-fail (= fixnum-max (+ 1 fixnum-max)))
1182 (expect-fail (= (+ 1 fixnum-max) fixnum-max))
1183 (expect-fail (= fixnum-min (- fixnum-min 1)))
1184 (expect-fail (= (- fixnum-min 1) fixnum-min))
1185 (expect-fail (= (+ fixnum-max 1) (- fixnum-min 1))))
1191 (with-test-prefix "<"
1193 (expect-fail "documented?"
1196 (with-test-prefix "(< 0 n)"
1216 (pass-if "n = fixnum-max"
1219 (pass-if "n = fixnum-max + 1"
1220 (< 0 (+ fixnum-max 1)))
1222 (pass-if "n = fixnum-min"
1223 (not (< 0 fixnum-min)))
1225 (pass-if "n = fixnum-min - 1"
1226 (not (< 0 (- fixnum-min 1)))))
1228 (with-test-prefix "(< 0.0 n)"
1248 (pass-if "n = fixnum-max"
1251 (pass-if "n = fixnum-max + 1"
1252 (< 0.0 (+ fixnum-max 1)))
1254 (pass-if "n = fixnum-min"
1255 (not (< 0.0 fixnum-min)))
1257 (pass-if "n = fixnum-min - 1"
1258 (not (< 0.0 (- fixnum-min 1)))))
1260 (with-test-prefix "(< 1 n)"
1280 (pass-if "n = fixnum-max"
1283 (pass-if "n = fixnum-max + 1"
1284 (< 1 (+ fixnum-max 1)))
1286 (pass-if "n = fixnum-min"
1287 (not (< 1 fixnum-min)))
1289 (pass-if "n = fixnum-min - 1"
1290 (not (< 1 (- fixnum-min 1)))))
1292 (with-test-prefix "(< 1.0 n)"
1312 (pass-if "n = fixnum-max"
1315 (pass-if "n = fixnum-max + 1"
1316 (< 1.0 (+ fixnum-max 1)))
1318 (pass-if "n = fixnum-min"
1319 (not (< 1.0 fixnum-min)))
1321 (pass-if "n = fixnum-min - 1"
1322 (not (< 1.0 (- fixnum-min 1)))))
1324 (with-test-prefix "(< -1 n)"
1344 (pass-if "n = fixnum-max"
1347 (pass-if "n = fixnum-max + 1"
1348 (< -1 (+ fixnum-max 1)))
1350 (pass-if "n = fixnum-min"
1351 (not (< -1 fixnum-min)))
1353 (pass-if "n = fixnum-min - 1"
1354 (not (< -1 (- fixnum-min 1)))))
1356 (with-test-prefix "(< -1.0 n)"
1374 (not (< -1.0 -1.0)))
1376 (pass-if "n = fixnum-max"
1377 (< -1.0 fixnum-max))
1379 (pass-if "n = fixnum-max + 1"
1380 (< -1.0 (+ fixnum-max 1)))
1382 (pass-if "n = fixnum-min"
1383 (not (< -1.0 fixnum-min)))
1385 (pass-if "n = fixnum-min - 1"
1386 (not (< -1.0 (- fixnum-min 1)))))
1388 (with-test-prefix "(< fixnum-max n)"
1391 (not (< fixnum-max 0)))
1394 (not (< fixnum-max 0.0)))
1397 (not (< fixnum-max 1)))
1400 (not (< fixnum-max 1.0)))
1403 (not (< fixnum-max -1)))
1406 (not (< fixnum-max -1.0)))
1408 (pass-if "n = fixnum-max"
1409 (not (< fixnum-max fixnum-max)))
1411 (pass-if "n = fixnum-max + 1"
1412 (< fixnum-max (+ fixnum-max 1)))
1414 (pass-if "n = fixnum-min"
1415 (not (< fixnum-max fixnum-min)))
1417 (pass-if "n = fixnum-min - 1"
1418 (not (< fixnum-max (- fixnum-min 1)))))
1420 (with-test-prefix "(< (+ fixnum-max 1) n)"
1423 (not (< (+ fixnum-max 1) 0)))
1426 (not (< (+ fixnum-max 1) 0.0)))
1429 (not (< (+ fixnum-max 1) 1)))
1432 (not (< (+ fixnum-max 1) 1.0)))
1435 (not (< (+ fixnum-max 1) -1)))
1438 (not (< (+ fixnum-max 1) -1.0)))
1440 (pass-if "n = fixnum-max"
1441 (not (< (+ fixnum-max 1) fixnum-max)))
1443 (pass-if "n = fixnum-max + 1"
1444 (not (< (+ fixnum-max 1) (+ fixnum-max 1))))
1446 (pass-if "n = fixnum-min"
1447 (not (< (+ fixnum-max 1) fixnum-min)))
1449 (pass-if "n = fixnum-min - 1"
1450 (not (< (+ fixnum-max 1) (- fixnum-min 1)))))
1452 (with-test-prefix "(< fixnum-min n)"
1470 (< fixnum-min -1.0))
1472 (pass-if "n = fixnum-max"
1473 (< fixnum-min fixnum-max))
1475 (pass-if "n = fixnum-max + 1"
1476 (< fixnum-min (+ fixnum-max 1)))
1478 (pass-if "n = fixnum-min"
1479 (not (< fixnum-min fixnum-min)))
1481 (pass-if "n = fixnum-min - 1"
1482 (not (< fixnum-min (- fixnum-min 1)))))
1484 (with-test-prefix "(< (- fixnum-min 1) n)"
1487 (< (- fixnum-min 1) 0))
1490 (< (- fixnum-min 1) 0.0))
1493 (< (- fixnum-min 1) 1))
1496 (< (- fixnum-min 1) 1.0))
1499 (< (- fixnum-min 1) -1))
1502 (< (- fixnum-min 1) -1.0))
1504 (pass-if "n = fixnum-max"
1505 (< (- fixnum-min 1) fixnum-max))
1507 (pass-if "n = fixnum-max + 1"
1508 (< (- fixnum-min 1) (+ fixnum-max 1)))
1510 (pass-if "n = fixnum-min"
1511 (< (- fixnum-min 1) fixnum-min))
1513 (pass-if "n = fixnum-min - 1"
1514 (not (< (- fixnum-min 1) (- fixnum-min 1))))))
1520 ;; currently not tested -- implementation is trivial
1521 ;; (> x y) is implemented as (< y x)
1522 ;; FIXME: tests should probably be added in case we change implementation.
1528 ;; currently not tested -- implementation is trivial
1529 ;; (<= x y) is implemented as (not (< y x))
1530 ;; FIXME: tests should probably be added in case we change implementation.
1536 ;; currently not tested -- implementation is trivial
1537 ;; (>= x y) is implemented as (not (< x y))
1538 ;; FIXME: tests should probably be added in case we change implementation.
1544 (with-test-prefix "zero?"
1545 (expect-fail (documented? zero?))
1547 (expect-fail (zero? 7))
1548 (expect-fail (zero? -7))
1549 (expect-fail (zero? (+ 1 fixnum-max)))
1550 (expect-fail (zero? (- 1 fixnum-min)))
1551 (expect-fail (zero? 1.3))
1552 (expect-fail (zero? 3.1+4.2i)))
1558 (with-test-prefix "positive?"
1559 (expect-fail (documented? positive?))
1560 (pass-if (positive? 1))
1561 (pass-if (positive? (+ fixnum-max 1)))
1562 (pass-if (positive? 1.3))
1563 (expect-fail (positive? 0))
1564 (expect-fail (positive? -1))
1565 (expect-fail (positive? (- fixnum-min 1)))
1566 (expect-fail (positive? -1.3)))
1572 (with-test-prefix "negative?"
1573 (expect-fail (documented? negative?))
1574 (expect-fail (negative? 1))
1575 (expect-fail (negative? (+ fixnum-max 1)))
1576 (expect-fail (negative? 1.3))
1577 (expect-fail (negative? 0))
1578 (pass-if (negative? -1))
1579 (pass-if (negative? (- fixnum-min 1)))
1580 (pass-if (negative? -1.3)))
1590 ;; FIXME: unfinished...
1592 (with-test-prefix "min"
1593 (let ((big*2 (* fixnum-max 2))
1594 (big*3 (* fixnum-max 3))
1595 (big*4 (* fixnum-max 4))
1596 (big*5 (* fixnum-max 5)))
1598 (expect-fail (documented? max))
1599 (pass-if (= 1 (min 7 3 1 5)))
1600 (pass-if (= 1 (min 1 7 3 5)))
1601 (pass-if (= 1 (min 7 3 5 1)))
1602 (pass-if (= -7 (min 2 3 4 -2 5 -7 1 -1 4 2)))
1603 (pass-if (= -7 (min -7 2 3 4 -2 5 1 -1 4 2)))
1604 (pass-if (= -7 (min 2 3 4 -2 5 1 -1 4 2 -7)))
1605 (pass-if (= big*2 (min big*3 big*5 big*2 big*4)))
1606 (pass-if (= big*2 (min big*2 big*3 big*5 big*4)))
1607 (pass-if (= big*2 (min big*3 big*5 big*4 big*2)))
1609 (= (- fixnum-min 1) (min 2 4 (- fixnum-min 1) 3 (* 2 fixnum-max))))
1611 (= (- fixnum-min 1) (min (- fixnum-min 1) 2 4 3 (* 2 fixnum-max))))
1613 (= (- fixnum-min 1) (min 2 4 3 (* 2 fixnum-max) (- fixnum-min 1))))))
1619 (with-test-prefix "+"
1621 (expect-fail "documented?"
1624 (with-test-prefix "wrong type argument"
1626 (pass-if-exception "1st argument string"
1627 exception:wrong-type-arg
1630 (pass-if-exception "2nd argument bool"
1631 exception:wrong-type-arg
1645 (with-test-prefix "/"
1647 (expect-fail "documented?"
1650 (with-test-prefix "division by zero"
1652 (pass-if-exception "(/ 0)"
1653 exception:numerical-overflow
1659 (pass-if-exception "(/ 1 0)"
1660 exception:numerical-overflow
1663 (pass-if "(/ 1 0.0)"
1664 (= +inf.0 (/ 1 0.0)))
1666 (pass-if-exception "(/ bignum 0)"
1667 exception:numerical-overflow
1668 (/ (+ fixnum-max 1) 0))
1670 (pass-if "(/ bignum 0.0)"
1671 (= +inf.0 (/ (+ fixnum-max 1) 0.0)))
1673 (pass-if-exception "(/ 1.0 0)"
1674 exception:numerical-overflow
1677 (pass-if "(/ 1.0 0.0)"
1678 (= +inf.0 (/ 1.0 0.0)))
1680 (pass-if-exception "(/ +i 0)"
1681 exception:numerical-overflow
1684 (pass-if "(/ +i 0.0)"
1685 (= +inf.0 (imag-part (/ +i 0.0)))))
1687 (with-test-prefix "complex division"
1690 (= (/ 3+4i) 0.12-0.16i))
1693 (= (/ 4+3i) 0.16-0.12i))
1695 (pass-if "(/ 25+125i 3+4i)"
1696 (= (/ 25+125i 3+4i) 23.0+11.0i))
1698 (pass-if "(/ 25+125i 4+3i)"
1699 (= (/ 25+125i 4+3i) 19.0+17.0i))
1701 (pass-if "(/ 25 3+4i)"
1702 (= (/ 25 3+4i) 3.0-4.0i))
1704 (pass-if "(/ 25 4+3i)"
1705 (= (/ 25 4+3i) 4.0-3.0i))
1707 (pass-if "(/ 1e200+1e200i)"
1708 (= (/ 1e200+1e200i) 5.0e-201-5.0e-201i))))
1734 (with-test-prefix "expt"
1735 (pass-if "(= 1 (expt 0 0))" (= 1 (expt 0 0)))
1736 (pass-if "(= 1 (expt 0 0.0))" (= 1 (expt 0 0.0)))
1737 (pass-if "(= 1 (expt 0.0 0))" (= 1 (expt 0.0 0)))
1738 (pass-if "(= 1 (expt 0.0 0.0))" (= 1 (expt 0.0 0.0))))
1741 ;;; make-rectangular