Hi,
I'm using CxxTest 3.10.1 to unit-test my code. I wrote an extension to
correctly handle osg::Vec3 data, which works fine on MSVC, but won't compile
using GCC 4.3.3.
The extension consists of two parts - a ValueTraits-implementation to print
osg::Vec3 data in readable form, and a delta-function to check if two osg::Vec3
are almost equal.
The extension:
Code:
#include <osg/Vec3>
#include <osg/io_utils>
namespace CxxTest {
CXXTEST_TEMPLATE_INSTANTIATION
class ValueTraits<osg::Vec3> {
std::string s;
public:
ValueTraits(const osg::Vec3& v) {
std::ostringstream oss;
oss << "osg::Vec3(" << v << ")";
s = oss.str();
}
const char* asString() const { return s.c_str(); }
};
template <class D>
bool delta (osg::Vec3 x, osg::Vec3 y, D d) {
return ((y.x() >= x.x() - d) && y.x() <= x.x() + d) &&
(y.y() >= x.y() - d) && y.y() <= x.y() + d) &&
(y.z() >= x.z() - d) && y.z() <= x.z() + d));
}
}
I use it in a test like this:
Code:
void test_vec3 {
osg::Vec3 a(1.0, 1.0, 1.0);
osg::Vec3 b(1.01, 1.01, 1.01);
TS_ASSERT_DELTA(a, b, 0.001); // Fails
TS_ASSERT_DELTA(a, b, 0.1); // Passes
}
When compiling with gcc it seems like my delta-function is not found or used,
the compiler tries to use the generic templated "delta(X x, Y y, D d)", which
tries to test for "y >= x - d && y <= x + d".
Compiler-output:
Code:
/home/docdrum/dev/OsgProjectTests/tests/cpptests/lib/cxxtest/cxxtest/TestSuite.h:
In function »bool CxxTest::delta(X, Y, D) [with X = osg::Vec3f, Y =
osg::Vec3f, D = double]«:
/home/docdrum/dev/OsgProjectTests/tests/cpptests/lib/cxxtest/cxxtest/TestSuite.h:172:
instantiated from »void CxxTest::doAssertDelta(const char*, unsigned int,
const char*, X, const char*, Y, const char*, D, const char*) [with X =
osg::Vec3f, Y = osg::Vec3f, D = double]«
/home/docdrum/dev/OsgProjectTests/tests/cpptests/unit/UnitTest.h:122:
instantiated from here
/home/docdrum/dev/OsgProjectTests/tests/cpptests/lib/cxxtest/cxxtest/TestSuite.h:162:
Fehler: no match für »operator+« in »x + d«
/usr/include/osg/Vec3f:135: Anmerkung: Kandidaten sind: const osg::Vec3f
osg::Vec3f::operator+(const osg::Vec3f&) const
/home/docdrum/dev/OsgProjectTests/tests/cpptests/lib/cxxtest/cxxtest/TestSuite.h:162:
Fehler: no match für »operator-« in »x - d«
/usr/include/osg/Vec3f:152: Anmerkung: Kandidaten sind: const osg::Vec3f
osg::Vec3f::operator-(const osg::Vec3f&) const
/usr/include/osg/Vec3f:167: Anmerkung: const osg::Vec3f
osg::Vec3f::operator-() const
make[2]: *** [tests/cpptests/unit/CMakeFiles/UnitTest.dir/UnitTest.cpp.o]
Fehler 1
make[1]: *** [tests/cpptests/unit/CMakeFiles/UnitTest.dir/all] Fehler 2
make: *** [all] Fehler 2
I tried using all combinations of osg::Vec3f instead of osg::Vec3, using
const-references, float- and double-parameters for d instead of templating...
Any ideas how I can make this work on GCC?
Thank you!
Cheers,
Colin
[/code]
------------------
Read this topic online here:
http://forum.openscenegraph.org/viewtopic.php?p=45407#45407
_______________________________________________
osg-users mailing list
[email protected]
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org