[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Testing the reference implementation




On Nov 20, 2005, at 9:04 AM, Michael Sperber wrote:

This error is due to

(/ (make-rectangular (r5rs->number 0) (r5rs->number 1)) (r5rs- >number 0))

raising an exception.  Your program converts the result into
("ERROR"), which your program then feeds to =.  (In PRINT-NUMBER,
expression (= x x).)  The error message is admittedly obscure---it
means that there's no way to convert the arguments of = into suitable
numbers.

Mike:

Thanks for the fix to number->string.

Otherwise, something is really fishy here.

First, I ran the code in Gambit-C 4.0b15 after defining r5rs->number to be values, and it ran to completion.

Then I looked more closely at the output from scheme-48.  It begins with

r6rs/will> (load "complex-test.scm")
complex-test.scm
(+ +0+0i +0+0i)        =>         +0+0i
(- +0+0i +0+0i)        =>         +0+0i
(* +0+0i +0+0i)        =>         +0+0i
(/ +0+0i +0+0i)        =>         ERROR

So in this case it had no problem seeing that there was an error and reporting it correctly. After a while we get

(/ +0+0i +NAN.+NAN.i) => +NAN.+NAN.i ;;; cycled through all values for second argument (+ +0+0i +0+0i) => +0+0i ;;; first argument should be +0+1i from here down
(- +0+0i +0+0i)        =>         +0+0i
(* +0+0i +0+0i)        =>         +0+0i
(/ +0+0i +0+0i)        =>
Error: contagion error
       ("ERROR")
       ("ERROR")
       #{Procedure 9414 (=/2 in generic-arithmetic/will)}
       (&error)
1 r6rs/will>

First of all, the first argument here is supposed to be +0+1i; why it's printing as +0+0i I don't know.

Secondly, I don't know why the result of the expression does not compare eq? to error-object; ("ERROR") shouldn't be passed to print- number in any case. I get the same results when I test it with equal?.

Brad