Better assert's status? (Was: Proposal for std.path replacement)

Nick Sabalausky a at a.a
Tue Mar 8 13:52:08 PST 2011


"spir" <denis.spir at gmail.com> wrote in message 
news:mailman.2341.1299588465.4748.digitalmars-d at puremagic.com...
> On 03/08/2011 09:25 AM, Nick Sabalausky wrote:
>> "Nick Sabalausky"<a at a.a>  wrote in message
>> news:il3tra$3gg$1 at digitalmars.com...
>>> "Jonathan M Davis"<jmdavisProg at gmx.com>  wrote in message
>>> news:mailman.2328.1299539399.4748.digitalmars-d at puremagic.com...
>>>> On Monday, March 07, 2011 12:43:00 Nick Sabalausky wrote:
>>>>> "Jonathan M Davis"<jmdavisProg at gmx.com>  wrote in message
>>>>> news:mailman.2297.1299478837.4748.digitalmars-d at puremagic.com...
>>>>>
>>>>>> On Sunday 06 March 2011 21:57:30 Nick Sabalausky wrote:
>>>>>
>>>>> Yea, that's what I figured, and that's why I was strongly in favor of
>>>>> assertPred despite the "promise" of assert improvements.
>>>>>
>>>>> You're the sole author of assertPred, right? Do you mind if I include 
>>>>> it
>>>>> in
>>>>> my zlib/libpng-licensed SemiTwist D Tools library (
>>>>> http://www.dsource.org/projects/semitwist ) ? I already have an
>>>>> assert-alternative in there, but assertPred is vastly superior.
>>>>> (Although,
>>>>> my assert-alternative does save a list of failures instead of
>>>>> immediately
>>>>> throwing, which I personally find to be essential for unittests, so I
>>>>> would
>>>>> probably add the *optional* ability to have assertPred do the same.)
>>>>
>>>> Yes. I'm the sole author. Feel free to re-use it. It's under Boost, so
>>>> you can
>>>> use it for whatever Boost lets you do with it, and even if what you're
>>>> doing
>>>> isn't Boost compatible, it's fine with me if you use it anyway.
>>>>
>>>
>>> Thanks.
>>>
>>
>> I've added it and made an optional 'autoThrow' flag that, if set to 
>> false,
>> prevents a failure from immediately bailing out of the whole unittest 
>> (some
>> people like that, like me, and others don't).
>>
>> http://www.dsource.org/projects/semitwist/changeset?new=%2F%40196&old=%2F%40193
>
> I like it as well.
>

If you do use it, and have autoThrow set to false, be aware that it doesn't 
*yet* catch exceptions that are thrown from the actual code being tested. 
Ie:

unittest
{
    autoThrow = true; // Ie, the default (unless you use the unittestSection 
mixin)

    // A: AssertError is thrown, not caught and unittest bails out
    assertPred!"a"(false);

    // B: Exception is thrown, not caught and unittest bails out
    assertPred!"throw new Exception()"(10);


    autoThrow = false;

    // C: Error message is displayed, assertCount is incremented, unittest 
continues
    assertPred!"a"(false);

    // D: *Should* do same as C, but currently does same as B
    assertPred!"throw new Exception()"(10);
}

void main()
{
    // If autoThrow is false and there were any failures,
    // then this throws an actual AssertError
    flushAsserts();

    // Rest of main here
}

I plan to fix that though.




More information about the Digitalmars-d mailing list