digitalmars.D.learn - Problem with unittest in templates.
- "Peter C. Chapin" <pchapin sover.net> Dec 29 2006
- Thomas Kuehne <thomas-dloop kuehne.cn> Dec 29 2006
- "Peter C. Chapin" <pchapin sover.net> Dec 30 2006
- Chris Nicholson-Sauls <ibisbasenji gmail.com> Dec 29 2006
- "Peter C. Chapin" <pchapin sover.net> Dec 30 2006
- Jason House <jason.james.house gmail.com> Dec 30 2006
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
Dec 29 2006
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
Dec 29 2006
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
Dec 30 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
Dec 29 2006
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
Dec 30 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
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.
Dec 30 2006









"Peter C. Chapin" <pchapin sover.net> 