mirror of
https://github.com/ashinn/chibi-scheme.git
synced 2025-05-18 21:29:19 +02:00
156 lines
5.8 KiB
Scheme
156 lines
5.8 KiB
Scheme
|
|
;; these tests are only valid if chibi-scheme is compiled with full
|
|
;; numeric support (USE_BIGNUMS, USE_FLONUMS and USE_MATH)
|
|
|
|
(cond-expand
|
|
(modules (import (only (chibi test) test-begin test test-end)))
|
|
(else #f))
|
|
|
|
(test-begin "numbers")
|
|
|
|
(define (integer-neighborhoods x)
|
|
(list x (+ 1 x) (+ -1 x) (- x) (- 1 x) (- -1 x)))
|
|
|
|
(test '(536870912 536870913 536870911 -536870912 -536870911 -536870913)
|
|
(integer-neighborhoods (expt 2 29)))
|
|
|
|
(test '(1073741824 1073741825 1073741823 -1073741824 -1073741823 -1073741825)
|
|
(integer-neighborhoods (expt 2 30)))
|
|
|
|
(test '(2147483648 2147483649 2147483647 -2147483648 -2147483647 -2147483649)
|
|
(integer-neighborhoods (expt 2 31)))
|
|
|
|
(test '(4294967296 4294967297 4294967295 -4294967296 -4294967295 -4294967297)
|
|
(integer-neighborhoods (expt 2 32)))
|
|
|
|
(test '(4611686018427387904 4611686018427387905 4611686018427387903
|
|
-4611686018427387904 -4611686018427387903 -4611686018427387905)
|
|
(integer-neighborhoods (expt 2 62)))
|
|
|
|
(test '(9223372036854775808 9223372036854775809 9223372036854775807
|
|
-9223372036854775808 -9223372036854775807 -9223372036854775809)
|
|
(integer-neighborhoods (expt 2 63)))
|
|
|
|
(test '(18446744073709551616 18446744073709551617 18446744073709551615
|
|
-18446744073709551616 -18446744073709551615 -18446744073709551617)
|
|
(integer-neighborhoods (expt 2 64)))
|
|
|
|
(test '(85070591730234615865843651857942052864
|
|
85070591730234615865843651857942052865
|
|
85070591730234615865843651857942052863
|
|
-85070591730234615865843651857942052864
|
|
-85070591730234615865843651857942052863
|
|
-85070591730234615865843651857942052865)
|
|
(integer-neighborhoods (expt 2 126)))
|
|
|
|
(test '(170141183460469231731687303715884105728
|
|
170141183460469231731687303715884105729
|
|
170141183460469231731687303715884105727
|
|
-170141183460469231731687303715884105728
|
|
-170141183460469231731687303715884105727
|
|
-170141183460469231731687303715884105729)
|
|
(integer-neighborhoods (expt 2 127)))
|
|
|
|
(test '(340282366920938463463374607431768211456
|
|
340282366920938463463374607431768211457
|
|
340282366920938463463374607431768211455
|
|
-340282366920938463463374607431768211456
|
|
-340282366920938463463374607431768211455
|
|
-340282366920938463463374607431768211457)
|
|
(integer-neighborhoods (expt 2 128)))
|
|
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
|
|
(define (integer-arithmetic-combinations a b)
|
|
(list (+ a b) (- a b) (* a b) (quotient a b) (remainder a b)))
|
|
|
|
(define (sign-combinations a b)
|
|
(list (integer-arithmetic-combinations a b)
|
|
(integer-arithmetic-combinations (- a) b)
|
|
(integer-arithmetic-combinations a (- b))
|
|
(integer-arithmetic-combinations (- a) (- b))))
|
|
|
|
;; fix x fix
|
|
(test '((1 -1 0 0 0) (1 -1 0 0 0) (-1 1 0 0 0) (-1 1 0 0 0))
|
|
(sign-combinations 0 1))
|
|
(test '((2 0 1 1 0) (0 -2 -1 -1 0) (0 2 -1 -1 0) (-2 0 1 1 0))
|
|
(sign-combinations 1 1))
|
|
(test '((59 25 714 2 8) (-25 -59 -714 -2 -8)
|
|
(25 59 -714 -2 8) (-59 -25 714 2 -8))
|
|
(sign-combinations 42 17))
|
|
|
|
;; fix x big
|
|
(test '((4294967338 -4294967254 180388626432 0 42)
|
|
(4294967254 -4294967338 -180388626432 0 -42)
|
|
(-4294967254 4294967338 -180388626432 0 42)
|
|
(-4294967338 4294967254 180388626432 0 -42))
|
|
(sign-combinations 42 (expt 2 32)))
|
|
|
|
;; big x fix
|
|
(test '((4294967338 4294967254 180388626432 102261126 4)
|
|
(-4294967254 -4294967338 -180388626432 -102261126 -4)
|
|
(4294967254 4294967338 -180388626432 -102261126 4)
|
|
(-4294967338 -4294967254 180388626432 102261126 -4))
|
|
(sign-combinations (expt 2 32) 42))
|
|
|
|
;; big x bigger
|
|
(test '((12884901889 -4294967297 36893488151714070528 0 4294967296)
|
|
(4294967297 -12884901889 -36893488151714070528 0 -4294967296)
|
|
(-4294967297 12884901889 -36893488151714070528 0 4294967296)
|
|
(-12884901889 4294967297 36893488151714070528 0 -4294967296))
|
|
(sign-combinations (expt 2 32) (+ 1 (expt 2 33))))
|
|
|
|
(test '((18446744078004518913 -18446744069414584321 79228162514264337597838917632 0 4294967296)
|
|
(18446744069414584321 -18446744078004518913 -79228162514264337597838917632 0 -4294967296)
|
|
(-18446744069414584321 18446744078004518913 -79228162514264337597838917632 0 4294967296)
|
|
(-18446744078004518913 18446744069414584321 79228162514264337597838917632 0 -4294967296))
|
|
(sign-combinations (expt 2 32) (+ 1 (expt 2 64))))
|
|
|
|
;; bigger x big
|
|
(test '((12884901889 4294967297 36893488151714070528 2 1)
|
|
(-4294967297 -12884901889 -36893488151714070528 -2 -1)
|
|
(4294967297 12884901889 -36893488151714070528 -2 1)
|
|
(-12884901889 -4294967297 36893488151714070528 2 -1))
|
|
(sign-combinations (+ 1 (expt 2 33)) (expt 2 32)))
|
|
|
|
(test '((18446744078004518913 18446744069414584321 79228162514264337597838917632 4294967296 1)
|
|
(-18446744069414584321 -18446744078004518913 -79228162514264337597838917632 -4294967296 -1)
|
|
(18446744069414584321 18446744078004518913 -79228162514264337597838917632 -4294967296 1)
|
|
(-18446744078004518913 -18446744069414584321 79228162514264337597838917632 4294967296 -1))
|
|
(sign-combinations (+ 1 (expt 2 64)) (expt 2 32)))
|
|
|
|
(test #f (< +nan.0 +nan.0))
|
|
(test #f (<= +nan.0 +nan.0))
|
|
(test #f (= +nan.0 +nan.0))
|
|
(test #f (>= +nan.0 +nan.0))
|
|
(test #f (> +nan.0 +nan.0))
|
|
|
|
(test #f (< +inf.0 +inf.0))
|
|
(test #t (<= +inf.0 +inf.0))
|
|
(test #t (= +inf.0 +inf.0))
|
|
(test #t (>= +inf.0 +inf.0))
|
|
(test #f (> +inf.0 +inf.0))
|
|
|
|
(test #f (< -inf.0 -inf.0))
|
|
(test #t (<= -inf.0 -inf.0))
|
|
(test #t (= -inf.0 -inf.0))
|
|
(test #t (>= -inf.0 -inf.0))
|
|
(test #f (> -inf.0 -inf.0))
|
|
|
|
(test #t (< -inf.0 +inf.0))
|
|
(test #t (<= -inf.0 +inf.0))
|
|
(test #f (= -inf.0 +inf.0))
|
|
(test #f (>= -inf.0 +inf.0))
|
|
(test #f (> -inf.0 +inf.0))
|
|
|
|
(cond-expand
|
|
(ratios
|
|
(test #t (< 1/2 1.0))
|
|
(test #t (< 1.0 3/2))
|
|
(test #t (< 1/2 1.5))
|
|
(test #t (< 1/2 2.0))
|
|
(test 1.0 (max 1/2 1.0)))
|
|
(else
|
|
#f))
|
|
|
|
(test-end)
|