2010-08-08 19:32:23 -04:00
|
|
|
|
;;; r6rs-base.test --- Test suite for R6RS (rnrs base)
|
|
|
|
|
|
|
2011-01-28 23:42:01 -05:00
|
|
|
|
;; Copyright (C) 2010, 2011 Free Software Foundation, Inc.
|
2010-08-08 19:32:23 -04:00
|
|
|
|
;;
|
|
|
|
|
|
;; This library is free software; you can redistribute it and/or
|
|
|
|
|
|
;; modify it under the terms of the GNU Lesser General Public
|
|
|
|
|
|
;; License as published by the Free Software Foundation; either
|
|
|
|
|
|
;; version 3 of the License, or (at your option) any later version.
|
|
|
|
|
|
;;
|
|
|
|
|
|
;; This library is distributed in the hope that it will be useful,
|
|
|
|
|
|
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
|
|
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
|
|
|
|
;; Lesser General Public License for more details.
|
|
|
|
|
|
;;
|
|
|
|
|
|
;; You should have received a copy of the GNU Lesser General Public
|
|
|
|
|
|
;; License along with this library; if not, write to the Free Software
|
|
|
|
|
|
;; Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
(define-module (test-suite test-r6rs-base)
|
|
|
|
|
|
:use-module ((rnrs base) :version (6))
|
2011-04-06 13:51:44 +01:00
|
|
|
|
:use-module ((rnrs conditions) :version (6))
|
|
|
|
|
|
:use-module ((rnrs exceptions) :version (6))
|
2010-08-08 19:32:23 -04:00
|
|
|
|
:use-module (test-suite lib))
|
|
|
|
|
|
|
2011-04-06 01:53:38 +01:00
|
|
|
|
|
|
|
|
|
|
;; numbers are considered =? if their difference is less than a set
|
|
|
|
|
|
;; tolerance
|
|
|
|
|
|
(define (=? alpha beta)
|
|
|
|
|
|
(< (abs (- alpha beta)) 1e-10))
|
|
|
|
|
|
|
|
|
|
|
|
(with-test-prefix "log (2nd arg)"
|
|
|
|
|
|
(pass-if "log positive-base" (=? (log 8 2) 3))
|
|
|
|
|
|
(pass-if "log negative-base" (=? (real-part (log 256 -4))
|
|
|
|
|
|
0.6519359443))
|
|
|
|
|
|
(pass-if "log base-one" (= (log 10 1) +inf.0))
|
|
|
|
|
|
(pass-if "log base-zero"
|
|
|
|
|
|
(catch #t
|
|
|
|
|
|
(lambda () (log 10 0) #f)
|
|
|
|
|
|
(lambda args #t))))
|
|
|
|
|
|
|
Add exports for missing functions from `(rnrs base)'.
* module/rnrs.scm (boolean=?): New export.
Fix typo in export of`integer-valued?'.
* module/rnrs/base.scm: Add exports for `exact' and `inexact'.
(boolean=?, symbol=?, infinite?, finite?, exact-integer-sqrt,
integer-valued?, rational-valued?, real-valued?): New functions.
* test-suite/tests/r6rs-base.test (boolean=?, symbol=?, infinite?,
finite?, exact-integer-sqrt, integer-valued?, rational-valued?,
real-valued?): New test prefixes and tests.
2010-11-17 00:59:45 -05:00
|
|
|
|
(with-test-prefix "boolean=?"
|
|
|
|
|
|
(pass-if "boolean=? null" (boolean=?))
|
|
|
|
|
|
(pass-if "boolean=? unary" (boolean=? #f))
|
|
|
|
|
|
(pass-if "boolean=? many"
|
|
|
|
|
|
(and (boolean=? #t #t #t)
|
|
|
|
|
|
(boolean=? #f #f #f)
|
|
|
|
|
|
(not (boolean=? #t #f #t))))
|
|
|
|
|
|
(pass-if "boolean=? mixed type" (not (boolean=? #t #t 'foo))))
|
|
|
|
|
|
|
|
|
|
|
|
(with-test-prefix "symbol=?"
|
|
|
|
|
|
(pass-if "symbol=? null" (symbol=?))
|
|
|
|
|
|
(pass-if "symbol=? unary" (symbol=? 'a))
|
|
|
|
|
|
(pass-if "symbol=? many"
|
|
|
|
|
|
(and (symbol=? 'a 'a 'a)
|
|
|
|
|
|
(symbol=? 'foo 'foo 'foo)
|
|
|
|
|
|
(not (symbol=? 'a 'foo 'a))))
|
|
|
|
|
|
(pass-if "symbol=? mixed type" (not (symbol=? 'a 'a 123))))
|
|
|
|
|
|
|
|
|
|
|
|
(with-test-prefix "infinite?"
|
|
|
|
|
|
(pass-if "infinite? true on infinities"
|
|
|
|
|
|
(and (infinite? +inf.0) (infinite? -inf.0)))
|
|
|
|
|
|
(pass-if "infinite? false on non-infities"
|
|
|
|
|
|
(and (not (infinite? 123)) (not (infinite? +nan.0)))))
|
|
|
|
|
|
|
|
|
|
|
|
(with-test-prefix "finite?"
|
|
|
|
|
|
(pass-if "finite? false on infinities"
|
|
|
|
|
|
(and (not (finite? +inf.0)) (not (finite? -inf.0))))
|
|
|
|
|
|
(pass-if "finite? true on non-infinities"
|
|
|
|
|
|
(and (finite? 123) (finite? 123.0))))
|
|
|
|
|
|
|
|
|
|
|
|
(with-test-prefix "exact-integer-sqrt"
|
|
|
|
|
|
(pass-if "exact-integer-sqrt simple"
|
|
|
|
|
|
(let-values (((s e) (exact-integer-sqrt 5)))
|
|
|
|
|
|
(and (eqv? s 2) (eqv? e 1)))))
|
|
|
|
|
|
|
|
|
|
|
|
(with-test-prefix "integer-valued?"
|
|
|
|
|
|
(pass-if "true on integers"
|
|
|
|
|
|
(and (integer-valued? 3) (integer-valued? 3.0) (integer-valued? 3.0+0.0i)))
|
|
|
|
|
|
(pass-if "false on rationals" (not (integer-valued? 3.1)))
|
|
|
|
|
|
(pass-if "false on reals" (not (integer-valued? +nan.0))))
|
|
|
|
|
|
|
|
|
|
|
|
(with-test-prefix "rational-valued?"
|
|
|
|
|
|
(pass-if "true on integers" (rational-valued? 3))
|
|
|
|
|
|
(pass-if "true on rationals"
|
|
|
|
|
|
(and (rational-valued? 3.1) (rational-valued? 3.1+0.0i)))
|
|
|
|
|
|
(pass-if "false on reals"
|
|
|
|
|
|
(or (not (rational-valued? +nan.0))
|
|
|
|
|
|
(throw 'unresolved))))
|
|
|
|
|
|
|
|
|
|
|
|
(with-test-prefix "real-valued?"
|
|
|
|
|
|
(pass-if "true on integers" (real-valued? 3))
|
|
|
|
|
|
(pass-if "true on rationals" (real-valued? 3.1))
|
|
|
|
|
|
(pass-if "true on reals" (real-valued? +nan.0)))
|
|
|
|
|
|
|
2010-08-08 19:32:23 -04:00
|
|
|
|
(with-test-prefix "vector-for-each"
|
|
|
|
|
|
(pass-if "vector-for-each simple"
|
|
|
|
|
|
(let ((sum 0))
|
|
|
|
|
|
(vector-for-each (lambda (x) (set! sum (+ sum x))) '#(1 2 3))
|
|
|
|
|
|
(eqv? sum 6))))
|
|
|
|
|
|
|
|
|
|
|
|
(with-test-prefix "vector-map"
|
|
|
|
|
|
(pass-if "vector-map simple"
|
|
|
|
|
|
(equal? '#(3 2 1) (vector-map (lambda (x) (- 4 x)) '#(1 2 3)))))
|
|
|
|
|
|
|
2011-01-28 23:42:01 -05:00
|
|
|
|
(with-test-prefix "real-valued?"
|
|
|
|
|
|
(pass-if (real-valued? +nan.0))
|
|
|
|
|
|
(pass-if (real-valued? +nan.0+0i))
|
|
|
|
|
|
(pass-if (real-valued? +nan.0+0.0i))
|
|
|
|
|
|
(pass-if (real-valued? +inf.0))
|
|
|
|
|
|
(pass-if (real-valued? -inf.0))
|
|
|
|
|
|
(pass-if (real-valued? +inf.0+0.0i))
|
|
|
|
|
|
(pass-if (real-valued? -inf.0-0.0i))
|
|
|
|
|
|
(pass-if (real-valued? 3))
|
|
|
|
|
|
(pass-if (real-valued? -2.5))
|
|
|
|
|
|
(pass-if (real-valued? -2.5+0i))
|
|
|
|
|
|
(pass-if (real-valued? -2.5+0.0i))
|
|
|
|
|
|
(pass-if (real-valued? -2.5-0i))
|
|
|
|
|
|
(pass-if (real-valued? #e1e10))
|
|
|
|
|
|
(pass-if (real-valued? 1e200))
|
|
|
|
|
|
(pass-if (real-valued? 1e200+0.0i))
|
|
|
|
|
|
(pass-if (real-valued? 6/10))
|
|
|
|
|
|
(pass-if (real-valued? 6/10+0.0i))
|
|
|
|
|
|
(pass-if (real-valued? 6/10+0i))
|
|
|
|
|
|
(pass-if (real-valued? 6/3))
|
|
|
|
|
|
(pass-if (not (real-valued? 3+i)))
|
|
|
|
|
|
(pass-if (not (real-valued? -2.5+0.01i)))
|
|
|
|
|
|
(pass-if (not (real-valued? +nan.0+0.01i)))
|
|
|
|
|
|
(pass-if (not (real-valued? +nan.0+nan.0i)))
|
|
|
|
|
|
(pass-if (not (real-valued? +inf.0-0.01i)))
|
|
|
|
|
|
(pass-if (not (real-valued? +0.01i)))
|
|
|
|
|
|
(pass-if (not (real-valued? -inf.0i))))
|
|
|
|
|
|
|
|
|
|
|
|
(with-test-prefix "rational-valued?"
|
|
|
|
|
|
(pass-if (not (rational-valued? +nan.0)))
|
|
|
|
|
|
(pass-if (not (rational-valued? +nan.0+0i)))
|
|
|
|
|
|
(pass-if (not (rational-valued? +nan.0+0.0i)))
|
|
|
|
|
|
(pass-if (not (rational-valued? +inf.0)))
|
|
|
|
|
|
(pass-if (not (rational-valued? -inf.0)))
|
|
|
|
|
|
(pass-if (not (rational-valued? +inf.0+0.0i)))
|
|
|
|
|
|
(pass-if (not (rational-valued? -inf.0-0.0i)))
|
|
|
|
|
|
(pass-if (rational-valued? 3))
|
|
|
|
|
|
(pass-if (rational-valued? -2.5))
|
|
|
|
|
|
(pass-if (rational-valued? -2.5+0i))
|
|
|
|
|
|
(pass-if (rational-valued? -2.5+0.0i))
|
|
|
|
|
|
(pass-if (rational-valued? -2.5-0i))
|
|
|
|
|
|
(pass-if (rational-valued? #e1e10))
|
|
|
|
|
|
(pass-if (rational-valued? 1e200))
|
|
|
|
|
|
(pass-if (rational-valued? 1e200+0.0i))
|
|
|
|
|
|
(pass-if (rational-valued? 6/10))
|
|
|
|
|
|
(pass-if (rational-valued? 6/10+0.0i))
|
|
|
|
|
|
(pass-if (rational-valued? 6/10+0i))
|
|
|
|
|
|
(pass-if (rational-valued? 6/3))
|
|
|
|
|
|
(pass-if (not (rational-valued? 3+i)))
|
|
|
|
|
|
(pass-if (not (rational-valued? -2.5+0.01i)))
|
|
|
|
|
|
(pass-if (not (rational-valued? +nan.0+0.01i)))
|
|
|
|
|
|
(pass-if (not (rational-valued? +nan.0+nan.0i)))
|
|
|
|
|
|
(pass-if (not (rational-valued? +inf.0-0.01i)))
|
|
|
|
|
|
(pass-if (not (rational-valued? +0.01i)))
|
|
|
|
|
|
(pass-if (not (rational-valued? -inf.0i))))
|
|
|
|
|
|
|
|
|
|
|
|
(with-test-prefix "integer-valued?"
|
|
|
|
|
|
(pass-if (not (integer-valued? +nan.0)))
|
|
|
|
|
|
(pass-if (not (integer-valued? +nan.0+0i)))
|
|
|
|
|
|
(pass-if (not (integer-valued? +nan.0+0.0i)))
|
|
|
|
|
|
(pass-if (not (integer-valued? +inf.0)))
|
|
|
|
|
|
(pass-if (not (integer-valued? -inf.0)))
|
|
|
|
|
|
(pass-if (not (integer-valued? +inf.0+0.0i)))
|
|
|
|
|
|
(pass-if (not (integer-valued? -inf.0-0.0i)))
|
|
|
|
|
|
(pass-if (integer-valued? 3))
|
|
|
|
|
|
(pass-if (integer-valued? 3.0))
|
|
|
|
|
|
(pass-if (integer-valued? 3+0i))
|
|
|
|
|
|
(pass-if (integer-valued? 3+0.0i))
|
|
|
|
|
|
(pass-if (integer-valued? 8/4))
|
|
|
|
|
|
(pass-if (integer-valued? #e1e10))
|
|
|
|
|
|
(pass-if (integer-valued? 1e200))
|
|
|
|
|
|
(pass-if (integer-valued? 1e200+0.0i))
|
|
|
|
|
|
(pass-if (not (integer-valued? -2.5)))
|
|
|
|
|
|
(pass-if (not (integer-valued? -2.5+0i)))
|
|
|
|
|
|
(pass-if (not (integer-valued? -2.5+0.0i)))
|
|
|
|
|
|
(pass-if (not (integer-valued? -2.5-0i)))
|
|
|
|
|
|
(pass-if (not (integer-valued? 6/10)))
|
|
|
|
|
|
(pass-if (not (integer-valued? 6/10+0.0i)))
|
|
|
|
|
|
(pass-if (not (integer-valued? 6/10+0i)))
|
|
|
|
|
|
(pass-if (not (integer-valued? 3+i)))
|
|
|
|
|
|
(pass-if (not (integer-valued? -2.5+0.01i)))
|
|
|
|
|
|
(pass-if (not (integer-valued? +nan.0+0.01i)))
|
|
|
|
|
|
(pass-if (not (integer-valued? +nan.0+nan.0i)))
|
|
|
|
|
|
(pass-if (not (integer-valued? +inf.0-0.01i)))
|
|
|
|
|
|
(pass-if (not (integer-valued? +0.01i)))
|
|
|
|
|
|
(pass-if (not (integer-valued? -inf.0i))))
|
|
|
|
|
|
|
2011-04-06 13:51:44 +01:00
|
|
|
|
(with-test-prefix "assert"
|
|
|
|
|
|
(pass-if "assert returns value" (= 1 (assert 1)))
|
|
|
|
|
|
(pass-if "assertion-violation"
|
|
|
|
|
|
(guard (condition ((assertion-violation? condition) #t))
|
|
|
|
|
|
(assert #f)
|
|
|
|
|
|
#f)))
|