]>
Commit | Line | Data |
---|---|---|
7c673cae FG |
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 | ||
7c673cae FG |
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 | |
11fdf7f2 TL |
14 | #include "test.hpp" |
15 | #include "check_integral_constant.hpp" | |
7c673cae FG |
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 | ||
92f5a8d4 TL |
28 | #ifdef __CLR_VER |
29 | #pragma warning(disable:4793) // vaarg function | |
30 | #endif | |
31 | ||
7c673cae FG |
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 |