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