bug#72379: srfi-64: test-approximate does not handle exceptions

Taylan Kammer <[email protected]>
Newsgroups gmane.lisp.guile.bugs
Message-ID <[email protected]>
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 that:
>
>> The test also fails if an exception is raised, assuming the implementation has
>> a way to catch exceptions.
> Guile has a way to catch exceptions.  However nevertheless the following does
> not lead to 'fail, but an exception being raised:
>
>     (use-modules (srfi srfi-64))
>     (test-begin "x")
>     (test-approximate 1 (throw 'foo) 1)
>
> Leading to:
>
>     Backtrace:
>     In ice-9/boot-9.scm:
>       1752:10  8 (with-exception-handler _ _ #:unwind? _ #:unwind-for-type _)
>     In unknown file:
>                7 (apply-smob/0 #<thunk 7fd834112300>)
>     In ice-9/boot-9.scm:
>         724:2  6 (call-with-prompt _ _ #<procedure default-prompt-handler (k proc)>)
>     In ice-9/eval.scm:
>         619:8  5 (_ #(#(#<directory (guile-user) 7fd834115c80>)))
>     In ice-9/boot-9.scm:
>        2836:4  4 (save-module-excursion _)
>       4388:12  3 (_)
>     In /home/wolf/src/guile-wolfsden/tests/srfi-64/test-approximate-throw.srfi64test:
>           7:0  2 (_)
>     In srfi/srfi-64/testing.scm:
>        677:16  1 (_ _ #f)
>     In unknown file:
>                0 (real-part #f)
>
>     ERROR: In procedure real-part:
>     In procedure real-part: Wrong type argument in position 1: #f
>
> Have a nice day
> Tomas Volf
>
>
Don't know how to fix this in the reference implementation, which Guile uses, and don't want to bother finding out because it's too over-complicated.

Works fine with my implementation, with the output noting that the expected value was `1` and that the actual result was an error being raised instead:


taylan@wiki ~/src/scheme-srfis $ GUILE_LOAD_PATH=/home/taylan/src/scheme-srfis/guile-srfi-64 guile
GNU Guile 3.0.8
Copyright (C) 1995-2021 Free Software Foundation, Inc.

Guile comes with ABSOLUTELY NO WARRANTY; for details type `,show w'.
This program is free software, and you are welcome to redistribute it
under certain conditions; type `,show c' for details.

Enter `,help' for help.
scheme@(guile-user)> ,use (srfi srfi-64)
;;; note: source file /home/taylan/src/scheme-srfis/guile-srfi-64/srfi/srfi-64.scm
;;;       newer than compiled /usr/lib/x86_64-linux-gnu/guile/3.0/ccache/srfi/srfi-64.go
;;; found fresh local cache at /home/taylan/.cache/guile/ccache/3.0-LE-8-4.6/home/taylan/src/scheme-srfis/guile-srfi-64/srfi/srfi-64.scm.go
scheme@(guile-user)> (test-begin "x")
Writing log file: x.srfi64.log
Test suite begin: x
$1 = #t
scheme@(guile-user)> (test-approximate 1 (throw 'foo) 1)
[FAIL] x: x
#f:2: (throw (quote foo))
Expected value: 1
Raised error: #<&compound-exception components: (#<&error> #<&irritants irritants: ()> #<&exception-with-kind-and-args kind: foo args: ()>)>

$2 = #f
scheme@(guile-user)>


- Taylan
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.