| Re: [eigen] Bug in traspose |
[ Thread Index | Date Index | More lists.tuxfamily.org/eigen Archives ]
Hi,
On Thursday 17 January 2008 03:01:59 Ian Mackenzie wrote:
> CxxTest doesn't seem designed specifically to test template functions,
> although of course you could always do something like
(snip)
> void test_template()
> {
> template_test<1>();
> template_test<2>();
> };
exactly what I am currently doing with QTestLib ;)
> I don't see a built-in way to pass command-line options to the tests, or
> only running one test in a suite. I don't know if this helps at all, but
> if you use the CTest testing framework bundled with CMake, you can use the
> -R command line option to only run test executables whose name matches a
> given regular expression, so you could (for instance) prefix each of your
> test names with 'linux_' or 'windows_' or whatever and then run 'ctest -R
> linux' or 'ctest -R windows' depending on what platform you're on.
Interesting, I hadn't considered CTest.
From what Ben and you say, I probably won't use CxxTest; in fact my original
idea was to write my unit-tests without relying on any existing framework, as
there is not so much work to do than what I have already done (currently we
don't use a lot of stuff from QTestLib). Now that you mention CTest I'll
consider it, it seems to be the only one potentially solving one of my 2
problems and at leasts is no additional dependency.
My TODO for alpha4 looks like this:
- port the unit-tests to whichever framework we decide to;
- improve/update unit-tests
- add a comma-initializer (class with overloaded operator,) allowing to do
things like
Matrix3d m;
m.list(), 1, 2, 3 .newline(),
4, 5, 6 .newline(),
7, 8, 9 .end();
In this design, m.list() returns an object of
type "CommaInitializer<MatrixType>" which stores a reference to m, and
subsequently one calls CommaInitializer::operator, ,
CommaInitializer::newline(), CommaInitializer::end;
The matrix m may be of dynamic size but it must have its correct size before
calling m.list().
The cool things by comparisons with existing comma-initializers (tvmet or
afaik blitz++) is that we do explicit "newline()", each call checks that
ranges are respected, and "end()" checks that exactly the right number of
coefficients was passed; the even cooler thing is that we can allow the items
in the list to be matrices, hence constructing a matrix by blocks:
Matrix4d m;
Matrix2d blocks[4];
m.list(), blocks[0], blocks[1] .newline(),
blocks[2], blocks[3] .end();
This is not even limited to fixed-size matrices and blocks.
- i will benchmark minor() as I am not sure if it allows the compiler to
generate optimized-enough code and will remove it (not very useful anyway) if
it turns out to be intrinsically slow (if there is a conditional branch at
every coefficient access). Or will implement it in a read-only,
immediate-evaluation way, which will make it even less useful.
See you when I get back to coding!
Cheers,
Benoit
Attachment:
signature.asc
Description: This is a digitally signed message part.
| Mail converted by MHonArc 2.6.19+ | http://listengine.tuxfamily.org/ |