]> git.proxmox.com Git - ceph.git/blobdiff - ceph/src/boost/libs/qvm/test/interop_test.cpp
import new upstream nautilus stable release 14.2.8
[ceph.git] / ceph / src / boost / libs / qvm / test / interop_test.cpp
index b08716ef08911a369c9339077c22180773285a00..37d67fc5acc73ebde381831a39c17ef6ba69a6e4 100644 (file)
-//Copyright (c) 2008-2016 Emil Dotchevski and Reverge Studios, Inc.\r
-\r
-//Distributed under the Boost Software License, Version 1.0. (See accompanying\r
-//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\r
-\r
-#include <boost/qvm/operations.hpp>\r
-#include <boost/qvm/quat.hpp>\r
-#include <boost/qvm/vec.hpp>\r
-#include <boost/qvm/mat.hpp>\r
-\r
-namespace\r
-my_stuff\r
-    {\r
-    struct\r
-    mat\r
-        {\r
-        float a[3][3];\r
-        };\r
-\r
-    struct\r
-    vec\r
-        {\r
-        float a[3];\r
-        };\r
-\r
-    struct\r
-    quat\r
-        {\r
-        float a[4];\r
-        };\r
-    }\r
-\r
-namespace\r
-boost\r
-    {\r
-    namespace\r
-    qvm\r
-        {\r
-        template <>\r
-        struct\r
-        mat_traits<my_stuff::mat>\r
-            {\r
-            typedef float scalar_type;\r
-            static int const rows=3;\r
-            static int const cols=3;\r
-\r
-            template <int R,int C>\r
-            static\r
-            scalar_type &\r
-            write_element( my_stuff::mat & m )\r
-                {\r
-                BOOST_QVM_STATIC_ASSERT(R>=0);\r
-                BOOST_QVM_STATIC_ASSERT(R<rows);\r
-                BOOST_QVM_STATIC_ASSERT(C>=0);\r
-                BOOST_QVM_STATIC_ASSERT(C<cols);\r
-                return m.a[R][C];\r
-                }\r
-\r
-            template <int R,int C>\r
-            static\r
-            scalar_type\r
-            read_element( my_stuff::mat const & m )\r
-                {\r
-                BOOST_QVM_STATIC_ASSERT(R>=0);\r
-                BOOST_QVM_STATIC_ASSERT(R<rows);\r
-                BOOST_QVM_STATIC_ASSERT(C>=0);\r
-                BOOST_QVM_STATIC_ASSERT(C<cols);\r
-                return m.a[R][C];\r
-                }\r
-\r
-            static\r
-            inline\r
-            scalar_type &\r
-            write_element_idx( int r, int c, my_stuff::mat & m )\r
-                {\r
-                BOOST_QVM_ASSERT(r>=0);\r
-                BOOST_QVM_ASSERT(r<rows);\r
-                BOOST_QVM_ASSERT(c>=0);\r
-                BOOST_QVM_ASSERT(c<cols);\r
-                return m.a[r][c];\r
-                }\r
-\r
-            static\r
-            inline\r
-            scalar_type\r
-            read_element_idx( int r, int c, my_stuff::mat const & m )\r
-                {\r
-                BOOST_QVM_ASSERT(r>=0);\r
-                BOOST_QVM_ASSERT(r<rows);\r
-                BOOST_QVM_ASSERT(c>=0);\r
-                BOOST_QVM_ASSERT(c<cols);\r
-                return m.a[r][c];\r
-                }\r
-            };\r
-\r
-        template <>\r
-        struct\r
-        vec_traits<my_stuff::vec>\r
-            {\r
-            static int const dim=3;\r
-            typedef float scalar_type;\r
-\r
-            template <int I>\r
-            static\r
-            scalar_type &\r
-            write_element( my_stuff::vec & m )\r
-                {\r
-                BOOST_QVM_STATIC_ASSERT(I>=0);\r
-                BOOST_QVM_STATIC_ASSERT(I<dim);\r
-                return m.a[I];\r
-                }\r
-\r
-            template <int I>\r
-            static\r
-            scalar_type\r
-            read_element( my_stuff::vec const & m )\r
-                {\r
-                BOOST_QVM_STATIC_ASSERT(I>=0);\r
-                BOOST_QVM_STATIC_ASSERT(I<dim);\r
-                return m.a[I];\r
-                }\r
-\r
-            static\r
-            inline\r
-            scalar_type &\r
-            write_element_idx( int i, my_stuff::vec & m )\r
-                {\r
-                BOOST_QVM_ASSERT(i>=0);\r
-                BOOST_QVM_ASSERT(i<dim);\r
-                return m.a[i];\r
-                }\r
-\r
-            static\r
-            inline\r
-            scalar_type\r
-            read_element_idx( int i, my_stuff::vec const & m )\r
-                {\r
-                BOOST_QVM_ASSERT(i>=0);\r
-                BOOST_QVM_ASSERT(i<dim);\r
-                return m.a[i];\r
-                }\r
-            };\r
-\r
-        template <>\r
-        struct\r
-        quat_traits<my_stuff::quat>\r
-            {\r
-            typedef float scalar_type;\r
-\r
-            template <int I>\r
-            static\r
-            scalar_type &\r
-            write_element( my_stuff::quat & m )\r
-                {\r
-                BOOST_QVM_STATIC_ASSERT(I>=0);\r
-                BOOST_QVM_STATIC_ASSERT(I<4);\r
-                return m.a[I];\r
-                }\r
-\r
-            template <int I>\r
-            static\r
-            scalar_type\r
-            read_element( my_stuff::quat const & m )\r
-                {\r
-                BOOST_QVM_STATIC_ASSERT(I>=0);\r
-                BOOST_QVM_STATIC_ASSERT(I<4);\r
-                return m.a[I];\r
-                }\r
-            };\r
-        }\r
-    }\r
-\r
-namespace\r
-my_stuff\r
-    {\r
-    mat &\r
-    operator/=( mat & x, float y )\r
-        {\r
-        return boost::qvm::operator/=(x,y);\r
-        }\r
-\r
-    vec &\r
-    operator/=( vec & x, float y )\r
-        {\r
-        return boost::qvm::operator/=(x,y);\r
-        }\r
-\r
-    quat &\r
-    operator/=( quat & x, float y )\r
-        {\r
-        return boost::qvm::operator/=(x,y);\r
-        }\r
-\r
-    mat &\r
-    operator*=( mat & x, float y )\r
-        {\r
-        return boost::qvm::operator*=(x,y);\r
-        }\r
-\r
-    vec &\r
-    operator*=( vec & x, float y )\r
-        {\r
-        return boost::qvm::operator*=(x,y);\r
-        }\r
-\r
-    quat &\r
-    operator*=( quat & x, float y )\r
-        {\r
-        return boost::qvm::operator*=(x,y);\r
-        }\r
-\r
-    mat\r
-    operator/( mat const & x, float y )\r
-        {\r
-        return boost::qvm::operator/(x,y);\r
-        }\r
-\r
-    vec\r
-    operator/( vec const & x, float y )\r
-        {\r
-        return boost::qvm::operator/(x,y);\r
-        }\r
-\r
-    quat\r
-    operator/( quat const & x, float y )\r
-        {\r
-        return boost::qvm::operator/(x,y);\r
-        }\r
-\r
-    mat\r
-    operator*( mat const & x, float y )\r
-        {\r
-        return boost::qvm::operator*(x,y);\r
-        }\r
-\r
-    vec\r
-    operator*( vec const & x, float y )\r
-        {\r
-        return boost::qvm::operator*(x,y);\r
-        }\r
-\r
-    quat\r
-    operator*( quat const & x, float y )\r
-        {\r
-        return boost::qvm::operator*(x,y);\r
-        }\r
-\r
-    mat &\r
-    operator*=( mat & x, mat const & y )\r
-        {\r
-        return boost::qvm::operator*=(x,y);\r
-        }\r
-\r
-    mat\r
-    operator*=( mat const & x, mat const & y )\r
-        {\r
-        return boost::qvm::operator*(x,y);\r
-        }\r
-\r
-    vec\r
-    operator*( mat const & x, vec const & y )\r
-        {\r
-        return boost::qvm::operator*(x,y);\r
-        }\r
-\r
-    vec\r
-    operator*( quat const & x, vec const & y )\r
-        {\r
-        return boost::qvm::operator*(x,y);\r
-        }\r
-\r
-    vec\r
-    operator*( vec const & x, mat const & y )\r
-        {\r
-        return boost::qvm::operator*(x,y);\r
-        }\r
-\r
-    bool\r
-    operator==( mat const & x, mat const & y )\r
-        {\r
-        return boost::qvm::operator==(x,y);\r
-        }\r
-\r
-    bool\r
-    operator!=( mat const & x, mat const & y )\r
-        {\r
-        return boost::qvm::operator!=(x,y);\r
-        }\r
-\r
-    bool\r
-    operator==( vec const & x, vec const & y )\r
-        {\r
-        return boost::qvm::operator==(x,y);\r
-        }\r
-\r
-    bool\r
-    operator!=( vec const & x, vec const & y )\r
-        {\r
-        return boost::qvm::operator!=(x,y);\r
-        }\r
-\r
-    bool\r
-    operator==( quat const & x, quat const & y )\r
-        {\r
-        return boost::qvm::operator==(x,y);\r
-        }\r
-\r
-    bool\r
-    operator!=( quat const & x, quat const & y )\r
-        {\r
-        return boost::qvm::operator!=(x,y);\r
-        }\r
-    }\r
-\r
-int\r
-main()\r
-    {\r
-    using namespace boost::qvm::sfinae;\r
-    using namespace my_stuff;\r
-    typedef boost::qvm::mat<double,3,3> mat2;\r
-    typedef boost::qvm::vec<double,3> vec2;\r
-    typedef boost::qvm::quat<double> quat2;\r
-\r
-    mat ma1, mb1; set_zero(ma1); set_zero(mb1);\r
-    vec va1, vb1; set_zero(va1); set_zero(vb1);\r
-    quat qa1, qb1; set_zero(qa1); set_zero(qb1);\r
-    mat2 ma2, mb2; set_zero(ma2); set_zero(mb2);\r
-    vec2 va2, vb2; set_zero(va2); set_zero(vb2);\r
-    quat2 qa2, qb2; set_zero(qa2); set_zero(qb2);\r
-\r
-    set_zero(ma1);\r
-    set_zero(mb1);\r
-    set_zero(va1);\r
-    set_zero(vb1);\r
-    set_zero(qa1);\r
-    set_zero(qb1);\r
-    set_zero(ma2);\r
-    set_zero(mb2);\r
-    set_zero(va2);\r
-    set_zero(vb2);\r
-    set_zero(qa2);\r
-    set_zero(qb2);\r
-\r
-    ma1/=2;\r
-    va1/=2;\r
-    qa1/=2;\r
-    ma2/=2;\r
-    va2/=2;\r
-    qa2/=2;\r
-\r
-    ma1*=2;\r
-    va1*=2;\r
-    qa1*=2;\r
-    ma2*=2;\r
-    va2*=2;\r
-    qa2*=2;\r
-\r
-    mb1=ma1/2;\r
-    vb1=va1/2;\r
-    qb1=qb1/2;\r
-    mb2=convert_to<mat2>(ma1/2);\r
-    vb2=convert_to<vec2>(va1/2);\r
-    qb2=convert_to<quat2>(qa1/2);\r
-    mb1=scalar_cast<float>(ma2/2);\r
-    vb1=scalar_cast<float>(va2/2);\r
-    qb1=scalar_cast<float>(qa2/2);\r
-\r
-    mb1=ma1*2;\r
-    vb1=va1*2;\r
-    qb1=qa1*2;\r
-    mb2=convert_to<mat2>(ma1*2);\r
-    vb2=convert_to<vec2>(va1*2);\r
-    qb2=convert_to<quat2>(qa1*2);\r
-    mb1=scalar_cast<float>(ma2*2);\r
-    vb1=scalar_cast<float>(va2*2);\r
-    qb1=scalar_cast<float>(qa2*2);\r
-\r
-    ma1*=mb1;\r
-    ma1*=scalar_cast<float>(ma2);\r
-    ma2*=ma1;\r
-\r
-    va1=ma1*va1;\r
-    va1=qa1*va1;\r
-    va1=scalar_cast<float>(ma2*va1);\r
-    va1=scalar_cast<float>(ma1*va2);\r
-    va1=scalar_cast<float>(ma2*va2);\r
-    va1=scalar_cast<float>(qa2*va1);\r
-    va1=scalar_cast<float>(qa1*va2);\r
-    va1=scalar_cast<float>(qa2*va2);\r
-\r
-    va2=convert_to<vec2>(ma1*va1);\r
-    va2=convert_to<vec2>(qa1*va1);\r
-    va2=ma2*va1;\r
-    va2=ma1*va2;\r
-    va2=ma2*va2;\r
-    va2=qa2*va1;\r
-    va2=qa1*va2;\r
-    va2=qa2*va2;\r
-\r
-    va1=va1*ma1;\r
-    va1=scalar_cast<float>(va1*ma2);\r
-    va1=scalar_cast<float>(va2*ma1);\r
-    va1=scalar_cast<float>(va2*ma2);\r
-\r
-    va2=convert_to<vec2>(va1*ma1);\r
-    va2=va1*ma2;\r
-    va2=va2*ma1;\r
-    va2=va2*ma2;\r
-\r
-    (void) (ma1==mb1);\r
-    (void) (ma1==ma2);\r
-    (void) (ma2==ma1);\r
-\r
-    (void) (ma1!=mb1);\r
-    (void) (ma1!=ma2);\r
-    (void) (ma2!=ma1);\r
-\r
-    (void) (va1==vb1);\r
-    (void) (va1==va2);\r
-    (void) (va2==va1);\r
-\r
-    (void) (va1!=vb1);\r
-    (void) (va1!=va2);\r
-    (void) (va2!=va1);\r
-\r
-    (void) (qa1==qb1);\r
-    (void) (qa1==qa2);\r
-    (void) (qa2==qa1);\r
-\r
-    (void) (qa1!=qb1);\r
-    (void) (qa1!=qa2);\r
-    (void) (qa2!=qa1);\r
-\r
-    return 0;\r
-    }\r
+//Copyright (c) 2008-2016 Emil Dotchevski and Reverge Studios, Inc.
+
+//Distributed under the Boost Software License, Version 1.0. (See accompanying
+//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#include <boost/qvm/operations.hpp>
+#include <boost/qvm/quat.hpp>
+#include <boost/qvm/vec.hpp>
+#include <boost/qvm/mat.hpp>
+
+namespace
+my_stuff
+    {
+    struct
+    mat
+        {
+        float a[3][3];
+        };
+
+    struct
+    vec
+        {
+        float a[3];
+        };
+
+    struct
+    quat
+        {
+        float a[4];
+        };
+    }
+
+namespace
+boost
+    {
+    namespace
+    qvm
+        {
+        template <>
+        struct
+        mat_traits<my_stuff::mat>
+            {
+            typedef float scalar_type;
+            static int const rows=3;
+            static int const cols=3;
+
+            template <int R,int C>
+            static
+            scalar_type &
+            write_element( my_stuff::mat & m )
+                {
+                BOOST_QVM_STATIC_ASSERT(R>=0);
+                BOOST_QVM_STATIC_ASSERT(R<rows);
+                BOOST_QVM_STATIC_ASSERT(C>=0);
+                BOOST_QVM_STATIC_ASSERT(C<cols);
+                return m.a[R][C];
+                }
+
+            template <int R,int C>
+            static
+            scalar_type
+            read_element( my_stuff::mat const & m )
+                {
+                BOOST_QVM_STATIC_ASSERT(R>=0);
+                BOOST_QVM_STATIC_ASSERT(R<rows);
+                BOOST_QVM_STATIC_ASSERT(C>=0);
+                BOOST_QVM_STATIC_ASSERT(C<cols);
+                return m.a[R][C];
+                }
+
+            static
+            inline
+            scalar_type &
+            write_element_idx( int r, int c, my_stuff::mat & m )
+                {
+                BOOST_QVM_ASSERT(r>=0);
+                BOOST_QVM_ASSERT(r<rows);
+                BOOST_QVM_ASSERT(c>=0);
+                BOOST_QVM_ASSERT(c<cols);
+                return m.a[r][c];
+                }
+
+            static
+            inline
+            scalar_type
+            read_element_idx( int r, int c, my_stuff::mat const & m )
+                {
+                BOOST_QVM_ASSERT(r>=0);
+                BOOST_QVM_ASSERT(r<rows);
+                BOOST_QVM_ASSERT(c>=0);
+                BOOST_QVM_ASSERT(c<cols);
+                return m.a[r][c];
+                }
+            };
+
+        template <>
+        struct
+        vec_traits<my_stuff::vec>
+            {
+            static int const dim=3;
+            typedef float scalar_type;
+
+            template <int I>
+            static
+            scalar_type &
+            write_element( my_stuff::vec & m )
+                {
+                BOOST_QVM_STATIC_ASSERT(I>=0);
+                BOOST_QVM_STATIC_ASSERT(I<dim);
+                return m.a[I];
+                }
+
+            template <int I>
+            static
+            scalar_type
+            read_element( my_stuff::vec const & m )
+                {
+                BOOST_QVM_STATIC_ASSERT(I>=0);
+                BOOST_QVM_STATIC_ASSERT(I<dim);
+                return m.a[I];
+                }
+
+            static
+            inline
+            scalar_type &
+            write_element_idx( int i, my_stuff::vec & m )
+                {
+                BOOST_QVM_ASSERT(i>=0);
+                BOOST_QVM_ASSERT(i<dim);
+                return m.a[i];
+                }
+
+            static
+            inline
+            scalar_type
+            read_element_idx( int i, my_stuff::vec const & m )
+                {
+                BOOST_QVM_ASSERT(i>=0);
+                BOOST_QVM_ASSERT(i<dim);
+                return m.a[i];
+                }
+            };
+
+        template <>
+        struct
+        quat_traits<my_stuff::quat>
+            {
+            typedef float scalar_type;
+
+            template <int I>
+            static
+            scalar_type &
+            write_element( my_stuff::quat & m )
+                {
+                BOOST_QVM_STATIC_ASSERT(I>=0);
+                BOOST_QVM_STATIC_ASSERT(I<4);
+                return m.a[I];
+                }
+
+            template <int I>
+            static
+            scalar_type
+            read_element( my_stuff::quat const & m )
+                {
+                BOOST_QVM_STATIC_ASSERT(I>=0);
+                BOOST_QVM_STATIC_ASSERT(I<4);
+                return m.a[I];
+                }
+            };
+        }
+    }
+
+namespace
+my_stuff
+    {
+    mat &
+    operator/=( mat & x, float y )
+        {
+        return boost::qvm::operator/=(x,y);
+        }
+
+    vec &
+    operator/=( vec & x, float y )
+        {
+        return boost::qvm::operator/=(x,y);
+        }
+
+    quat &
+    operator/=( quat & x, float y )
+        {
+        return boost::qvm::operator/=(x,y);
+        }
+
+    mat &
+    operator*=( mat & x, float y )
+        {
+        return boost::qvm::operator*=(x,y);
+        }
+
+    vec &
+    operator*=( vec & x, float y )
+        {
+        return boost::qvm::operator*=(x,y);
+        }
+
+    quat &
+    operator*=( quat & x, float y )
+        {
+        return boost::qvm::operator*=(x,y);
+        }
+
+    mat
+    operator/( mat const & x, float y )
+        {
+        return boost::qvm::operator/(x,y);
+        }
+
+    vec
+    operator/( vec const & x, float y )
+        {
+        return boost::qvm::operator/(x,y);
+        }
+
+    quat
+    operator/( quat const & x, float y )
+        {
+        return boost::qvm::operator/(x,y);
+        }
+
+    mat
+    operator*( mat const & x, float y )
+        {
+        return boost::qvm::operator*(x,y);
+        }
+
+    vec
+    operator*( vec const & x, float y )
+        {
+        return boost::qvm::operator*(x,y);
+        }
+
+    quat
+    operator*( quat const & x, float y )
+        {
+        return boost::qvm::operator*(x,y);
+        }
+
+    mat &
+    operator*=( mat & x, mat const & y )
+        {
+        return boost::qvm::operator*=(x,y);
+        }
+
+    mat
+    operator*=( mat const & x, mat const & y )
+        {
+        return boost::qvm::operator*(x,y);
+        }
+
+    vec
+    operator*( mat const & x, vec const & y )
+        {
+        return boost::qvm::operator*(x,y);
+        }
+
+    vec
+    operator*( quat const & x, vec const & y )
+        {
+        return boost::qvm::operator*(x,y);
+        }
+
+    vec
+    operator*( vec const & x, mat const & y )
+        {
+        return boost::qvm::operator*(x,y);
+        }
+
+    bool
+    operator==( mat const & x, mat const & y )
+        {
+        return boost::qvm::operator==(x,y);
+        }
+
+    bool
+    operator!=( mat const & x, mat const & y )
+        {
+        return boost::qvm::operator!=(x,y);
+        }
+
+    bool
+    operator==( vec const & x, vec const & y )
+        {
+        return boost::qvm::operator==(x,y);
+        }
+
+    bool
+    operator!=( vec const & x, vec const & y )
+        {
+        return boost::qvm::operator!=(x,y);
+        }
+
+    bool
+    operator==( quat const & x, quat const & y )
+        {
+        return boost::qvm::operator==(x,y);
+        }
+
+    bool
+    operator!=( quat const & x, quat const & y )
+        {
+        return boost::qvm::operator!=(x,y);
+        }
+    }
+
+int
+main()
+    {
+    using namespace boost::qvm::sfinae;
+    using namespace my_stuff;
+    typedef boost::qvm::mat<double,3,3> mat2;
+    typedef boost::qvm::vec<double,3> vec2;
+    typedef boost::qvm::quat<double> quat2;
+
+    mat ma1, mb1; set_zero(ma1); set_zero(mb1);
+    vec va1, vb1; set_zero(va1); set_zero(vb1);
+    quat qa1, qb1; set_zero(qa1); set_zero(qb1);
+    mat2 ma2, mb2; set_zero(ma2); set_zero(mb2);
+    vec2 va2, vb2; set_zero(va2); set_zero(vb2);
+    quat2 qa2, qb2; set_zero(qa2); set_zero(qb2);
+
+    set_zero(ma1);
+    set_zero(mb1);
+    set_zero(va1);
+    set_zero(vb1);
+    set_zero(qa1);
+    set_zero(qb1);
+    set_zero(ma2);
+    set_zero(mb2);
+    set_zero(va2);
+    set_zero(vb2);
+    set_zero(qa2);
+    set_zero(qb2);
+
+    ma1/=2;
+    va1/=2;
+    qa1/=2;
+    ma2/=2;
+    va2/=2;
+    qa2/=2;
+
+    ma1*=2;
+    va1*=2;
+    qa1*=2;
+    ma2*=2;
+    va2*=2;
+    qa2*=2;
+
+    mb1=ma1/2;
+    vb1=va1/2;
+    qb1=qb1/2;
+    mb2=convert_to<mat2>(ma1/2);
+    vb2=convert_to<vec2>(va1/2);
+    qb2=convert_to<quat2>(qa1/2);
+    mb1=scalar_cast<float>(ma2/2);
+    vb1=scalar_cast<float>(va2/2);
+    qb1=scalar_cast<float>(qa2/2);
+
+    mb1=ma1*2;
+    vb1=va1*2;
+    qb1=qa1*2;
+    mb2=convert_to<mat2>(ma1*2);
+    vb2=convert_to<vec2>(va1*2);
+    qb2=convert_to<quat2>(qa1*2);
+    mb1=scalar_cast<float>(ma2*2);
+    vb1=scalar_cast<float>(va2*2);
+    qb1=scalar_cast<float>(qa2*2);
+
+    ma1*=mb1;
+    ma1*=scalar_cast<float>(ma2);
+    ma2*=ma1;
+
+    va1=ma1*va1;
+    va1=qa1*va1;
+    va1=scalar_cast<float>(ma2*va1);
+    va1=scalar_cast<float>(ma1*va2);
+    va1=scalar_cast<float>(ma2*va2);
+    va1=scalar_cast<float>(qa2*va1);
+    va1=scalar_cast<float>(qa1*va2);
+    va1=scalar_cast<float>(qa2*va2);
+
+    va2=convert_to<vec2>(ma1*va1);
+    va2=convert_to<vec2>(qa1*va1);
+    va2=ma2*va1;
+    va2=ma1*va2;
+    va2=ma2*va2;
+    va2=qa2*va1;
+    va2=qa1*va2;
+    va2=qa2*va2;
+
+    va1=va1*ma1;
+    va1=scalar_cast<float>(va1*ma2);
+    va1=scalar_cast<float>(va2*ma1);
+    va1=scalar_cast<float>(va2*ma2);
+
+    va2=convert_to<vec2>(va1*ma1);
+    va2=va1*ma2;
+    va2=va2*ma1;
+    va2=va2*ma2;
+
+    (void) (ma1==mb1);
+    (void) (ma1==ma2);
+    (void) (ma2==ma1);
+
+    (void) (ma1!=mb1);
+    (void) (ma1!=ma2);
+    (void) (ma2!=ma1);
+
+    (void) (va1==vb1);
+    (void) (va1==va2);
+    (void) (va2==va1);
+
+    (void) (va1!=vb1);
+    (void) (va1!=va2);
+    (void) (va2!=va1);
+
+    (void) (qa1==qb1);
+    (void) (qa1==qa2);
+    (void) (qa2==qa1);
+
+    (void) (qa1!=qb1);
+    (void) (qa1!=qa2);
+    (void) (qa2!=qa1);
+
+    return 0;
+    }