digitalmars.D.learn - Problem with unittest in templates.
- Peter C. Chapin (27/27) Dec 29 2006 Hello! I'm using dmd 0.178. I'm having trouble getting the unittest
- Thomas Kuehne (4/24) Dec 29 2006 Please file a bug report:
- Peter C. Chapin (4/6) Dec 30 2006 Done.
- Chris Nicholson-Sauls (12/47) Dec 29 2006 While this is most certainly a bug, for the meantime you could try writi...
- Peter C. Chapin (7/17) Dec 30 2006 That's cool. I didn't realize you could do that. This has the advantage
- Jason House (5/40) Dec 30 2006 In my experiments with D, I've found that you must instantiate the
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/issuesDone. 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. PeterWhile this is most certainly a bug, for the meantime you could try writing a module level unittest block for your template. Something like: 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: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. PeterIn 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