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/mat.hpp>
16# include <boost/qvm/map_vec_mat.hpp>
17# include <boost/qvm/swizzle.hpp>
18#endif
19
20#include "test_qvm_vector.hpp"
21#include "test_qvm_matrix.hpp"
22
23int
24main()
25 {
26 using namespace boost::qvm;
27 test_qvm::vector<V1,4> v1;
28 v1.a[0]=42.0f;
29 v1.a[1]=43.0f;
30 v1.a[2]=44.0f;
31 v1.a[3]=45.0f;
32 XX(a&: v1) + XX(a&: v1);
33 -XX(a&: v1);
34 XX(a: 42.0f) + XX(a: 42.0f);
35 -XX(a: 42.0f);
36 {
37 test_qvm::vector<V2,2> v0=X0(a: 42.0f);
38 BOOST_TEST(v0.a[0]==42);
39 BOOST_TEST(v0.a[1]==0);
40 test_qvm::vector<V2,2> v2=_1X(a: 42.0f);
41 BOOST_TEST(v2.a[0]==1);
42 BOOST_TEST(v2.a[1]==42);
43 float s=42.0f;
44 BOOST_TEST(X(X1(s))==s);
45 }
46 {
47 test_qvm::vector<V2,2> r;
48 r.a[0]=v1.a[0];
49 r.a[1]=v1.a[0];
50 test_qvm::vector<V2,2> v2=XX(a&: v1);
51 BOOST_QVM_TEST_EQ(v2,r);
52 }
53 {
54 test_qvm::vector<V2,2> r;
55 r.a[0]=v1.a[0];
56 r.a[1]=v1.a[1];
57 test_qvm::vector<V2,2> v2=XY(a&: v1);
58 BOOST_QVM_TEST_EQ(v2,r);
59 }
60 {
61 test_qvm::vector<V2,2> r;
62 r.a[0]=v1.a[0];
63 r.a[1]=v1.a[2];
64 test_qvm::vector<V2,2> v2=XZ(a&: v1);
65 BOOST_QVM_TEST_EQ(v2,r);
66 }
67 {
68 test_qvm::vector<V2,2> r;
69 r.a[0]=v1.a[0];
70 r.a[1]=v1.a[3];
71 test_qvm::vector<V2,2> v2=XW(a&: v1);
72 BOOST_QVM_TEST_EQ(v2,r);
73 }
74 {
75 test_qvm::vector<V2,2> r;
76 r.a[0]=v1.a[0];
77 r.a[1]=0;
78 test_qvm::vector<V2,2> v2=X0(a&: v1);
79 BOOST_QVM_TEST_EQ(v2,r);
80 }
81 {
82 test_qvm::vector<V2,2> r;
83 r.a[0]=v1.a[0];
84 r.a[1]=1;
85 test_qvm::vector<V2,2> v2=X1(a&: v1);
86 BOOST_QVM_TEST_EQ(v2,r);
87 }
88 {
89 test_qvm::vector<V2,2> v2=XY(a&: v1);
90 test_qvm::vector<V3,2> v3;
91 XY(a&: v3)=XY(a&: v2);
92 BOOST_QVM_TEST_EQ(v2,v3);
93 }
94 {
95 test_qvm::vector<V1,2> v=_00();
96 BOOST_TEST(v.a[0]==0);
97 BOOST_TEST(v.a[1]==0);
98 }
99 {
100 test_qvm::vector<V1,2> v=_01();
101 BOOST_TEST(v.a[0]==0);
102 BOOST_TEST(v.a[1]==1);
103 }
104 {
105 test_qvm::vector<V1,2> v=_10();
106 BOOST_TEST(v.a[0]==1);
107 BOOST_TEST(v.a[1]==0);
108 }
109 {
110 test_qvm::vector<V1,2> v=_11();
111 BOOST_TEST(v.a[0]==1);
112 BOOST_TEST(v.a[1]==1);
113 }
114 {
115 test_qvm::matrix<V1,2,2> v = diag_mat(a: _0X(a: 1));
116 BOOST_TEST(v.a[0][0] == 0);
117 BOOST_TEST(v.a[1][1] == 1);
118 }
119 {
120 test_qvm::matrix<V1,2,2> v = diag_mat(a: X0(a: 1));
121 BOOST_TEST(v.a[0][0] == 1);
122 BOOST_TEST(v.a[1][1] == 0);
123 }
124 return boost::report_errors();
125 }
126

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