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