]> git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/type_traits/test/type_with_alignment_test.cpp
import new upstream nautilus stable release 14.2.8
[ceph.git] / ceph / src / boost / libs / type_traits / test / type_with_alignment_test.cpp
1
2 // (C) Copyright John Maddock 2000.
3 // Use, modification and distribution are subject to the
4 // Boost Software License, Version 1.0. (See accompanying file
5 // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
6
7 #ifdef TEST_STD
8 # include <type_traits>
9 #else
10 # include <boost/type_traits/alignment_of.hpp>
11 # include <boost/type_traits/type_with_alignment.hpp>
12 # include <boost/type_traits/is_pod.hpp>
13 #endif
14 #include "test.hpp"
15 #include "check_integral_constant.hpp"
16
17 #if defined(BOOST_MSVC) || (defined(BOOST_INTEL) && defined(_MSC_VER))
18 #if (_MSC_VER >= 1400) && defined(_M_IX86)
19 #include <xmmintrin.h>
20 #endif
21 struct __declspec(align(8)) a8 { char m[8]; };
22 struct __declspec(align(16)) a16 { char m[16]; };
23 struct __declspec(align(32)) a32 { char m[32]; };
24 struct __declspec(align(64)) a64 { char m[64]; };
25 struct __declspec(align(128)) a128 { char m[128]; };
26 #endif
27
28 #ifdef __CLR_VER
29 #pragma warning(disable:4793) // vaarg function
30 #endif
31
32 void check_call2(...){}
33
34 template <class T>
35 void check_call(const T& v)
36 {
37 check_call2(v);
38 }
39
40 #define TYPE_WITH_ALIGNMENT_TEST(T)\
41 {\
42 std::cout << "\ntesting type " << typeid(T).name() << std::endl;\
43 std::cout << "Alignment of T is " << ::tt::alignment_of< T >::value << std::endl;\
44 std::cout << "Aligned type is " << typeid(::tt::type_with_alignment< ::tt::alignment_of< T >::value>::type).name() << std::endl;\
45 std::cout << "Alignment of aligned type is " << ::tt::alignment_of<\
46 ::tt::type_with_alignment<\
47 ::tt::alignment_of< T >::value\
48 >::type\
49 >::value << std::endl;\
50 BOOST_CHECK(::tt::alignment_of<\
51 ::tt::type_with_alignment<\
52 ::tt::alignment_of< T >::value\
53 >::type\
54 >::value == ::boost::alignment_of< T >::value);\
55 BOOST_CHECK(::tt::is_pod<\
56 ::tt::type_with_alignment<\
57 ::tt::alignment_of< T >::value>::type\
58 >::value);\
59 }
60 #define TYPE_WITH_ALIGNMENT_TEST_EX(T)\
61 TYPE_WITH_ALIGNMENT_TEST(T)\
62 {\
63 ::tt::type_with_alignment<\
64 ::tt::alignment_of< T >::value\
65 >::type val;\
66 check_call(val);\
67 }
68
69
70 TT_TEST_BEGIN(type_with_alignment)
71
72 TYPE_WITH_ALIGNMENT_TEST_EX(char)
73 TYPE_WITH_ALIGNMENT_TEST_EX(short)
74 TYPE_WITH_ALIGNMENT_TEST_EX(int)
75 TYPE_WITH_ALIGNMENT_TEST_EX(long)
76 TYPE_WITH_ALIGNMENT_TEST_EX(float)
77 TYPE_WITH_ALIGNMENT_TEST_EX(double)
78 TYPE_WITH_ALIGNMENT_TEST_EX(long double)
79
80 #ifdef BOOST_HAS_LONG_LONG
81 TYPE_WITH_ALIGNMENT_TEST_EX(::boost::long_long_type)
82 #endif
83 #ifdef BOOST_HAS_MS_INT64
84 TYPE_WITH_ALIGNMENT_TEST_EX(__int64)
85 #endif
86 TYPE_WITH_ALIGNMENT_TEST_EX(int[4])
87 TYPE_WITH_ALIGNMENT_TEST_EX(int(*)(int))
88 TYPE_WITH_ALIGNMENT_TEST_EX(int*)
89 TYPE_WITH_ALIGNMENT_TEST_EX(VB)
90 TYPE_WITH_ALIGNMENT_TEST_EX(VD)
91 TYPE_WITH_ALIGNMENT_TEST_EX(enum_UDT)
92 TYPE_WITH_ALIGNMENT_TEST_EX(mf2)
93 TYPE_WITH_ALIGNMENT_TEST_EX(POD_UDT)
94 TYPE_WITH_ALIGNMENT_TEST_EX(empty_UDT)
95 TYPE_WITH_ALIGNMENT_TEST_EX(union_UDT)
96
97 #if defined(BOOST_MSVC) || (defined(BOOST_INTEL) && defined(_MSC_VER))
98 #if (_MSC_VER >= 1400) && defined(_M_IX86)
99 TYPE_WITH_ALIGNMENT_TEST(__m128)
100 TYPE_WITH_ALIGNMENT_TEST(__m64)
101 #endif
102 TYPE_WITH_ALIGNMENT_TEST(a8)
103 TYPE_WITH_ALIGNMENT_TEST(a16)
104 TYPE_WITH_ALIGNMENT_TEST(a32)
105 #endif
106
107 TT_TEST_END
108
109
110
111
112
113
114
115
116