Thread overview | ||||||||
---|---|---|---|---|---|---|---|---|
|
December 29, 2006 Problem with unittest in templates. | ||||
---|---|---|---|---|
| ||||
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 |
December 29, 2006 Re: Problem with unittest in templates. | ||||
---|---|---|---|---|
| ||||
Posted in reply to Peter C. Chapin | Peter C. Chapin <pchapin@sover.net> schrieb: > 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? Please file a bug report: http://d.puremagic.com/issues Thomas |
December 29, 2006 Re: Problem with unittest in templates. | ||||
---|---|---|---|---|
| ||||
Posted in reply to Peter C. Chapin | 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
|
December 30, 2006 Re: Problem with unittest in templates. | ||||
---|---|---|---|---|
| ||||
Posted in reply to Thomas Kuehne | Thomas Kuehne <thomas-dloop@kuehne.cn> wrote in news:slrnepaeuk.8ki.gast@birke.kuehne.cn: > Please file a bug report: > http://d.puremagic.com/issues Done. Peter |
December 30, 2006 Re: Problem with unittest in templates. | ||||
---|---|---|---|---|
| ||||
Posted in reply to Chris Nicholson-Sauls | Chris Nicholson-Sauls <ibisbasenji@gmail.com> wrote in news:en3n33$1vck$1@digitaldaemon.com: > 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 { > # // ... > # } That's cool. I didn't realize you could do that. This has the advantage in this case of not requiring the unittest block to be generic. I find building completely generic tests that are also reasonably exhaustive to be something of a challenge. Peter |
December 31, 2006 Re: Problem with unittest in templates. | ||||
---|---|---|---|---|
| ||||
Posted in reply to Peter C. Chapin | 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
In my experiments with D, I've found that you must instantiate the templated class in order to get the unittest to run. I don't know if it's one unit test execution per instantiation or one unit test run for each complete type (such as T=int, T=char, etc...). I'd guess the latter.
|
Copyright © 1999-2021 by the D Language Foundation