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