Test edge cases of flonum-divide primitive and of atan.
authorTaylor R Campbell <campbell@mumble.net>
Thu, 8 Nov 2018 08:09:47 +0000 (08:09 +0000)
committerTaylor R Campbell <campbell@mumble.net>
Thu, 8 Nov 2018 08:11:21 +0000 (08:11 +0000)
tests/microcode/test-flonum-except.scm
tests/runtime/test-arith.scm

index 6c611d0e263dda54e3dcb54fd55db0604f32e56a..3c5475b3e1c5c72d1bccfc6655d897af573aa48d 100644 (file)
@@ -173,6 +173,12 @@ USA.
   (applicator flo:- (flo:-inf.0) (flo:-inf.0)))
 (define-invop-flag-test 'flonum-divide (applicator flo:/ 0. 0.)) ;(e)
 (define-invop-trap-test 'flonum-divide (applicator flo:/ 0. 0.)) ;(e)
+(define-invop-flag-test 'flonum-divide                           ;(e)
+  (applicator (make-primitive-procedure 'flonum-divide) 0. 0.)
+  'xerror)
+(define-invop-trap-test 'flonum-divide                           ;(e)
+  (applicator (make-primitive-procedure 'flonum-divide) 0. 0.)
+  'xerror)
 ;; XXX remainder ;(f)
 (define-invop-flag-test 'flonum-sqrt (applicator flo:sqrt -1.))        ;(g)
 (define-invop-trap-test 'flonum-sqrt (applicator flo:sqrt -1.))        ;(g)
@@ -187,6 +193,12 @@ USA.
 ;; XXX Check sign of infinity.
 (define-divbyzero-flag-test 'flonum-divide (applicator flo:/ 1. 0.))
 (define-divbyzero-trap-test 'flonum-divide (applicator flo:/ 1. 0.))
+(define-divbyzero-flag-test 'flonum-divide
+  (applicator (make-primitive-procedure 'flonum-divide) 1. 0.)
+  'xerror)
+(define-divbyzero-trap-test 'flonum-divide
+  (applicator (make-primitive-procedure 'flonum-divide) 1. 0.)
+  'xerror)
 (define-divbyzero-flag-test 'flonum-log (applicator flo:log 0.))
 (define-divbyzero-trap-test 'flonum-log (applicator flo:log 0.))
 
index ff82933cec261a8fa7ae6393082796760a3e8777..69de6337528a6a9867e0a0acd46f25510519403d 100644 (file)
@@ -333,4 +333,25 @@ USA.
           ;; For all the inputs, reciprocal is exact.
           (assert-eqv (expt (/ 1 x) (- y)) x^y)
           (assert-eqv (expt (* 2 x) (/ y 2)) x^y)
-          (assert-eqv (expt (/ 1 (* 2 x)) (- (/ y 2))) x^y))))))
\ No newline at end of file
+          (assert-eqv (expt (/ 1 (* 2 x)) (- (/ y 2))) x^y))))))
+
+(define-enumerated-test 'atan2
+  (vector
+   (vector +0. -1. (+ (atan 0 -1)))
+   (vector -0. -1. (- (atan 0 -1)))
+   (vector +0. -0. (+ (atan 0 -1)))
+   (vector -0. -0. (- (atan 0 -1)))
+   (vector +0. +0. +0.)
+   (vector -0. +0. -0.)
+   (vector +0. +1. +0.)
+   (vector -0. +1. -0.))
+  (lambda (v)
+    (let ((y (vector-ref v 0))
+          (x (vector-ref v 1))
+          (theta (vector-ref v 2)))
+      (define (body)
+        (assert-eqv (atan y x) theta))
+      (if (and (= y 0) (= x 0))
+          ;; XXX expected failure
+          (assert-error body)
+          (body)))))
\ No newline at end of file