mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-06-22 03:30:22 +02:00
Implement finite?' in core and fix R6RS
finite?' and `infinite?'
* libguile/numbers.c (scm_finite_p): Add new predicate `finite?' from R6RS to guile core, which returns #t if and only if its argument is neither infinite nor a NaN. Note that this is not the same as (not (inf? x)) or (not (infinite? x)), since NaNs are neither finite nor infinite. * test-suite/tests/numbers.test: Add test cases for `finite?'. * module/rnrs/base.scm: Import `inf?' as `infinite?' instead of reimplementing it. Previously, the R6RS implementation of `infinite?' did not detect non-real complex infinities, nor did it throw exceptions for non-numbers. (Note that NaNs _are_ considered numbers by scheme, despite their name). Import `finite?' instead of reimplementing it. Previously, the R6RS implementation of `finite?' returned #t for both NaNs and non-real complex infinities, in violation of R6RS. * NEWS: Add NEWS entries, and reorganize existing numerics-related entries together under one subheading. * doc/ref/api-data.texi (Real and Rational Numbers): Add docs for `finite?' and scm_finite_p.
This commit is contained in:
parent
cff5fa3384
commit
7112615f73
5 changed files with 89 additions and 13 deletions
|
@ -304,6 +304,32 @@
|
|||
(pass-if (not (even? (- (* 2 fixnum-min) 1))))
|
||||
(pass-if (even? (* 2 fixnum-min))))
|
||||
|
||||
;;;
|
||||
;;; finite?
|
||||
;;;
|
||||
|
||||
(with-test-prefix "finite?"
|
||||
(pass-if (documented? finite?))
|
||||
(pass-if (not (finite? (inf))))
|
||||
(pass-if (not (finite? +inf.0)))
|
||||
(pass-if (not (finite? -inf.0)))
|
||||
(pass-if (not (finite? +inf.0+1i)))
|
||||
(pass-if (not (finite? -inf.0+1i)))
|
||||
(pass-if (not (finite? +1+inf.0i)))
|
||||
(pass-if (not (finite? +1-inf.0i)))
|
||||
(pass-if (not (finite? (nan))))
|
||||
(pass-if (not (finite? +nan.0)))
|
||||
(pass-if (not (finite? 1+nan.0i)))
|
||||
(pass-if (not (finite? +nan.0+nan.0i)))
|
||||
(pass-if (finite? 0))
|
||||
(pass-if (finite? 0.0))
|
||||
(pass-if (finite? -0.0))
|
||||
(pass-if (finite? 42.0))
|
||||
(pass-if (finite? 1/2))
|
||||
(pass-if (finite? 42.0+700i))
|
||||
(pass-if (finite? (+ fixnum-max 1)))
|
||||
(pass-if (finite? (- fixnum-min 1))))
|
||||
|
||||
;;;
|
||||
;;; inf? and inf
|
||||
;;;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue