flonum? returns false for complex number objects.
authorMark H Weaver <mhw@netris.org>
Tue, 16 Jul 2013 07:38:27 +0000 (03:38 -0400)
committerMark H Weaver <mhw@netris.org>
Tue, 16 Jul 2013 07:57:41 +0000 (03:57 -0400)
Fixes <http://bugs.gnu.org/14866>.
Reported by Göran Weinholt <goran@weinholt.se>.

* module/rnrs/arithmetic/flonums.scm (flonum?): Use 'real?' instead of
  'number?'.

* test-suite/tests/r6rs-arithmetic-flonums.test (flonum?): Add tests.

module/rnrs/arithmetic/flonums.scm
test-suite/tests/r6rs-arithmetic-flonums.test

index 558b0af..60d6cf6 100644 (file)
@@ -66,7 +66,7 @@
          (rnrs lists (6))
          (rnrs r5rs (6)))
 
-  (define (flonum? obj) (and (number? obj) (inexact? obj)))
+  (define (flonum? obj) (and (real? obj) (inexact? obj)))
   (define (assert-flonum . args)
     (or (for-all flonum? args) (raise (make-assertion-violation))))
   (define (assert-iflonum . args)
index 4222e8d..c5d60ce 100644 (file)
   (pass-if "flonum? is #t on flonum"
     (flonum? 1.5))
 
-  (pass-if "flonum? is #f on non-flonum"
+  (pass-if "flonum? is #f on complex"
+    (not (flonum? 1.5+0.0i)))
+
+  (pass-if "flonum? is #f on exact integer"
     (not (flonum? 3))))
 
 (with-test-prefix "real->flonum"