[phobos] Silent failure of std.container unittests

Andrei Alexandrescu andrei at erdani.com
Thu Jul 15 15:43:47 PDT 2010


On 07/15/2010 05:32 PM, Michel Fortin wrote:
>
> Le 2010-07-15 à 18:00, Walter Bright a écrit :
>
>>> 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.
>>
>> Everybody's happy except the guys like me who want to run all the unit tests in one go.
>
> I think this is the root of the misunderstanding. Either you consider each assert grouped in a unittest blocks to be a unit test in itself; or you consider each unittest block to be a test with multiple possible points of failure across the path of the test.
>
> The former is best illustrated this way:
>
> 	unittest {
> 		assert(sqrt(16) == 4);
> 		assert(sqrt(4) == 2);
> 		assert(sqrt(1) == 1);
> 	}

There's one more problem with this, which should be discussed - an 
assert inside e.g. sqrt or any function that sqrt transitively calls 
_does_ stop the entire thing. So assert has different semantics 
depending on locus, which I hope we agree is not a desirable trait. 
Also, as you mentioned, if someone throws, we're again back to a 
different semantics.

I think there's a disadvantage there. FWIW changing the semantics of 
assert that way will translate into a disincentive to use it inside 
unittests ("Hmm, I better use enforce() here because assert() is just 
weird.")


Andrei


More information about the phobos mailing list