quat_traits_array_test.cpp 3.9 KB

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