1// Copyright 2008-2022 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#ifdef BOOST_QVM_TEST_SINGLE_HEADER
7# include BOOST_QVM_TEST_SINGLE_HEADER
8# ifdef BOOST_QVM_TEST_SINGLE_HEADER_SWIZZLE
9# include BOOST_QVM_TEST_SINGLE_HEADER_SWIZZLE
10# endif
11#else
12# include <boost/qvm/vec_operations.hpp>
13# include <boost/qvm/vec_access.hpp>
14# include <boost/qvm/vec.hpp>
15# include <boost/qvm/swizzle.hpp>
16#endif
17
18#include "test_qvm_vector.hpp"
19
20int
21main()
22 {
23 using namespace boost::qvm;
24 test_qvm::vector<V1,4> v1;
25 v1.a[0]=42.0f;
26 v1.a[1]=43.0f;
27 v1.a[2]=44.0f;
28 v1.a[3]=45.0f;
29 XXX(a&: v1) + XXX(a&: v1);
30 -XXX(a&: v1);
31 XXX(a: 42.0f) + XXX(a: 42.0f);
32 -XXX(a: 42.0f);
33 {
34 test_qvm::vector<V2,3> v0=X00(a: 42.0f);
35 BOOST_TEST(v0.a[0]==42);
36 BOOST_TEST(v0.a[1]==0);
37 BOOST_TEST(v0.a[2]==0);
38 test_qvm::vector<V2,3> v2=_10X(a: 42.0f);
39 BOOST_TEST(v2.a[0]==1);
40 BOOST_TEST(v2.a[1]==0);
41 BOOST_TEST(v2.a[2]==42);
42 float s=42.0f;
43 BOOST_TEST(X(X01(s))==s);
44 }
45 {
46 test_qvm::vector<V2,3> r;
47 r.a[0]=v1.a[0];
48 r.a[1]=v1.a[0];
49 r.a[2]=v1.a[0];
50 test_qvm::vector<V2,3> v2=XXX(a&: v1);
51 BOOST_QVM_TEST_EQ(v2,r);
52 }
53 {
54 test_qvm::vector<V2,3> r;
55 r.a[0]=v1.a[0];
56 r.a[1]=v1.a[0];
57 r.a[2]=v1.a[1];
58 test_qvm::vector<V2,3> v2=XXY(a&: v1);
59 BOOST_QVM_TEST_EQ(v2,r);
60 }
61 {
62 test_qvm::vector<V2,3> r;
63 r.a[0]=v1.a[0];
64 r.a[1]=v1.a[0];
65 r.a[2]=v1.a[2];
66 test_qvm::vector<V2,3> v2=XXZ(a&: v1);
67 BOOST_QVM_TEST_EQ(v2,r);
68 }
69 {
70 test_qvm::vector<V2,3> r;
71 r.a[0]=v1.a[0];
72 r.a[1]=v1.a[0];
73 r.a[2]=v1.a[3];
74 test_qvm::vector<V2,3> v2=XXW(a&: v1);
75 BOOST_QVM_TEST_EQ(v2,r);
76 }
77 {
78 test_qvm::vector<V2,3> r;
79 r.a[0]=v1.a[0];
80 r.a[1]=v1.a[0];
81 r.a[2]=0;
82 test_qvm::vector<V2,3> v2=XX0(a&: v1);
83 BOOST_QVM_TEST_EQ(v2,r);
84 }
85 {
86 test_qvm::vector<V2,3> r;
87 r.a[0]=v1.a[0];
88 r.a[1]=v1.a[0];
89 r.a[2]=1;
90 test_qvm::vector<V2,3> v2=XX1(a&: v1);
91 BOOST_QVM_TEST_EQ(v2,r);
92 }
93 {
94 test_qvm::vector<V2,3> v2=XYZ(a&: v1);
95 XYZ(a&: v1) *= 2;
96 v2 *= 2;
97 test_qvm::vector<V2,3> v3=XYZ(a&: v1);
98 BOOST_QVM_TEST_EQ(v2,v3);
99 }
100 {
101 test_qvm::vector<V2,3> v2=XYZ(a&: v1);
102 test_qvm::vector<V3,3> v3;
103 XYZ(a&: v3)=XYZ(a&: v2);
104 BOOST_QVM_TEST_EQ(v2,v3);
105 }
106 {
107 test_qvm::vector<V1,3> v=_000();
108 BOOST_TEST(v.a[0]==0);
109 BOOST_TEST(v.a[1]==0);
110 BOOST_TEST(v.a[2]==0);
111 }
112 {
113 test_qvm::vector<V1,3> v=_001();
114 BOOST_TEST(v.a[0]==0);
115 BOOST_TEST(v.a[1]==0);
116 BOOST_TEST(v.a[2]==1);
117 }
118 {
119 test_qvm::vector<V1,3> v=_010();
120 BOOST_TEST(v.a[0]==0);
121 BOOST_TEST(v.a[1]==1);
122 BOOST_TEST(v.a[2]==0);
123 }
124 {
125 test_qvm::vector<V1,3> v=_011();
126 BOOST_TEST(v.a[0]==0);
127 BOOST_TEST(v.a[1]==1);
128 BOOST_TEST(v.a[2]==1);
129 }
130 {
131 test_qvm::vector<V1,3> v=_100();
132 BOOST_TEST(v.a[0]==1);
133 BOOST_TEST(v.a[1]==0);
134 BOOST_TEST(v.a[2]==0);
135 }
136 {
137 test_qvm::vector<V1,3> v=_101();
138 BOOST_TEST(v.a[0]==1);
139 BOOST_TEST(v.a[1]==0);
140 BOOST_TEST(v.a[2]==1);
141 }
142 {
143 test_qvm::vector<V1,3> v=_110();
144 BOOST_TEST(v.a[0]==1);
145 BOOST_TEST(v.a[1]==1);
146 BOOST_TEST(v.a[2]==0);
147 }
148 {
149 test_qvm::vector<V1,3> v=_111();
150 BOOST_TEST(v.a[0]==1);
151 BOOST_TEST(v.a[1]==1);
152 BOOST_TEST(v.a[2]==1);
153 }
154 return boost::report_errors();
155 }
156

source code of boost/libs/qvm/test/swizzle3_test.cpp