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