[phobos] Silent failure of std.container unittests
Steve Schveighoffer
schveiguy at yahoo.com
Thu Jul 15 06:57:47 PDT 2010
----- Original Message ----
> From: Andrei Alexandrescu <andrei at erdani.com>
> To: Discuss the phobos library for D <phobos at puremagic.com>
> Sent: Wed, July 14, 2010 10:42:06 PM
> Subject: Re: [phobos] Silent failure of std.container unittests
>
> On 07/14/2010 08:58 PM, Walter Bright wrote:
> >
> >
> > Sean Kelly wrote:
> >>
> >>
> >> How about this... since unit tests are run after static ctors are run,
> >> the behavior of whether to throw an AssertError or report and continue
> >> can be a run-time configurable option.
> >
> > Frankly, I don't think a configurable option is a good idea. Druntime
> > has a lot of user configurability, and as far as I can tell, absolutely
> > none of it has ever been used. It just adds complexity, both to the code
> > and the documentation.
>
> I agree. But also simple does not mean crappy. I think there's too much talk
>around a simple matter:
>
> ======
> Assertion failure should abort the current unittest block.
> ======
>
> Do we all agree about the above? We keep on discussing how the usefulness and
>informativeness of assertion failures falls off a cliff after the first
>failure, and I can't seem to hear loud and clear that we all want this same
>thing.
I agree.
>
> So we've been through these steps:
>
> 1. Crappy: failure to assert causes the program to abort.
>
> 2. Awful: assert is hacked inside unittests to essentially be writeln, all
>unittests run regardless. Programs claims success upon exit.
>
> 3. Mediocre: assert continues to be hacked inside unittests to essentially be
>writeln + set a flag. Programs exit with errors if the flag was set.
>
> NOT YET:
>
> 4. DESIRED: assert is NOT hacked, any failing assert ends the current
>unittest, the failure message is printed, execution continues with the next
>unittest, program ends with error code if at least one assert failed,
>everybody's happy.
Definitely 4. Option 1 is workable, but if it takes over a minute to compile
with unit tests (as dcollections does), then I want to see all unit tests that
fail so I don't have to go through a tedious
compile->go-get-a-beer->run-unit-tests->see-if-I'm-sober-enough-to-fix-them
cycle ;)
Here is one option that I haven't seen yet -- the compiler inserts around all
unit test blocks the following framework:
try
{
// run individual unit test block
}
catch(AssertionError ae)
{
__onAssert(ae);
}
And then we can control exactly what happens on assert. Someone may create some
sort of graphical thing, or it could be plugged into an IDE.
-Steve
More information about the phobos
mailing list