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. --- Require error to be real number and check using (checks notes) Chebyshev distance. 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..453296364 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 real parts are within @code{(real-part @var{error})}, and imaginary +parts within @code{(imag-part @var{error})}. + @end defspec") (define-syntax %test-error -- 2.46.0