(lambda ()
(sqrt x)
(flo:test-exceptions (flo:supported-exceptions))))))
- (flo:exception:invalid-operation)))))
\ No newline at end of file
+ (flo:exception:invalid-operation)))))
+
+(define-enumerated-test 'copysign
+ `((0. 0. 0.)
+ (0. -0. -0.)
+ (0. 1. 0.)
+ (0. -1. -0.)
+ (0. +inf.0 0.)
+ (0. -inf.0 -0.)
+ (0. 0 0.)
+ (0. 1 0.)
+ (0. -1 -0.)
+ (0. ,(flo:make-nan #t #t 0) -0.)
+ (0. ,(flo:make-nan #f #t 0) 0.)
+ (0. ,(flo:make-nan #t #f 1) -0.)
+ (0. ,(flo:make-nan #f #f 1) 0.)
+ (-0. 0. 0.)
+ (-0. -0. -0.)
+ (-0. 1. 0.)
+ (-0. -1. -0.)
+ (-0. +inf.0 0.)
+ (-0. -inf.0 -0.)
+ (-0. ,(flo:make-nan #t #t 0) -0.)
+ (-0. ,(flo:make-nan #f #t 0) 0.)
+ (-0. ,(flo:make-nan #t #f 1) -0.)
+ (-0. ,(flo:make-nan #f #f 1) 0.)
+ (-0. 0 0.)
+ (-0. 1 0.)
+ (-0. -1 -0.)
+ (1. 0. 1.)
+ (1. -0. -1.)
+ (1. 1. 1.)
+ (1. -1. -1.)
+ (1. +inf.0 1.)
+ (1. -inf.0 -1.)
+ (1. ,(flo:make-nan #t #t 0) -1.)
+ (1. ,(flo:make-nan #f #t 0) 1.)
+ (1. ,(flo:make-nan #t #f 1) -1.)
+ (1. ,(flo:make-nan #f #f 1) 1.)
+ (1. 0 1.)
+ (1. 1 1.)
+ (1. -1 -1.)
+ (-1. 0. 1.)
+ (-1. -0. -1.)
+ (-1. 1. 1.)
+ (-1. -1. -1.)
+ (-1. +inf.0 1.)
+ (-1. -inf.0 -1.)
+ (-1. ,(flo:make-nan #t #t 0) -1.)
+ (-1. ,(flo:make-nan #f #t 0) 1.)
+ (-1. ,(flo:make-nan #t #f 1) -1.)
+ (-1. ,(flo:make-nan #f #f 1) 1.)
+ (-1. 0 1.)
+ (-1. 1 1.)
+ (-1. -1 -1.)
+ (+inf.0 0. +inf.0)
+ (+inf.0 -0. -inf.0)
+ (+inf.0 1. +inf.0)
+ (+inf.0 -1. -inf.0)
+ (+inf.0 +inf.0 +inf.0)
+ (+inf.0 -inf.0 -inf.0)
+ (+inf.0 ,(flo:make-nan #t #t 0) -inf.0)
+ (+inf.0 ,(flo:make-nan #f #t 0) +inf.0)
+ (+inf.0 ,(flo:make-nan #t #f 1) -inf.0)
+ (+inf.0 ,(flo:make-nan #f #f 1) +inf.0)
+ (+inf.0 0 +inf.0)
+ (+inf.0 1 +inf.0)
+ (+inf.0 -1 -inf.0)
+ (-inf.0 0. +inf.0)
+ (-inf.0 -0. -inf.0)
+ (-inf.0 1. +inf.0)
+ (-inf.0 -1. -inf.0)
+ (-inf.0 +inf.0 +inf.0)
+ (-inf.0 -inf.0 -inf.0)
+ (-inf.0 ,(flo:make-nan #t #t 0) -inf.0)
+ (-inf.0 ,(flo:make-nan #f #t 0) +inf.0)
+ (-inf.0 ,(flo:make-nan #t #f 1) -inf.0)
+ (-inf.0 ,(flo:make-nan #f #f 1) +inf.0)
+ (-inf.0 0 +inf.0)
+ (-inf.0 1 +inf.0)
+ (-inf.0 -1 -inf.0)
+ (,(flo:make-nan #f #t 0) 0. ,(flo:make-nan #f #t 0))
+ (,(flo:make-nan #t #t 0) 0. ,(flo:make-nan #f #t 0))
+ (,(flo:make-nan #f #t 0) -0. ,(flo:make-nan #t #t 0))
+ (,(flo:make-nan #t #t 0) -0. ,(flo:make-nan #t #t 0))
+ (,(flo:make-nan #f #f 1) 0. ,(flo:make-nan #f #f 1))
+ (,(flo:make-nan #t #f 1) 0. ,(flo:make-nan #f #f 1))
+ (,(flo:make-nan #f #f 1) -0. ,(flo:make-nan #t #f 1))
+ (,(flo:make-nan #t #f 1) -0. ,(flo:make-nan #t #f 1))
+ (,(flo:make-nan #f #t 0) 1 ,(flo:make-nan #f #t 0))
+ (,(flo:make-nan #t #t 0) 1 ,(flo:make-nan #f #t 0))
+ (,(flo:make-nan #f #t 0) -1 ,(flo:make-nan #t #t 0))
+ (,(flo:make-nan #t #t 0) -1 ,(flo:make-nan #t #t 0))
+ (,(flo:make-nan #f #f 1) 1 ,(flo:make-nan #f #f 1))
+ (,(flo:make-nan #t #f 1) 1 ,(flo:make-nan #f #f 1))
+ (,(flo:make-nan #f #f 1) -1 ,(flo:make-nan #t #f 1))
+ (,(flo:make-nan #t #f 1) -1 ,(flo:make-nan #t #f 1)))
+ (lambda (x y z)
+ (assert-eqv-nan (yes-traps (lambda () (copysign x y))) z)
+ (assert-eqv-nan (yes-traps (lambda () (copysign (- x) y))) z)
+ (if (not (eqv? y 0))
+ (begin
+ (assert-eqv-nan (yes-traps (lambda () (copysign x (- y)))) (- z))
+ (assert-eqv-nan (yes-traps (lambda () (copysign (- x) (- y))))
+ (- z))))))
\ No newline at end of file
(0. ,(flo:make-nan #f #t 0) 0.)
(0. ,(flo:make-nan #t #f 1) -0.)
(0. ,(flo:make-nan #f #f 1) 0.)
+ (-0. 0. 0.)
+ (-0. -0. -0.)
+ (-0. 1. 0.)
+ (-0. -1. -0.)
+ (-0. +inf.0 0.)
+ (-0. -inf.0 -0.)
+ (-0. ,(flo:make-nan #t #t 0) -0.)
+ (-0. ,(flo:make-nan #f #t 0) 0.)
+ (-0. ,(flo:make-nan #t #f 1) -0.)
+ (-0. ,(flo:make-nan #f #f 1) 0.)
(1. 0. 1.)
(1. -0. -1.)
(1. 1. 1.)
(1. ,(flo:make-nan #f #t 0) 1.)
(1. ,(flo:make-nan #t #f 1) -1.)
(1. ,(flo:make-nan #f #f 1) 1.)
+ (-1. 0. 1.)
+ (-1. -0. -1.)
+ (-1. 1. 1.)
+ (-1. -1. -1.)
+ (-1. +inf.0 1.)
+ (-1. -inf.0 -1.)
+ (-1. ,(flo:make-nan #t #t 0) -1.)
+ (-1. ,(flo:make-nan #f #t 0) 1.)
+ (-1. ,(flo:make-nan #t #f 1) -1.)
+ (-1. ,(flo:make-nan #f #f 1) 1.)
(+inf.0 0. +inf.0)
(+inf.0 -0. -inf.0)
(+inf.0 1. +inf.0)
(-inf.0 ,(flo:make-nan #t #t 0) -inf.0)
(-inf.0 ,(flo:make-nan #f #t 0) +inf.0)
(-inf.0 ,(flo:make-nan #t #f 1) -inf.0)
- (-inf.0 ,(flo:make-nan #f #f 1) +inf.0))
+ (-inf.0 ,(flo:make-nan #f #f 1) +inf.0)
+ (,(flo:make-nan #f #t 0) 0. ,(flo:make-nan #f #t 0))
+ (,(flo:make-nan #t #t 0) 0. ,(flo:make-nan #f #t 0))
+ (,(flo:make-nan #f #t 0) -0. ,(flo:make-nan #t #t 0))
+ (,(flo:make-nan #t #t 0) -0. ,(flo:make-nan #t #t 0))
+ (,(flo:make-nan #f #f 1) 0. ,(flo:make-nan #f #f 1))
+ (,(flo:make-nan #t #f 1) 0. ,(flo:make-nan #f #f 1))
+ (,(flo:make-nan #f #f 1) -0. ,(flo:make-nan #t #f 1))
+ (,(flo:make-nan #t #f 1) -0. ,(flo:make-nan #t #f 1)))
(lambda (x y z)
- (assert-eqv-nan (yes-traps (lambda () (flo:copysign x y))) z)))
+ (assert-eqv-nan (yes-traps (lambda () (flo:copysign x y))) z)
+ (assert-eqv-nan
+ (yes-traps (lambda () (flo:copysign (flo:negate x) y)))
+ z)
+ (assert-eqv-nan
+ (yes-traps (lambda () (flo:copysign x (flo:negate y))))
+ (flo:negate z))
+ (assert-eqv-nan
+ (yes-traps (lambda () (flo:copysign (flo:negate x) (flo:negate y))))
+ (flo:negate z))))
(define-enumerated-test 'copysign-var/neg
`((-inf.0 -inf.0)