File: vec_traits_array_test.cpp

package info (click to toggle)
boost1.90 1.90.0-1
  • links: PTS, VCS
  • area: main
  • in suites:
  • size: 593,120 kB
  • sloc: cpp: 4,190,908; xml: 196,648; python: 34,618; ansic: 23,145; asm: 5,468; sh: 3,774; makefile: 1,161; perl: 1,020; sql: 728; ruby: 676; yacc: 478; java: 77; lisp: 24; csh: 6
file content (87 lines) | stat: -rw-r--r-- 3,481 bytes parent folder | download | duplicates (5)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
// Copyright 2008-2024 Emil Dotchevski and Reverge Studios, Inc.
// Distributed under the Boost Software License, Version 1.0. (See accompanying
// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)

#ifdef BOOST_QVM_TEST_SINGLE_HEADER
#   include BOOST_QVM_TEST_SINGLE_HEADER
#else
#   include <boost/qvm/vec_operations.hpp>
#endif

#include <boost/qvm/vec_traits_array.hpp>
#include <boost/core/lightweight_test.hpp>

template <class T,class U>
struct same_type;

template <class T>
struct
same_type<T,T>
    {
    };

template <class T,class P>
void
test_ref_cast( T & v, P * ptr )
    {
    using namespace boost::qvm;
    BOOST_QVM_STATIC_ASSERT(is_vec<T>::value);
    BOOST_QVM_STATIC_ASSERT(vec_traits<T>::dim==3);
    BOOST_TEST(vec_traits<T>::template read_element<0>(v)==ptr[0]);
    BOOST_TEST(vec_traits<T>::template read_element<1>(v)==ptr[1]);
    BOOST_TEST(vec_traits<T>::template read_element<2>(v)==ptr[2]);
    BOOST_TEST(&vec_traits<T>::template write_element<0>(v)==&ptr[0]);
    BOOST_TEST(&vec_traits<T>::template write_element<1>(v)==&ptr[1]);
    BOOST_TEST(&vec_traits<T>::template write_element<2>(v)==&ptr[2]);
    BOOST_TEST(&v[0]==&ptr[0]);
    BOOST_TEST(&v[1]==&ptr[1]);
    BOOST_TEST(&v[2]==&ptr[2]);
    }

int
main()
    {
    using namespace boost::qvm;
        {
        BOOST_QVM_STATIC_ASSERT(is_vec<int[3]>::value);
        BOOST_QVM_STATIC_ASSERT(!is_vec<int[3][3]>::value);
        BOOST_QVM_STATIC_ASSERT(!is_vec<int[3][3][3]>::value);
        BOOST_QVM_STATIC_ASSERT((vec_traits<int[3]>::dim==3));
        same_type<vec_traits<int[3]>::scalar_type,int>();
        same_type< vec<int,3>, deduce_vec<int[3]>::type >();
        same_type< vec<int,3>, deduce_vec<int const[3]>::type >();
        int arr[3] = {0,1,2};
        BOOST_TEST((vec_traits<int[3]>::read_element<0>(arr)==0));
        BOOST_TEST((vec_traits<int[3]>::read_element<1>(arr)==1));
        BOOST_TEST((vec_traits<int[3]>::read_element<2>(arr)==2));
        BOOST_TEST((vec_traits<int const[3]>::read_element<0>(arr)==0));
        BOOST_TEST((vec_traits<int const[3]>::read_element<1>(arr)==1));
        BOOST_TEST((vec_traits<int const[3]>::read_element<2>(arr)==2));
        BOOST_TEST((vec_traits<int[3]>::read_element_idx(0,arr)==0));
        BOOST_TEST((vec_traits<int[3]>::read_element_idx(1,arr)==1));
        BOOST_TEST((vec_traits<int[3]>::read_element_idx(2,arr)==2));
        BOOST_TEST((vec_traits<int const[3]>::read_element_idx(0,arr)==0));
        BOOST_TEST((vec_traits<int const[3]>::read_element_idx(1,arr)==1));
        BOOST_TEST((vec_traits<int const[3]>::read_element_idx(2,arr)==2));
        BOOST_TEST((&vec_traits<int[3]>::write_element<0>(arr)==&arr[0]));
        BOOST_TEST((&vec_traits<int[3]>::write_element<1>(arr)==&arr[1]));
        BOOST_TEST((&vec_traits<int[3]>::write_element<2>(arr)==&arr[2]));
        BOOST_TEST((&vec_traits<int[3]>::write_element_idx(0,arr)==&arr[0]));
        BOOST_TEST((&vec_traits<int[3]>::write_element_idx(1,arr)==&arr[1]));
        BOOST_TEST((&vec_traits<int[3]>::write_element_idx(2,arr)==&arr[2]));
        }
        {
        int arr[42] = {0};
        int * ptr=arr+5;
        ptr[0]=42;
        ptr[1]=43;
        ptr[2]=44;
        test_ref_cast(ptr_vref<3>(ptr),ptr);
        int v[3] = {1,1,1};
        ptr_vref<3>(ptr) += vref(v);
        BOOST_TEST(ptr[0]==43);
        BOOST_TEST(ptr[1]==44);
        BOOST_TEST(ptr[2]==45);
        }
    return boost::report_errors();
    }