Test multiplication and division by +i and -i.
authorTaylor R Campbell <campbell@mumble.net>
Tue, 20 Aug 2019 03:13:51 +0000 (03:13 +0000)
committerTaylor R Campbell <campbell@mumble.net>
Tue, 20 Aug 2019 04:17:07 +0000 (04:17 +0000)
We do not currently follow Kahan's recommenations that when the real
part is exactly zero, the arithmetic be done by negation rather than
multiplication.

tests/runtime/test-arith.scm

index 61bb26dd078abde81baaca6e2ed8c17b2c4d2896..0cb8243a91992b824f4cddcb779787f1b0bef8a8 100644 (file)
@@ -256,6 +256,38 @@ USA.
   (lambda (x y)
     (assert-nan (* x y))))
 
+(define-enumerated-test 'i*
+  (list
+   (list 3+4i -4+3i)
+   (list +0. +0.i)
+   (list -0. -0.i)
+   (list +0.i -0. expect-failure)
+   (list -0.i +0.)
+   (list +0.+0.i -0.+0.i expect-failure)
+   (list -0.+0.i -0.-0.i expect-failure)
+   (list +0.-0.i +0.+0.i)
+   (list -0.-0.i +0.-0.i expect-failure))
+  (lambda (z w #!optional xfail)
+    (with-expected-failure xfail (lambda () (assert-eqv (* +i z) w)))
+    (with-expected-failure xfail (lambda () (assert-eqv (* z +i) w)))
+    (with-expected-failure xfail (lambda () (assert-eqv (/ z -i) w)))))
+
+(define-enumerated-test '/i
+  (list
+   (list 3+4i +4-3i)
+   (list +0. -0.i)
+   (list -0. +0.i)
+   (list +0.i +0.)
+   (list -0.i -0. expect-failure)
+   (list +0.+0.i +0.-0.i expect-failure)
+   (list -0.+0.i +0.+0.i)
+   (list +0.-0.i -0.-0.i expect-failure)
+   (list -0.-0.i -0.+0.i expect-failure))
+  (lambda (z w #!optional xfail)
+    (with-expected-failure xfail (lambda () (assert-eqv (/ z +i) w)))
+    (with-expected-failure xfail (lambda () (assert-eqv (* -i z) w)))
+    (with-expected-failure xfail (lambda () (assert-eqv (* z -i) w)))))
+
 (define-enumerated-test 'polar0-real
   (list
    (list 0)