Unit test practices in Phobos

Lars T. Kyllingstad public at kyllingen.NOSPAMnet
Mon Aug 10 07:13:47 PDT 2009


Lars T. Kyllingstad wrote:
> Daniel Keep wrote:
>>
>> Lars T. Kyllingstad wrote:
>>> ...
>>
>> Knocked this up in about two minutes.  Might be handy.
>>
>> template TestInstantiateImpl(alias Tmpl, Ts...)
>> {
>>     static if( Ts.length > 0 )
>>     {
>>         alias Tmpl!(Ts[0]) test;
>>         alias TestInstantiateImpl!(Tmpl, Ts[1..$]).next next;
>>     }
>>     else
>>     {
>>         enum next = true;
>>     }
>> }
>>
>> template TestInstantiate(alias Tmpl, Ts...)
>> {
>>     alias TestInstantiateImpl!(Tmpl, Ts).next TestInstantiate;
>> }
>>
>> template Blah(T)
>> {
>>     pragma(msg, "Blah!("~T.stringof~")");
>>     alias T Blah;
>> }
>>
>> T nanFor(T)()
>> {
>>     pragma(msg, "nanFor!("~T.stringof~")");
>>     return T.nan;
>> }
>>
>> unittest
>> {
>>     static assert( TestInstantiate!(Blah, float, double, real) );
>>     static assert( TestInstantiate!(nanFor, float, double, real) );
>>
>>     static assert( TestInstantiate!(Blah, int) );
>>     static assert( TestInstantiate!(nanFor, int) );
>> }
>>
>> void main()
>> {
>> }
>>
>> $ dmd -unittest irc
>> Blah!(float)
>> Blah!(double)
>> Blah!(real)
>> nanFor!(float)
>> nanFor!(double)
>> nanFor!(real)
>> Blah!(int)
>> nanFor!(int)
>> irc.d(34): Error: no property 'nan' for type 'int'
>> irc.d(43): Error: template instance irc.TestInstantiate!(nanFor,int)
>> error instantiating
> 
> If something like this was to go into a library, I'd remove the 
> pragma(msg)s, though. They'd get pretty annoying after a while. ;)

...except the pragmas are defined in Blah and nanFor themselves, not in 
TestInstantiate... Note to self: Think before you post.

-Lars



More information about the Digitalmars-d mailing list