1 //Copyright (c) 2008-2016 Emil Dotchevski and Reverge Studios, Inc.
2
3 //Distributed under the Boost Software License, Version 1.0. (See accompanying
4 //file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
5
6 #include <boost/qvm/quat_operations.hpp>
7 #include <boost/qvm/mat_operations.hpp>
8 #include "test_qvm_matrix.hpp"
9 #include "test_qvm_quaternion.hpp"
10 #include "test_qvm_vector.hpp"
11 #include "gold.hpp"
12
13 namespace
14 {
15 void
test_x()16 test_x()
17 {
18 using namespace boost::qvm;
19 test_qvm::vector<V1,3> axis; axis.a[0]=1;
20 for( float r=0; r<6.28f; r+=0.5f )
21 {
22 test_qvm::quaternion<Q1> q1=rot_quat(axis,r);
23 test_qvm::matrix<M1,3,3> x1=convert_to< test_qvm::matrix<M1,3,3> >(q1);
24 test_qvm::rotation_x(x1.b,r);
25 BOOST_QVM_TEST_CLOSE(x1.a,x1.b,0.000001f);
26 test_qvm::quaternion<Q2> q2(42,1);
27 set_rot(q2,axis,r);
28 test_qvm::matrix<M2,3,3> x2=convert_to< test_qvm::matrix<M2,3,3> >(q2);
29 test_qvm::rotation_x(x2.b,r);
30 BOOST_QVM_TEST_CLOSE(x2.a,x2.b,0.000001f);
31 test_qvm::quaternion<Q1> q3(42,1);
32 test_qvm::quaternion<Q1> q4(42,1);
33 rotate(q3,axis,r);
34 q3 = q3*q1;
35 BOOST_QVM_TEST_EQ(q3.a,q3.a);
36 }
37 }
38
39 void
test_y()40 test_y()
41 {
42 using namespace boost::qvm;
43 test_qvm::vector<V1,3> axis; axis.a[1]=1;
44 for( float r=0; r<6.28f; r+=0.5f )
45 {
46 test_qvm::quaternion<Q1> q1=rot_quat(axis,r);
47 test_qvm::matrix<M1,3,3> x1=convert_to< test_qvm::matrix<M1,3,3> >(q1);
48 test_qvm::rotation_y(x1.b,r);
49 BOOST_QVM_TEST_CLOSE(x1.a,x1.b,0.000001f);
50 test_qvm::quaternion<Q2> q2(42,1);
51 set_rot(q2,axis,r);
52 test_qvm::matrix<M2,3,3> x2=convert_to< test_qvm::matrix<M2,3,3> >(q2);
53 test_qvm::rotation_y(x2.b,r);
54 BOOST_QVM_TEST_CLOSE(x2.a,x2.b,0.000001f);
55 test_qvm::quaternion<Q1> q3(42,1);
56 test_qvm::quaternion<Q1> q4(42,1);
57 rotate(q3,axis,r);
58 q3 = q3*q1;
59 BOOST_QVM_TEST_EQ(q3.a,q3.a);
60 }
61 }
62
63 void
test_z()64 test_z()
65 {
66 using namespace boost::qvm;
67 test_qvm::vector<V1,3> axis; axis.a[2]=1;
68 for( float r=0; r<6.28f; r+=0.5f )
69 {
70 test_qvm::quaternion<Q1> q1=rot_quat(axis,r);
71 test_qvm::matrix<M1,3,3> x1=convert_to< test_qvm::matrix<M1,3,3> >(q1);
72 test_qvm::rotation_z(x1.b,r);
73 BOOST_QVM_TEST_CLOSE(x1.a,x1.b,0.000001f);
74 test_qvm::quaternion<Q2> q2(42,1);
75 set_rot(q2,axis,r);
76 test_qvm::matrix<M2,3,3> x2=convert_to< test_qvm::matrix<M2,3,3> >(q2);
77 test_qvm::rotation_z(x2.b,r);
78 BOOST_QVM_TEST_CLOSE(x2.a,x2.b,0.000001f);
79 test_qvm::quaternion<Q1> q3(42,1);
80 test_qvm::quaternion<Q1> q4(42,1);
81 rotate(q3,axis,r);
82 q3 = q3*q1;
83 BOOST_QVM_TEST_EQ(q3.a,q3.a);
84 }
85 }
86 }
87
88 int
main()89 main()
90 {
91 test_x();
92 test_y();
93 test_z();
94 return boost::report_errors();
95 }
96