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