]> git.proxmox.com Git - ceph.git/blobdiff - ceph/src/boost/libs/qvm/test/rot_mat_test.cpp
update sources to ceph Nautilus 14.2.1
[ceph.git] / ceph / src / boost / libs / qvm / test / rot_mat_test.cpp
index aca0cd6bc62884ae00df264fb3c82b1d9297c181..7a9afac2bff80c311a27ef7f0208273ee666519b 100644 (file)
@@ -4,6 +4,7 @@
 //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
@@ -78,6 +79,306 @@ namespace
             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
@@ -86,11 +387,47 @@ main()
     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