unofficial mirror of bug-guile@gnu.org 
 help / color / mirror / Atom feed
* bug#72372: srfi-64: test-approximate evaluates test-name multiple times
@ 2024-07-30 19:51 Tomas Volf
  2024-10-01 21:59 ` Taylan Kammer
  0 siblings, 1 reply; 2+ messages in thread
From: Tomas Volf @ 2024-07-30 19:51 UTC (permalink / raw)
  To: 72372

Hello,

I think I found a bug in (srfi srfi-64) module shipped with GNU Guile.

The specification says the following regarding the test-approximate:

> This is equivalent to (except that each argument is only evaluated once):
>
>
> (test-assert [test-name]
>   (and (>= test-expr (- expected error))
>        (<= test-expr (+ expected error))))

However the test-name is evaluated multiple times:

    (use-modules (srfi srfi-64))
    (test-begin "x")
    (test-approximate (pk "t") 1 1 0)

Leading to:

    ;;; ("t")

    ;;; ("t")

Have a nice day
Tomas Volf





^ permalink raw reply	[flat|nested] 2+ messages in thread

* bug#72372: srfi-64: test-approximate evaluates test-name multiple times
  2024-07-30 19:51 bug#72372: srfi-64: test-approximate evaluates test-name multiple times Tomas Volf
@ 2024-10-01 21:59 ` Taylan Kammer
  0 siblings, 0 replies; 2+ messages in thread
From: Taylan Kammer @ 2024-10-01 21:59 UTC (permalink / raw)
  To: Tomas Volf, 72372

On 30.07.2024 21:51, Tomas Volf wrote:
> Hello,
>
> I think I found a bug in (srfi srfi-64) module shipped with GNU Guile.
>
> The specification says the following regarding the test-approximate:
>
>> This is equivalent to (except that each argument is only evaluated once):
>>
>>
>> (test-assert [test-name]
>>   (and (>= test-expr (- expected error))
>>        (<= test-expr (+ expected error))))
> However the test-name is evaluated multiple times:
>
>     (use-modules (srfi srfi-64))
>     (test-begin "x")
>     (test-approximate (pk "t") 1 1 0)
>
> Leading to:
>
>     ;;; ("t")
>
>     ;;; ("t")
>
> Have a nice day
> Tomas Volf
>
>
Looks like a bug in the reference implementation that Guile uses. It specifically evaluates the macro input `tname` at the beginning, binding it to the variable `name`, but then never uses `name` and just uses `tname` again, leading to it being evaluated twice.

If someone wants to fix it upstream, it should be easy: Just change `tname` to `name` on line 788.

My implementation already seems to have this fixed, because the affected section of the code was entirely rewritten. (In case someone is missing the context: I've explained in a previous email that I don't want to work on the reference implementation / the one shipped with Guile, because I find it too unreadable and difficult to work with, although in this particular case it looks like a trivial bug.)

- Taylan






^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2024-10-01 21:59 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-07-30 19:51 bug#72372: srfi-64: test-approximate evaluates test-name multiple times Tomas Volf
2024-10-01 21:59 ` Taylan Kammer

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).