~ chicken-r7rs (master) c302f25ced0a527f58279a84a1305c3c98a30f9c
commit c302f25ced0a527f58279a84a1305c3c98a30f9c Author: Peter Bex <peter@more-magic.net> AuthorDate: Sun Aug 18 18:43:32 2013 +0000 Commit: Evan Hanson <evhan@foldling.org> CommitDate: Sun Aug 18 18:43:32 2013 +0000 import and export the quotient/remainder division procedures. Update numbers dependency version to 2.9 diff --git a/r7rs.meta b/r7rs.meta index 5854b1b..93a34d7 100644 --- a/r7rs.meta +++ b/r7rs.meta @@ -2,6 +2,6 @@ (author "The Chicken Team") (category lang-exts) (license "BSD") - (depends matchable make numbers) + (depends matchable make (numbers "2.9")) (test-depends test) (foreign-depends)) diff --git a/scheme.base-interface.scm b/scheme.base-interface.scm index d1062cc..bed6bbf 100644 --- a/scheme.base-interface.scm +++ b/scheme.base-interface.scm @@ -75,8 +75,10 @@ |# file-error? #| - floor floor-quotient floor-remainder - floor/ + floor + |# + floor/ floor-quotient floor-remainder + #| flush-output-port for-each gcd lcm @@ -143,8 +145,8 @@ procedure? quasiquote quote - quotient remainder |# + quotient remainder raise raise-continuable #| rational? @@ -190,8 +192,9 @@ #| textual-port? truncate - truncate-quotient truncate-remainder - truncate/ + |# + truncate/ truncate-quotient truncate-remainder + #| u8-ready? unless unquote unquote-splicing diff --git a/scheme.base.scm b/scheme.base.scm index 393b0d6..eecb4ab 100644 --- a/scheme.base.scm +++ b/scheme.base.scm @@ -1,7 +1,8 @@ (module scheme.base () (import (except scheme syntax-rules cond-expand member)) -(import (except chicken with-exception-handler raise)) +(import (except chicken with-exception-handler raise quotient remainder modulo)) +(import numbers) (include "scheme.base-interface.scm") diff --git a/tests/run.scm b/tests/run.scm index b16e054..a111879 100644 --- a/tests/run.scm +++ b/tests/run.scm @@ -10,6 +10,63 @@ (test-begin "r7rs tests") +(test-group "6.2.6: numerical operations" + (test-group "floor/...truncate-remainder" + (test '(2 1) (receive (floor/ 5 2))) + (test 2 (floor-quotient 5 2)) + (test 1 (floor-remainder 5 2)) + (test '(-3 1) (receive (floor/ -5 2))) + (test -3 (floor-quotient -5 2)) + (test 1 (floor-remainder -5 2)) + (test '(-3 -1) (receive (floor/ 5 -2))) + (test -3 (floor-quotient 5 -2)) + (test -1 (floor-remainder 5 -2)) + (test '(2 -1) (receive (floor/ -5 -2))) + (test 2 (floor-quotient -5 -2)) + (test -1 (floor-remainder -5 -2)) + (test '(2.0 -1.0) (receive (floor/ -5 -2.0))) + ;; From the Guile manual + (test 12 (floor-quotient 123 10)) + (test 3 (floor-remainder 123 10)) + (test '(12 3) (receive (floor/ 123 10))) + (test '(-13 -7) (receive (floor/ 123 -10))) + (test '(-13 7) (receive (floor/ -123 10))) + (test '(12 -3) (receive (floor/ -123 -10))) + + (test '(2 1) (receive (truncate/ 5 2))) + (test 2 (truncate-quotient 5 2)) + (test 1 (truncate-remainder 5 2)) + (test '(-2 -1) (receive (truncate/ -5 2))) + (test -2 (truncate-quotient -5 2)) + (test -1 (truncate-remainder -5 2)) + (test '(-2 1) (receive (truncate/ 5 -2))) + (test -2 (truncate-quotient 5 -2)) + (test 1 (truncate-remainder 5 -2)) + (test '(2 -1) (receive (truncate/ -5 -2))) + (test 2 (truncate-quotient -5 -2)) + (test -1 (truncate-remainder -5 -2)) + (test '(2.0 -1.0) (receive (truncate/ -5.0 -2))) + (test 2.0 (truncate-quotient -5.0 -2)) + (test -1.0 (truncate-remainder -5.0 -2)) + ;; From the Guile manual + (test 12 (truncate-quotient 123 10)) + (test 3 (truncate-remainder 123 10)) + (test '(12 3) (receive (truncate/ 123 10))) + (test '(-12 3) (receive (truncate/ 123 -10))) + (test '(-12 -3) (receive (truncate/ -123 10))) + (test '(12 -3) (receive (truncate/ -123 -10)))) + + (test-group "quotient, remainder and modulo" + (test 1 (modulo 13 4)) + (test 1 (remainder 13 4)) + (test 3 (modulo -13 4)) + (test -1 (remainder -13 4)) + (test -3 (modulo 13 -4)) + (test 1 (remainder 13 -4)) + (test -1 (modulo -13 -4)) + (test -1 (remainder -13 -4)) + (test -1.0 (remainder -13 -4.0)))) + (test-group "6.3: booleans" ;; How silly... (test-group "not"Trap