Problem with unittest in templates.

Chris Nicholson-Sauls ibisbasenji at gmail.com
Fri Dec 29 10:36:07 PST 2006


Peter C. Chapin wrote:
> Hello! I'm using dmd 0.178. I'm having trouble getting the unittest 
> section of a class template to execute. I have two files:
> 
> ----> main.d <----
> 
> import other;
> 
> int main( )
> {
>   Foo!(int) my_foo = new Foo!(int);
>   return( 0 );
> }
> 
> ----> other.d <----
> 
> class Foo(T) {
>   unittest {
>     assert( 1 == 0 );
>   }
> };
> 
> I compile this program using 'dmd -unittest main.d other.d'. It compiles 
> without error but when it executes there is no assertion failure. 
> However, if I move the definition of class Foo(T) into main.d (and throw 
> away other.d) I *do* get the assertion failure. Am I doing something 
> wrong? Is this supposed to work?
> 
> I'm also noticing that the unittest section isn't as useful in a 
> template as it is in a non-template. It's awkward writing unittests 
> generically without knowledge of a specific type T. Is this "the way it 
> is" or is there some nice programming technique that I should be using 
> here? I find myself thinking about writing a separate test program (C++ 
> style) where I can work with specific specializations of the template.
> 
> Peter

While this is most certainly a bug, for the meantime you could try writing a module level 
unittest block for your template.  Something like:

# class Foo (T) {
#   // ...
# }
# unittest {
#   // ...
# }

You won't be writing a "generic" test, but you should be able to check the particular 
things you're wanting to.

-- Chris Nicholson-Sauls


More information about the Digitalmars-d-learn mailing list