The specification mandates reals, but the reference implementation supports complex numbers. So as implementation extension, support them as well.
* module/srfi/srfi-64.scm (within-epsilon): Support complex arguments. --- v2: Use the same test logic as the reference implementation. v3: Also adjust the docstring. module/srfi/srfi-64.scm | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/module/srfi/srfi-64.scm b/module/srfi/srfi-64.scm index 1f60a72e5..0f1b5c117 100644 --- a/module/srfi/srfi-64.scm +++ b/module/srfi/srfi-64.scm @@ -776,8 +776,14 @@ Test whether result of @var{test-expr} matches @var{expected} using (define (within-epsilon ε) (λ (expected actual) - (and (>= actual (- expected ε)) - (<= actual (+ expected ε))))) + (let ((e-r (real-part expected)) + (e-i (imag-part expected)) + (a-r (real-part actual)) + (a-i (imag-part actual))) + (and (>= a-r (- e-r ε)) + (<= a-r (+ e-r ε)) + (>= a-i (- e-i ε)) + (<= a-i (+ e-i ε)))))) (define-syntax %test-approximate (λ (x) @@ -808,6 +814,10 @@ Test whether result of @var{test-expr} matches @var{expected} using Test whether result of @var{test-expr} is within @var{error} of @var{expected}. +As implementation extension, complex numbers are supported as well. It tests +whether both real and imaginary parts of @var{test-expr} are within +@var{error} of real and imaginary parts of @var{expected}. + @end defspec") (define-syntax %test-error -- 2.46.0