]>
Commit | Line | Data |
---|---|---|
3a9019d9 FG |
1 | //Copyright (c) 2008-2016 Emil Dotchevski and Reverge Studios, Inc.\r |
2 | \r | |
3 | //Distributed under the Boost Software License, Version 1.0. (See accompanying\r | |
4 | //file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\r | |
5 | \r | |
6 | #include <boost/qvm/quat_traits_array.hpp>\r | |
7 | #include <boost/qvm/quat_operations.hpp>\r | |
8 | #include <boost/detail/lightweight_test.hpp>\r | |
9 | \r | |
10 | template <class T,class U>\r | |
11 | struct same_type;\r | |
12 | \r | |
13 | template <class T>\r | |
14 | struct\r | |
15 | same_type<T,T>\r | |
16 | {\r | |
17 | };\r | |
18 | \r | |
19 | template <class T,class P>\r | |
20 | void\r | |
21 | test_ref_cast( T & q, P * ptr )\r | |
22 | {\r | |
23 | using namespace boost::qvm;\r | |
24 | BOOST_QVM_STATIC_ASSERT(is_quat<T>::value);\r | |
25 | BOOST_TEST(quat_traits<T>::template read_element<0>(q)==ptr[0]);\r | |
26 | BOOST_TEST(quat_traits<T>::template read_element<1>(q)==ptr[1]);\r | |
27 | BOOST_TEST(quat_traits<T>::template read_element<2>(q)==ptr[2]);\r | |
28 | BOOST_TEST(quat_traits<T>::template read_element<3>(q)==ptr[3]);\r | |
29 | BOOST_TEST(&quat_traits<T>::template write_element<0>(q)==&ptr[0]);\r | |
30 | BOOST_TEST(&quat_traits<T>::template write_element<1>(q)==&ptr[1]);\r | |
31 | BOOST_TEST(&quat_traits<T>::template write_element<2>(q)==&ptr[2]);\r | |
32 | BOOST_TEST(&quat_traits<T>::template write_element<3>(q)==&ptr[3]);\r | |
33 | BOOST_TEST(&q[0]==&ptr[0]);\r | |
34 | BOOST_TEST(&q[1]==&ptr[1]);\r | |
35 | BOOST_TEST(&q[2]==&ptr[2]);\r | |
36 | BOOST_TEST(&q[3]==&ptr[3]);\r | |
37 | }\r | |
38 | \r | |
39 | int\r | |
40 | main()\r | |
41 | {\r | |
42 | using namespace boost::qvm;\r | |
43 | {\r | |
44 | BOOST_QVM_STATIC_ASSERT(is_quat<int[4]>::value);\r | |
45 | BOOST_QVM_STATIC_ASSERT(!is_quat<int[4][4]>::value);\r | |
46 | BOOST_QVM_STATIC_ASSERT(!is_quat<int[4][4][4]>::value);\r | |
47 | same_type<quat_traits<int[4]>::scalar_type,int>();\r | |
48 | same_type< quat<int>, deduce_quat<int[4]>::type >();\r | |
49 | same_type< quat<int>, deduce_quat<int const[4]>::type >();\r | |
50 | int arr[4] = {0,1,2,3};\r | |
51 | BOOST_TEST((quat_traits<int[4]>::read_element<0>(arr)==0));\r | |
52 | BOOST_TEST((quat_traits<int[4]>::read_element<1>(arr)==1));\r | |
53 | BOOST_TEST((quat_traits<int[4]>::read_element<2>(arr)==2));\r | |
54 | BOOST_TEST((quat_traits<int[4]>::read_element<3>(arr)==3));\r | |
55 | BOOST_TEST((quat_traits<int const[4]>::read_element<0>(arr)==0));\r | |
56 | BOOST_TEST((quat_traits<int const[4]>::read_element<1>(arr)==1));\r | |
57 | BOOST_TEST((quat_traits<int const[4]>::read_element<2>(arr)==2));\r | |
58 | BOOST_TEST((quat_traits<int const[4]>::read_element<3>(arr)==3));\r | |
59 | BOOST_TEST((quat_traits<int[4]>::read_element_idx(0,arr)==0));\r | |
60 | BOOST_TEST((quat_traits<int[4]>::read_element_idx(1,arr)==1));\r | |
61 | BOOST_TEST((quat_traits<int[4]>::read_element_idx(2,arr)==2));\r | |
62 | BOOST_TEST((quat_traits<int[4]>::read_element_idx(3,arr)==3));\r | |
63 | BOOST_TEST((quat_traits<int const[4]>::read_element_idx(0,arr)==0));\r | |
64 | BOOST_TEST((quat_traits<int const[4]>::read_element_idx(1,arr)==1));\r | |
65 | BOOST_TEST((quat_traits<int const[4]>::read_element_idx(2,arr)==2));\r | |
66 | BOOST_TEST((quat_traits<int const[4]>::read_element_idx(3,arr)==3));\r | |
67 | BOOST_TEST((&quat_traits<int[4]>::write_element<0>(arr)==&arr[0]));\r | |
68 | BOOST_TEST((&quat_traits<int[4]>::write_element<1>(arr)==&arr[1]));\r | |
69 | BOOST_TEST((&quat_traits<int[4]>::write_element<2>(arr)==&arr[2]));\r | |
70 | BOOST_TEST((&quat_traits<int[4]>::write_element<3>(arr)==&arr[3]));\r | |
71 | BOOST_TEST((&quat_traits<int[4]>::write_element_idx(0,arr)==&arr[0]));\r | |
72 | BOOST_TEST((&quat_traits<int[4]>::write_element_idx(1,arr)==&arr[1]));\r | |
73 | BOOST_TEST((&quat_traits<int[4]>::write_element_idx(2,arr)==&arr[2]));\r | |
74 | BOOST_TEST((&quat_traits<int[4]>::write_element_idx(3,arr)==&arr[3]));\r | |
75 | }\r | |
76 | {\r | |
77 | int arr[42] = {0};\r | |
78 | int * ptr=arr+5;\r | |
79 | ptr[0]=42;\r | |
80 | ptr[1]=43;\r | |
81 | ptr[2]=44;\r | |
82 | ptr[3]=45;\r | |
83 | test_ref_cast(ptr_qref(ptr),ptr);\r | |
84 | int q[4] = {1,1,1,1};\r | |
85 | ptr_qref(ptr) += qref(q);\r | |
86 | BOOST_TEST(ptr[0]==43);\r | |
87 | BOOST_TEST(ptr[1]==44);\r | |
88 | BOOST_TEST(ptr[2]==45);\r | |
89 | BOOST_TEST(ptr[3]==46);\r | |
90 | }\r | |
91 | return boost::report_errors();\r | |
92 | }\r |