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#include "test_qvm_vector.hpp"
7
8using namespace boost::qvm;
9
10template <class V, bool WriteElementRef=vec_write_element_ref<V>::value>
11struct
12test_write_element_idx
13 {
14 static
15 void
16 test()
17 {
18 for( int i=0; i!=vec_traits<V>::dim; ++i )
19 {
20 V v(0,1);
21 vec_traits<V>::write_element_idx(i,v,42);
22 for( int j=0; j!=vec_traits<V>::dim; ++j )
23 BOOST_TEST_EQ(
24 (vec_traits<V>::read_element_idx(j,v)),
25 (i==j ? 42 : j) );
26 }
27 }
28 };
29
30template <class V>
31struct
32test_write_element_idx<V, true>
33 {
34 static
35 void
36 test()
37 {
38 V v;
39 for( int i=0; i!=vec_traits<V>::dim; ++v )
40 BOOST_TEST_EQ(&vec_traits<V>::write_element_idx(i,v), &v.a[i]);
41 }
42 };
43
44template <class V>
45void
46vec_index_test()
47 {
48 V v(0, 1);
49 for( int i=0; i!=vec_traits<V>::dim; ++i )
50 BOOST_TEST_EQ(vec_traits<V>::read_element_idx(i,v), i);
51 test_write_element_idx<V>::test();
52 }
53
54int
55main()
56 {
57 using namespace boost::qvm;
58 vec_index_test<test_qvm::vector<V1,4> >();
59 vec_index_test<test_qvm::vector<V1,5> >();
60 return boost::report_errors();
61 }
62

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