Unit tests in D

Michel Fortin michel.fortin at michelf.com
Wed May 5 17:58:28 PDT 2010


On 2010-05-05 20:25:45 -0400, Walter Bright <newshound1 at digitalmars.com> said:

> bearophile wrote:
> 
>> 
>> But the "specs" of the Range template say that Range must not work if 
>> step is zero (this means that the unittest has to fail if Range 
>> compiles when the given step is zero). So I have to test this too. I 
>> can do that with one more unittest (D1 code):
>> 
>>     static assert(!is(typeof( Range!(15, 3, 0) )));
>> 
>> In D2 I can use the __traits:
>> 
>>     static assert(!__traits(compiles, Range!(15, 3, 0) ));
> 
> Oh, I see. You want to ensure it does not compile, rather than it 
> compiles. I got the ! flipped around.

If even Walter has difficulty figuring out the ! around __traits, I'll 
take that as the ultimate proof that the current syntax has too much 
cruft and is in need of a cleanup.

Could we at least replace this:

	__traits(compiles, ...)

with this:

	__traits.compiles(...)

It looks more readable to me at least, and it can be applied to other 
traits. The next step would be to find a way to remove that ugly 
__traits keyword, ideally without stealing a useful identifier. Perhaps 
it should be made possible to do this:

	module std.traits;

	alias __traits.compiles compiles;

Now you just import std.traits and never write __traits again! :-)

	static assert(!compiles( Range!(15, 3, 0) ));


-- 
Michel Fortin
michel.fortin at michelf.com
http://michelf.com/



More information about the Digitalmars-d mailing list