swizzle4_test.cpp 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219
  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/vec_operations.hpp>
  5. #include <boost/qvm/vec_access.hpp>
  6. #include <boost/qvm/vec.hpp>
  7. #include <boost/qvm/swizzle.hpp>
  8. #include "test_qvm_vector.hpp"
  9. int
  10. main()
  11. {
  12. using namespace boost::qvm;
  13. test_qvm::vector<V1,4> v1;
  14. v1.a[0]=42.0f;
  15. v1.a[1]=43.0f;
  16. v1.a[2]=44.0f;
  17. v1.a[3]=45.0f;
  18. XXXX(v1) + XXXX(v1);
  19. -XXXX(v1);
  20. XXXX(42.0f) + XXXX(42.0f);
  21. -XXXX(42.0f);
  22. {
  23. test_qvm::vector<V2,4> v0=X001(42.0f);
  24. BOOST_TEST(v0.a[0]==42);
  25. BOOST_TEST(v0.a[1]==0);
  26. BOOST_TEST(v0.a[2]==0);
  27. BOOST_TEST(v0.a[3]==1);
  28. test_qvm::vector<V2,4> v2=_100X(42.0f);
  29. BOOST_TEST(v2.a[0]==1);
  30. BOOST_TEST(v2.a[1]==0);
  31. BOOST_TEST(v2.a[2]==0);
  32. BOOST_TEST(v2.a[3]==42);
  33. float s=42.0f;
  34. BOOST_TEST(&X(X101(s))==&s);
  35. }
  36. {
  37. test_qvm::vector<V2,4> r;
  38. r.a[0]=v1.a[0];
  39. r.a[1]=v1.a[0];
  40. r.a[2]=v1.a[0];
  41. r.a[3]=v1.a[0];
  42. test_qvm::vector<V2,4> v2=XXXX(v1);
  43. BOOST_QVM_TEST_EQ(v2,r);
  44. }
  45. {
  46. test_qvm::vector<V2,4> r;
  47. r.a[0]=v1.a[0];
  48. r.a[1]=v1.a[0];
  49. r.a[2]=v1.a[0];
  50. r.a[3]=v1.a[1];
  51. test_qvm::vector<V2,4> v2=XXXY(v1);
  52. BOOST_QVM_TEST_EQ(v2,r);
  53. }
  54. {
  55. test_qvm::vector<V2,4> r;
  56. r.a[0]=v1.a[0];
  57. r.a[1]=v1.a[0];
  58. r.a[2]=v1.a[0];
  59. r.a[3]=v1.a[2];
  60. test_qvm::vector<V2,4> v2=XXXZ(v1);
  61. BOOST_QVM_TEST_EQ(v2,r);
  62. }
  63. {
  64. test_qvm::vector<V2,4> r;
  65. r.a[0]=v1.a[0];
  66. r.a[1]=v1.a[0];
  67. r.a[2]=v1.a[0];
  68. r.a[3]=v1.a[3];
  69. test_qvm::vector<V2,4> v2=XXXW(v1);
  70. BOOST_QVM_TEST_EQ(v2,r);
  71. }
  72. {
  73. test_qvm::vector<V2,4> r;
  74. r.a[0]=v1.a[0];
  75. r.a[1]=v1.a[0];
  76. r.a[2]=v1.a[0];
  77. r.a[3]=0;
  78. test_qvm::vector<V2,4> v2=XXX0(v1);
  79. BOOST_QVM_TEST_EQ(v2,r);
  80. }
  81. {
  82. test_qvm::vector<V2,4> r;
  83. r.a[0]=v1.a[0];
  84. r.a[1]=v1.a[0];
  85. r.a[2]=v1.a[0];
  86. r.a[3]=1;
  87. test_qvm::vector<V2,4> v2=XXX1(v1);
  88. BOOST_QVM_TEST_EQ(v2,r);
  89. }
  90. {
  91. test_qvm::vector<V2,4> v2=XYZW(v1);
  92. XYZW(v1) *= 2;
  93. v2 *= 2;
  94. test_qvm::vector<V2,4> v3=XYZW(v1);
  95. BOOST_QVM_TEST_EQ(v2,v3);
  96. }
  97. {
  98. test_qvm::vector<V2,4> v2=XYZW(v1);
  99. test_qvm::vector<V3,4> v3;
  100. XYZW(v3)=XYZW(v2);
  101. BOOST_QVM_TEST_EQ(v2,v3);
  102. }
  103. {
  104. test_qvm::vector<V1,4> v=_0000();
  105. BOOST_TEST(v.a[0]==0);
  106. BOOST_TEST(v.a[1]==0);
  107. BOOST_TEST(v.a[2]==0);
  108. BOOST_TEST(v.a[3]==0);
  109. }
  110. {
  111. test_qvm::vector<V1,4> v=_0001();
  112. BOOST_TEST(v.a[0]==0);
  113. BOOST_TEST(v.a[1]==0);
  114. BOOST_TEST(v.a[2]==0);
  115. BOOST_TEST(v.a[3]==1);
  116. }
  117. {
  118. test_qvm::vector<V1,4> v=_0010();
  119. BOOST_TEST(v.a[0]==0);
  120. BOOST_TEST(v.a[1]==0);
  121. BOOST_TEST(v.a[2]==1);
  122. BOOST_TEST(v.a[3]==0);
  123. }
  124. {
  125. test_qvm::vector<V1,4> v=_0011();
  126. BOOST_TEST(v.a[0]==0);
  127. BOOST_TEST(v.a[1]==0);
  128. BOOST_TEST(v.a[2]==1);
  129. BOOST_TEST(v.a[3]==1);
  130. }
  131. {
  132. test_qvm::vector<V1,4> v=_0100();
  133. BOOST_TEST(v.a[0]==0);
  134. BOOST_TEST(v.a[1]==1);
  135. BOOST_TEST(v.a[2]==0);
  136. BOOST_TEST(v.a[3]==0);
  137. }
  138. {
  139. test_qvm::vector<V1,4> v=_0101();
  140. BOOST_TEST(v.a[0]==0);
  141. BOOST_TEST(v.a[1]==1);
  142. BOOST_TEST(v.a[2]==0);
  143. BOOST_TEST(v.a[3]==1);
  144. }
  145. {
  146. test_qvm::vector<V1,4> v=_0110();
  147. BOOST_TEST(v.a[0]==0);
  148. BOOST_TEST(v.a[1]==1);
  149. BOOST_TEST(v.a[2]==1);
  150. BOOST_TEST(v.a[3]==0);
  151. }
  152. {
  153. test_qvm::vector<V1,4> v=_0111();
  154. BOOST_TEST(v.a[0]==0);
  155. BOOST_TEST(v.a[1]==1);
  156. BOOST_TEST(v.a[2]==1);
  157. BOOST_TEST(v.a[3]==1);
  158. }
  159. {
  160. test_qvm::vector<V1,4> v=_1000();
  161. BOOST_TEST(v.a[0]==1);
  162. BOOST_TEST(v.a[1]==0);
  163. BOOST_TEST(v.a[2]==0);
  164. BOOST_TEST(v.a[3]==0);
  165. }
  166. {
  167. test_qvm::vector<V1,4> v=_1001();
  168. BOOST_TEST(v.a[0]==1);
  169. BOOST_TEST(v.a[1]==0);
  170. BOOST_TEST(v.a[2]==0);
  171. BOOST_TEST(v.a[3]==1);
  172. }
  173. {
  174. test_qvm::vector<V1,4> v=_1010();
  175. BOOST_TEST(v.a[0]==1);
  176. BOOST_TEST(v.a[1]==0);
  177. BOOST_TEST(v.a[2]==1);
  178. BOOST_TEST(v.a[3]==0);
  179. }
  180. {
  181. test_qvm::vector<V1,4> v=_1011();
  182. BOOST_TEST(v.a[0]==1);
  183. BOOST_TEST(v.a[1]==0);
  184. BOOST_TEST(v.a[2]==1);
  185. BOOST_TEST(v.a[3]==1);
  186. }
  187. {
  188. test_qvm::vector<V1,4> v=_1100();
  189. BOOST_TEST(v.a[0]==1);
  190. BOOST_TEST(v.a[1]==1);
  191. BOOST_TEST(v.a[2]==0);
  192. BOOST_TEST(v.a[3]==0);
  193. }
  194. {
  195. test_qvm::vector<V1,4> v=_1101();
  196. BOOST_TEST(v.a[0]==1);
  197. BOOST_TEST(v.a[1]==1);
  198. BOOST_TEST(v.a[2]==0);
  199. BOOST_TEST(v.a[3]==1);
  200. }
  201. {
  202. test_qvm::vector<V1,4> v=_1110();
  203. BOOST_TEST(v.a[0]==1);
  204. BOOST_TEST(v.a[1]==1);
  205. BOOST_TEST(v.a[2]==1);
  206. BOOST_TEST(v.a[3]==0);
  207. }
  208. {
  209. test_qvm::vector<V1,4> v=_1111();
  210. BOOST_TEST(v.a[0]==1);
  211. BOOST_TEST(v.a[1]==1);
  212. BOOST_TEST(v.a[2]==1);
  213. BOOST_TEST(v.a[3]==1);
  214. }
  215. return boost::report_errors();
  216. }