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