On Tue, Jan 15, 2008 at 11:16:57PM -0800, Larry Wall wrote:
> On Sun, Jan 13, 2008 at 11:22:44PM -0600, Patrick R. Michaud wrote:
> : Larry, Jerry, and I discussed this a couple of weeks ago
> : and here's my vision for how it should work. To simplify
> : things, let's break it into two parts: (1) how to mark tests
> : as 'todo', and (2) how to do this for specific implementations.
>
> I've just checked in a "util/fudge" preproprocessor into the pugs
> repo that approximates what we've been talking about, or at least my
> version of it. :)
Yay! Thanks!
> : Calling C<< todo('foo', 3); >> says that the next three tests are
> : to be marked as TODO with 'foo' given as a reason.
>
> Unfortunately, the pugs Test::todo function doesn't take a count there,
> but it's not needed in the preprocessor approach.
I've been thinking that we should perhaps modify Pugs'
Test::todo to accept a count. But I don't think that's
a conflict with util/fudge.
> If you use the block form, it automatically scans the block
> for the number of tests, so you can also say:
>
> #?rakudo: skip 'unimpl'
> #?smop: eval 'parsefail'
> #?pugs: todo 'foo'
> {
> is(...);
> is(...);
> is(...);
> }
>
> and it automatically installs the correct skip count where needed.
Nice. What about the cases where a test file defines its own local
wrapper functions to is, isnt, like, etc.? For example, Pugs'
t/builtins/math/sqrt.t has:
sub is_approx (Num $is, Num $expected, Str $descr) {
ok abs($is - $expected) <= 0.00001, $descr;
}
and then does things like
is_approx(sqrt(2), 1.4142135623730951, 'got the square root of 2');
is_approx(sqrt(5), 2.23606797749979, 'got the square root of 5');
ok sqrt(-1), NaN, 'sqrt(-1) is NaN';
It looks as though util/fudge would count this as only one test
instead of three.
Pm