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#else
9# include <boost/qvm/vec_access.hpp>
10#endif
11
12#include "test_qvm_vector.hpp"
13
14using namespace boost::qvm;
15
16template <class V>
17void
18check_write_ref()
19 {
20 V v;
21 BOOST_TEST((&A<0>(v)==&v.a[0]));
22 BOOST_TEST((&A<1>(v)==&v.a[1]));
23 BOOST_TEST((&A<2>(v)==&v.a[2]));
24 BOOST_TEST((&A<3>(v)==&v.a[3]));
25 BOOST_TEST((&A<4>(v)==&v.a[4]));
26 BOOST_TEST((&A<5>(v)==&v.a[5]));
27 BOOST_TEST((&A<6>(v)==&v.a[6]));
28 BOOST_TEST((&A<7>(v)==&v.a[7]));
29 BOOST_TEST((&A<8>(v)==&v.a[8]));
30 BOOST_TEST((&A<9>(v)==&v.a[9]));
31 BOOST_TEST(&A0(v)==&v.a[0]);
32 BOOST_TEST(&A1(v)==&v.a[1]);
33 BOOST_TEST(&A2(v)==&v.a[2]);
34 BOOST_TEST(&A3(v)==&v.a[3]);
35 BOOST_TEST(&A4(v)==&v.a[4]);
36 BOOST_TEST(&A5(v)==&v.a[5]);
37 BOOST_TEST(&A6(v)==&v.a[6]);
38 BOOST_TEST(&A7(v)==&v.a[7]);
39 BOOST_TEST(&A8(v)==&v.a[8]);
40 BOOST_TEST(&A9(v)==&v.a[9]);
41 BOOST_TEST(&X(v)==&v.a[0]);
42 BOOST_TEST(&Y(v)==&v.a[1]);
43 BOOST_TEST(&Z(v)==&v.a[2]);
44 BOOST_TEST(&W(v)==&v.a[3]);
45 }
46
47template <class V>
48void
49check_read( V const & v )
50 {
51 BOOST_TEST_EQ((A<0>(v)), 0);
52 BOOST_TEST_EQ((A<1>(v)), 1);
53 BOOST_TEST_EQ((A<2>(v)), 2);
54 BOOST_TEST_EQ((A<3>(v)), 3);
55 BOOST_TEST_EQ((A<4>(v)), 4);
56 BOOST_TEST_EQ((A<5>(v)), 5);
57 BOOST_TEST_EQ((A<6>(v)), 6);
58 BOOST_TEST_EQ((A<7>(v)), 7);
59 BOOST_TEST_EQ((A<8>(v)), 8);
60 BOOST_TEST_EQ((A<9>(v)), 9);
61 BOOST_TEST_EQ(A0(v), 0);
62 BOOST_TEST_EQ(A1(v), 1);
63 BOOST_TEST_EQ(A2(v), 2);
64 BOOST_TEST_EQ(A3(v), 3);
65 BOOST_TEST_EQ(A4(v), 4);
66 BOOST_TEST_EQ(A5(v), 5);
67 BOOST_TEST_EQ(A6(v), 6);
68 BOOST_TEST_EQ(A7(v), 7);
69 BOOST_TEST_EQ(A8(v), 8);
70 BOOST_TEST_EQ(A9(v), 9);
71 BOOST_TEST_EQ(X(v), 0);
72 BOOST_TEST_EQ(Y(v), 1);
73 BOOST_TEST_EQ(Z(v), 2);
74 BOOST_TEST_EQ(W(v), 3);
75 }
76
77template <class V>
78void
79check_write()
80 {
81 {
82 V v(99, -1);
83 A<0>(v) = 0;
84 A<1>(v) = 1;
85 A<2>(v) = 2;
86 A<3>(v) = 3;
87 A<4>(v) = 4;
88 A<5>(v) = 5;
89 A<6>(v) = 6;
90 A<7>(v) = 7;
91 A<8>(v) = 8;
92 A<9>(v) = 9;
93 check_read(v);
94 }
95 {
96 V v(9, -1);
97 A0(v) = 0;
98 A1(v) = 1;
99 A2(v) = 2;
100 A3(v) = 3;
101 A4(v) = 4;
102 A5(v) = 5;
103 A6(v) = 6;
104 A7(v) = 7;
105 A8(v) = 8;
106 A9(v) = 9;
107 check_read(v);
108 }
109 {
110 V v(9, -1);
111 X(v) = 0;
112 Y(v) = 1;
113 Z(v) = 2;
114 W(v) = 3;
115 A4(v) = 4;
116 A5(v) = 5;
117 A6(v) = 6;
118 A7(v) = 7;
119 A8(v) = 8;
120 A9(v) = 9;
121 check_read(v);
122 }
123 }
124
125int
126main()
127 {
128 check_read(v: test_qvm::vector<V1,10,float>(0,1));
129 check_write<test_qvm::vector<V1,10,float> >();
130#ifdef BOOST_QVM_TEST_REF_WRITE_ELEMENT
131 check_write_ref<test_qvm::vector<V1,10,float> >();
132#endif
133 return boost::report_errors();
134 }
135

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