//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\r
\r
#include <boost/qvm/mat_operations.hpp>\r
+#include <boost/qvm/mat.hpp>\r
#include "test_qvm_matrix.hpp"\r
#include "test_qvm_vector.hpp"\r
#include "gold.hpp"\r
BOOST_QVM_TEST_EQ(m3.a,m3.a);\r
}\r
}\r
+\r
+ template <int D>\r
+ void\r
+ test_xzy()\r
+ {\r
+ using namespace boost::qvm;\r
+ for( float x1=0; x1<6.28f; x1+=0.5f )\r
+ for( float z2=0; z2<6.28f; z2+=0.5f )\r
+ for( float y3=0; y3<6.28f; y3+=0.5f )\r
+ {\r
+ mat<float,D,D> const m2 = rotx_mat<D>(x1) * rotz_mat<D>(z2) * roty_mat<D>(y3);\r
+ {\r
+ mat<float,D,D> m1 = rot_mat_xzy<D>(x1,z2,y3);\r
+ BOOST_QVM_TEST_CLOSE(m1.a,m2.a,0.0002f);\r
+ }\r
+ {\r
+ mat<float,D,D> m1; set_rot_xzy(m1,x1,z2,y3);\r
+ BOOST_QVM_TEST_CLOSE(m1.a,m2.a,0.0002f);\r
+ }\r
+ {\r
+ mat<float,D,D> m1 = identity_mat<float,D>(); rotate_xzy(m1,x1,z2,y3);\r
+ BOOST_QVM_TEST_CLOSE(m1.a,m2.a,0.0002f);\r
+ }\r
+ }\r
+ }\r
+\r
+ template <int D>\r
+ void\r
+ test_xyz()\r
+ {\r
+ using namespace boost::qvm;\r
+ for( float x1=0; x1<6.28f; x1+=0.5f )\r
+ for( float y2=0; y2<6.28f; y2+=0.5f )\r
+ for( float z3=0; z3<6.28f; z3+=0.5f )\r
+ {\r
+ mat<float,D,D> const m2 = rotx_mat<D>(x1) * roty_mat<D>(y2) * rotz_mat<D>(z3);\r
+ {\r
+ mat<float,D,D> m1 = rot_mat_xyz<D>(x1,y2,z3);\r
+ BOOST_QVM_TEST_CLOSE(m1.a,m2.a,0.0002f);\r
+ }\r
+ {\r
+ mat<float,D,D> m1; set_rot_xyz(m1,x1,y2,z3);\r
+ BOOST_QVM_TEST_CLOSE(m1.a,m2.a,0.0002f);\r
+ }\r
+ {\r
+ mat<float,D,D> m1 = identity_mat<float,D>(); rotate_xyz(m1,x1,y2,z3);\r
+ BOOST_QVM_TEST_CLOSE(m1.a,m2.a,0.0002f);\r
+ }\r
+ }\r
+ }\r
+\r
+ template <int D>\r
+ void\r
+ test_yxz()\r
+ {\r
+ using namespace boost::qvm;\r
+ for( float y1=0; y1<6.28f; y1+=0.5f )\r
+ for( float x2=0; x2<6.28f; x2+=0.5f )\r
+ for( float z3=0; z3<6.28f; z3+=0.5f )\r
+ {\r
+ mat<float,D,D> const m2 = roty_mat<D>(y1) * rotx_mat<D>(x2) * rotz_mat<D>(z3);\r
+ {\r
+ mat<float,D,D> m1 = rot_mat_yxz<D>(y1,x2,z3);\r
+ BOOST_QVM_TEST_CLOSE(m1.a,m2.a,0.0002f);\r
+ }\r
+ {\r
+ mat<float,D,D> m1; set_rot_yxz(m1,y1,x2,z3);\r
+ BOOST_QVM_TEST_CLOSE(m1.a,m2.a,0.0002f);\r
+ }\r
+ {\r
+ mat<float,D,D> m1 = identity_mat<float,D>(); rotate_yxz(m1,y1,x2,z3);\r
+ BOOST_QVM_TEST_CLOSE(m1.a,m2.a,0.0002f);\r
+ }\r
+ }\r
+ }\r
+\r
+ template <int D>\r
+ void\r
+ test_yzx()\r
+ {\r
+ using namespace boost::qvm;\r
+ for( float y1=0; y1<6.28f; y1+=0.5f )\r
+ for( float z2=0; z2<6.28f; z2+=0.5f )\r
+ for( float x3=0; x3<6.28f; x3+=0.5f )\r
+ {\r
+ mat<float,D,D> const m2 = roty_mat<D>(y1) * rotz_mat<D>(z2) * rotx_mat<D>(x3);\r
+ {\r
+ mat<float,D,D> m1 = rot_mat_yzx<D>(y1,z2,x3);\r
+ BOOST_QVM_TEST_CLOSE(m1.a,m2.a,0.0002f);\r
+ }\r
+ {\r
+ mat<float,D,D> m1; set_rot_yzx(m1,y1,z2,x3);\r
+ BOOST_QVM_TEST_CLOSE(m1.a,m2.a,0.0002f);\r
+ }\r
+ {\r
+ mat<float,D,D> m1 = identity_mat<float,D>(); rotate_yzx(m1,y1,z2,x3);\r
+ BOOST_QVM_TEST_CLOSE(m1.a,m2.a,0.0002f);\r
+ }\r
+ }\r
+ }\r
+\r
+ template <int D>\r
+ void\r
+ test_zyx()\r
+ {\r
+ using namespace boost::qvm;\r
+ for( float z1=0; z1<6.28f; z1+=0.5f )\r
+ for( float y2=0; y2<6.28f; y2+=0.5f )\r
+ for( float x3=0; x3<6.28f; x3+=0.5f )\r
+ {\r
+ mat<float,D,D> const m2 = rotz_mat<D>(z1) * roty_mat<D>(y2) * rotx_mat<D>(x3);\r
+ {\r
+ mat<float,D,D> m1 = rot_mat_zyx<D>(z1,y2,x3);\r
+ BOOST_QVM_TEST_CLOSE(m1.a,m2.a,0.0002f);\r
+ }\r
+ {\r
+ mat<float,D,D> m1; set_rot_zyx(m1,z1,y2,x3);\r
+ BOOST_QVM_TEST_CLOSE(m1.a,m2.a,0.0002f);\r
+ }\r
+ {\r
+ mat<float,D,D> m1 = identity_mat<float,D>(); rotate_zyx(m1,z1,y2,x3);\r
+ BOOST_QVM_TEST_CLOSE(m1.a,m2.a,0.0002f);\r
+ }\r
+ }\r
+ }\r
+\r
+ template <int D>\r
+ void\r
+ test_zxy()\r
+ {\r
+ using namespace boost::qvm;\r
+ for( float z1=0; z1<6.28f; z1+=0.5f )\r
+ for( float x2=0; x2<6.28f; x2+=0.5f )\r
+ for( float y3=0; y3<6.28f; y3+=0.5f )\r
+ {\r
+ mat<float,D,D> const m2 = rotz_mat<D>(z1) * rotx_mat<D>(x2) * roty_mat<D>(y3);\r
+ {\r
+ mat<float,D,D> m1 = rot_mat_zxy<D>(z1,x2,y3);\r
+ BOOST_QVM_TEST_CLOSE(m1.a,m2.a,0.0002f);\r
+ }\r
+ {\r
+ mat<float,D,D> m1; set_rot_zxy(m1,z1,x2,y3);\r
+ BOOST_QVM_TEST_CLOSE(m1.a,m2.a,0.0002f);\r
+ }\r
+ {\r
+ mat<float,D,D> m1 = identity_mat<float,D>(); rotate_zxy(m1,z1,x2,y3);\r
+ BOOST_QVM_TEST_CLOSE(m1.a,m2.a,0.0002f);\r
+ }\r
+ }\r
+ }\r
+\r
+ template <int D>\r
+ void\r
+ test_xzx()\r
+ {\r
+ using namespace boost::qvm;\r
+ for( float x1=0; x1<6.28f; x1+=0.5f )\r
+ for( float z2=0; z2<6.28f; z2+=0.5f )\r
+ for( float x3=0; x3<6.28f; x3+=0.5f )\r
+ {\r
+ mat<float,D,D> const m2 = rotx_mat<D>(x1) * rotz_mat<D>(z2) * rotx_mat<D>(x3);\r
+ {\r
+ mat<float,D,D> m1 = rot_mat_xzx<D>(x1,z2,x3);\r
+ BOOST_QVM_TEST_CLOSE(m1.a,m2.a,0.0002f);\r
+ }\r
+ {\r
+ mat<float,D,D> m1; set_rot_xzx(m1,x1,z2,x3);\r
+ BOOST_QVM_TEST_CLOSE(m1.a,m2.a,0.0002f);\r
+ }\r
+ {\r
+ mat<float,D,D> m1 = identity_mat<float,D>(); rotate_xzx(m1,x1,z2,x3);\r
+ BOOST_QVM_TEST_CLOSE(m1.a,m2.a,0.0002f);\r
+ }\r
+ }\r
+ }\r
+\r
+ template <int D>\r
+ void\r
+ test_xyx()\r
+ {\r
+ using namespace boost::qvm;\r
+ for( float x1=0; x1<6.28f; x1+=0.5f )\r
+ for( float y2=0; y2<6.28f; y2+=0.5f )\r
+ for( float x3=0; x3<6.28f; x3+=0.5f )\r
+ {\r
+ mat<float,D,D> const m2 = rotx_mat<D>(x1) * roty_mat<D>(y2) * rotx_mat<D>(x3);\r
+ {\r
+ mat<float,D,D> m1 = rot_mat_xyx<D>(x1,y2,x3);\r
+ BOOST_QVM_TEST_CLOSE(m1.a,m2.a,0.0002f);\r
+ }\r
+ {\r
+ mat<float,D,D> m1; set_rot_xyx(m1,x1,y2,x3);\r
+ BOOST_QVM_TEST_CLOSE(m1.a,m2.a,0.0002f);\r
+ }\r
+ {\r
+ mat<float,D,D> m1 = identity_mat<float,D>(); rotate_xyx(m1,x1,y2,x3);\r
+ BOOST_QVM_TEST_CLOSE(m1.a,m2.a,0.0002f);\r
+ }\r
+ }\r
+ }\r
+\r
+ template <int D>\r
+ void\r
+ test_yxy()\r
+ {\r
+ using namespace boost::qvm;\r
+ for( float y1=0; y1<6.28f; y1+=0.5f )\r
+ for( float x2=0; x2<6.28f; x2+=0.5f )\r
+ for( float y3=0; y3<6.28f; y3+=0.5f )\r
+ {\r
+ mat<float,D,D> const m2 = roty_mat<D>(y1) * rotx_mat<D>(x2) * roty_mat<D>(y3);\r
+ {\r
+ mat<float,D,D> m1 = rot_mat_yxy<D>(y1,x2,y3);\r
+ BOOST_QVM_TEST_CLOSE(m1.a,m2.a,0.0002f);\r
+ }\r
+ {\r
+ mat<float,D,D> m1; set_rot_yxy(m1,y1,x2,y3);\r
+ BOOST_QVM_TEST_CLOSE(m1.a,m2.a,0.0002f);\r
+ }\r
+ {\r
+ mat<float,D,D> m1 = identity_mat<float,D>(); rotate_yxy(m1,y1,x2,y3);\r
+ BOOST_QVM_TEST_CLOSE(m1.a,m2.a,0.0002f);\r
+ }\r
+ }\r
+ }\r
+\r
+ template <int D>\r
+ void\r
+ test_yzy()\r
+ {\r
+ using namespace boost::qvm;\r
+ for( float y1=0; y1<6.28f; y1+=0.5f )\r
+ for( float z2=0; z2<6.28f; z2+=0.5f )\r
+ for( float y3=0; y3<6.28f; y3+=0.5f )\r
+ {\r
+ mat<float,D,D> const m2 = roty_mat<D>(y1) * rotz_mat<D>(z2) * roty_mat<D>(y3);\r
+ {\r
+ mat<float,D,D> m1 = rot_mat_yzy<D>(y1,z2,y3);\r
+ BOOST_QVM_TEST_CLOSE(m1.a,m2.a,0.0002f);\r
+ }\r
+ {\r
+ mat<float,D,D> m1; set_rot_yzy(m1,y1,z2,y3);\r
+ BOOST_QVM_TEST_CLOSE(m1.a,m2.a,0.0002f);\r
+ }\r
+ {\r
+ mat<float,D,D> m1 = identity_mat<float,D>(); rotate_yzy(m1,y1,z2,y3);\r
+ BOOST_QVM_TEST_CLOSE(m1.a,m2.a,0.0002f);\r
+ }\r
+ }\r
+ }\r
+\r
+ template <int D>\r
+ void\r
+ test_zyz()\r
+ {\r
+ using namespace boost::qvm;\r
+ for( float z1=0; z1<6.28f; z1+=0.5f )\r
+ for( float y2=0; y2<6.28f; y2+=0.5f )\r
+ for( float z3=0; z3<6.28f; z3+=0.5f )\r
+ {\r
+ mat<float,D,D> const m2 = rotz_mat<D>(z1) * roty_mat<D>(y2) * rotz_mat<D>(z3);\r
+ {\r
+ mat<float,D,D> m1 = rot_mat_zyz<D>(z1,y2,z3);\r
+ BOOST_QVM_TEST_CLOSE(m1.a,m2.a,0.0002f);\r
+ }\r
+ {\r
+ mat<float,D,D> m1; set_rot_zyz(m1,z1,y2,z3);\r
+ BOOST_QVM_TEST_CLOSE(m1.a,m2.a,0.0002f);\r
+ }\r
+ {\r
+ mat<float,D,D> m1 = identity_mat<float,D>(); rotate_zyz(m1,z1,y2,z3);\r
+ BOOST_QVM_TEST_CLOSE(m1.a,m2.a,0.0002f);\r
+ }\r
+ }\r
+ }\r
+\r
+ template <int D>\r
+ void\r
+ test_zxz()\r
+ {\r
+ using namespace boost::qvm;\r
+ for( float z1=0; z1<6.28f; z1+=0.5f )\r
+ for( float x2=0; x2<6.28f; x2+=0.5f )\r
+ for( float z3=0; z3<6.28f; z3+=0.5f )\r
+ {\r
+ mat<float,D,D> const m2 = rotz_mat<D>(z1) * rotx_mat<D>(x2) * rotz_mat<D>(z3);\r
+ {\r
+ mat<float,D,D> m1 = rot_mat_zxz<D>(z1,x2,z3);\r
+ BOOST_QVM_TEST_CLOSE(m1.a,m2.a,0.0002f);\r
+ }\r
+ {\r
+ mat<float,D,D> m1; set_rot_zxz(m1,z1,x2,z3);\r
+ BOOST_QVM_TEST_CLOSE(m1.a,m2.a,0.0002f);\r
+ }\r
+ {\r
+ mat<float,D,D> m1 = identity_mat<float,D>(); rotate_zxz(m1,z1,x2,z3);\r
+ BOOST_QVM_TEST_CLOSE(m1.a,m2.a,0.0002f);\r
+ }\r
+ }\r
+ }\r
}\r
\r
int\r
test_x<3>();\r
test_y<3>();\r
test_z<3>();\r
+ test_xzy<3>();\r
+ test_xyz<3>();\r
+ test_yxz<3>();\r
+ test_yzx<3>();\r
+ test_zyx<3>();\r
+ test_zxy<3>();\r
+ test_xzx<3>();\r
+ test_xyx<3>();\r
+ test_yxy<3>();\r
+ test_yzy<3>();\r
+ test_zyz<3>();\r
+ test_zxz<3>();\r
test_x<4>();\r
test_y<4>();\r
test_z<4>();\r
+ test_xzy<4>();\r
+ test_xyz<4>();\r
+ test_yxz<4>();\r
+ test_yzx<4>();\r
+ test_zyx<4>();\r
+ test_zxy<4>();\r
+ test_xzx<4>();\r
+ test_xyx<4>();\r
+ test_yxy<4>();\r
+ test_yzy<4>();\r
+ test_zyz<4>();\r
+ test_zxz<4>();\r
test_x<5>();\r
test_y<5>();\r
test_z<5>();\r
+ test_xzy<5>();\r
+ test_xyz<5>();\r
+ test_yxz<5>();\r
+ test_yzx<5>();\r
+ test_zyx<5>();\r
+ test_zxy<5>();\r
+ test_xzx<5>();\r
+ test_xyx<5>();\r
+ test_yxy<5>();\r
+ test_yzy<5>();\r
+ test_zyz<5>();\r
+ test_zxz<5>();\r
return boost::report_errors();\r
}\r