Hi Matt, So you want to keep the result for more upcoming test? Why? Just curious.
I've for the most part been content with: (test-group "-" (define res (- 2 1)) (test 1 res) (print "res: " res) ) ;; res out of scope here (good thing, no?) K. On Fri, Jan 10, 2020, 16:22 John Cowan <[email protected]> wrote: > Mixing definitions and expressions in a block isn't actually legal Scheme, > though it does work in Chicken. All defines are supposed to come first and > all expressions afterwards. Since the test library is shared with Chibi, > and since Chibi doesn't allow this extension, I can't see adding this to > the library. > > On Fri, Jan 10, 2020 at 10:18 AM Matt Welland <[email protected]> > wrote: > >> I find myself doing stuff like this very often when writing tests using >> the test egg: >> >> ;; A trivial example where the function under test is "-" >> (define data #f) >> (test #f 1 (let ((res (- 2 1)))(set! data res) res)) >> >> I'd really prefer to do something like: >> >> (test-and-define data #f 1 (- 2 1)) >> >> But the closest I could get was: >> >> (define-syntax test-and-set >> (syntax-rules () >> ((_ name arg1 arg2 body ...) >> (test arg1 arg2 >> (let ((res (begin body ...))) >> (set! name res) >> res >> ))))) >> >> So I can do: >> >> (define data #f) >> (test-and-set data #f 1 (- 2 1)) >> >> Questions: >> >> 1. Is there a generally better way to test and gather the result for use >> in downstream tests? >> >> 2. Is there a way to write a macro that can create the toplevel binding? >> >> >> -- >> -- >> Complexity is your enemy. Any fool can make something complicated. >> It is hard to keep things simple. - Richard Branson. >> >
