On 22.02.2020 01:17, Per Bothner wrote:
On 2/21/20 1:37 PM, Arthur A. Gleckler wrote:
Taylan Kammer has provided an alternative implementation of the widely
used SRFI 64: A Scheme API for test suites. I've added it to the Git
repo under contrib/
<https://github.com/scheme-requests-for-implementation/srfi-64/tree/master/contrib/taylan.kammer>.
Great. However, it would be nice if the README were fleshed out comparing
the functionality/portability and other differences between the implementations.
For example, one advantage of the reference implementation is that it has
hooks for reporting line numbers for failing tests. That seems impossibly to
do portably, and difficult to do without some kind of macro hooks.
My implementation also reports line numbers. I'm not sure if there's a
difference there.
As advantages for my implementation, I'd list:
- Based on R7RS: dropping support for non-R7RS environments simplifies
the code, since workarounds like using a vector for a mock record type,
or using cond-expand to support implementation-specific exception
handling mechanisms, can be removed.
- Modular design: the source is split into four components: Execution
(forms to actually execute tests), test-runner (the data type),
test-runner-simple (the "simple" test runner defined by the standard),
and source-info (shims to support source info gathering). Note that
these aren't actually exposed as sub-libraries, since that might
encourage writing code that only works with this implementation; the
separation is only for ease of understanding and navigation of the code.
- Improved code clarity: using shims to hide implementation-specific
code for source info gathering further eliminates the use of cond-expand
in the main body of the code, improving readability.
All in all, my implementation basically came into existence as a
refactoring (maybe since rewrite) of the reference implementation, as
I'm a code clarity pedant and had difficulties grokking the reference
implementation.
Taylan
(P.S. I'm re-sending this email to the mailing list since it didn't get
through the last time.)