]> git.proxmox.com Git - ceph.git/blame - ceph/src/boost/libs/move/test/unique_ptr_types.cpp
update sources to v12.2.3
[ceph.git] / ceph / src / boost / libs / move / test / unique_ptr_types.cpp
CommitLineData
7c673cae
FG
1//////////////////////////////////////////////////////////////////////////////
2//
3// (C) Copyright Howard Hinnant 2009
4// (C) Copyright Ion Gaztanaga 2014-2014.
5//
6// Distributed under the Boost Software License, Version 1.0.
7// (See accompanying file LICENSE_1_0.txt or copy at
8// http://www.boost.org/LICENSE_1_0.txt)
9//
10// See http://www.boost.org/libs/move for documentation.
11//
12//////////////////////////////////////////////////////////////////////////////
13#include <boost/move/utility_core.hpp>
14#include <boost/move/unique_ptr.hpp>
15#include <boost/move/detail/type_traits.hpp>
16#include <boost/static_assert.hpp>
17#include <boost/core/lightweight_test.hpp>
18
19//////////////////////////////////////////////
20//
21// The initial implementation of these tests
22// was written by Howard Hinnant.
23//
24// These test were later refactored grouping
25// and porting them to Boost.Move.
26//
27// Many thanks to Howard for releasing his C++03
28// unique_ptr implementation with such detailed
29// test cases.
30//
31//////////////////////////////////////////////
32
33#include "unique_ptr_test_utils_beg.hpp"
34
35namespace bml = ::boost::movelib;
36namespace bmupmu = ::boost::move_upmu;
37
38////////////////////////////////
39// unique_ptr_pointer_type
40////////////////////////////////
41namespace unique_ptr_pointer_type {
42
43struct Deleter
44{
45 struct pointer {};
46};
47
48// Test unique_ptr::pointer type
49void test()
50{
51 //Single unique_ptr
52 {
53 typedef bml::unique_ptr<int> P;
54 BOOST_STATIC_ASSERT((bmupmu::is_same<P::pointer, int*>::value));
55 }
56 {
57 typedef bml::unique_ptr<int, Deleter> P;
58 BOOST_STATIC_ASSERT((bmupmu::is_same<P::pointer, Deleter::pointer>::value));
59 }
60 //Unbounded array unique_ptr
61 {
62 typedef bml::unique_ptr<int[]> P;
63 BOOST_STATIC_ASSERT((bmupmu::is_same<P::pointer, int*>::value));
64 }
65 {
66 typedef bml::unique_ptr<int[], Deleter> P;
67 BOOST_STATIC_ASSERT((bmupmu::is_same<P::pointer, Deleter::pointer>::value));
68 }
69 //Bounded array unique_ptr
70 {
71 typedef bml::unique_ptr<int[5]> P;
72 BOOST_STATIC_ASSERT((bmupmu::is_same<P::pointer, int*>::value));
73 }
74 {
75 typedef bml::unique_ptr<int[5], Deleter> P;
76 BOOST_STATIC_ASSERT((bmupmu::is_same<P::pointer, Deleter::pointer>::value));
77 }
b32b8144
FG
78 //Unbounded array of bounded array unique_ptr
79 {
80 typedef int int_5_t [5];
81 typedef bml::unique_ptr<int_5_t[]> P;
82 BOOST_STATIC_ASSERT((bmupmu::is_same<P::pointer, int_5_t*>::value));
83 }
84 {
85 typedef int int_5_t [5];
86 typedef bml::unique_ptr<int_5_t[], Deleter> P;
87 BOOST_STATIC_ASSERT((bmupmu::is_same<P::pointer, Deleter::pointer>::value));
88 }
7c673cae
FG
89}
90
91} //namespace unique_ptr_pointer_type {
92
93////////////////////////////////
94// unique_ptr_deleter_type
95////////////////////////////////
96namespace unique_ptr_deleter_type {
97
98struct Deleter
99{};
100
101// Test unique_ptr::deleter type
102void test()
103{
104 //Single unique_ptr
105 {
106 typedef bml::unique_ptr<int> P;
107 BOOST_STATIC_ASSERT((bmupmu::is_same<P::deleter_type, bml::default_delete<int> >::value));
108 }
109 {
110 typedef bml::unique_ptr<int, Deleter> P;
111 BOOST_STATIC_ASSERT((bmupmu::is_same<P::deleter_type, Deleter >::value));
112 }
113 //Unbounded array unique_ptr
114 {
115 typedef bml::unique_ptr<int[]> P;
116 BOOST_STATIC_ASSERT((bmupmu::is_same<P::deleter_type, bml::default_delete<int[]> >::value));
117 }
118 {
119 typedef bml::unique_ptr<int[], Deleter> P;
120 BOOST_STATIC_ASSERT((bmupmu::is_same<P::deleter_type, Deleter >::value));
121 }
122 //Bounded array unique_ptr
123 {
124 typedef bml::unique_ptr<int[2]> P;
125 BOOST_STATIC_ASSERT((bmupmu::is_same<P::deleter_type, bml::default_delete<int[2]> >::value));
126 }
127 {
128 typedef bml::unique_ptr<int[2], Deleter> P;
129 BOOST_STATIC_ASSERT((bmupmu::is_same<P::deleter_type, Deleter >::value));
130 }
131}
132
133} //namespace unique_ptr_deleter_type {
134
135////////////////////////////////
136// unique_ptr_element_type
137////////////////////////////////
138namespace unique_ptr_element_type {
139
140// Test unique_ptr::deleter type
141void test()
142{
143 //Single unique_ptr
144 {
145 typedef bml::unique_ptr<const int> P;
146 BOOST_STATIC_ASSERT((bmupmu::is_same<P::element_type, const int>::value));
147 }
148 //Unbounded array unique_ptr
149 {
150 typedef bml::unique_ptr<const int[]> P;
151 BOOST_STATIC_ASSERT((bmupmu::is_same<P::element_type, const int>::value));
152 }
153 //Bounded array unique_ptr
154 {
155 typedef bml::unique_ptr<const int[2]> P;
156 BOOST_STATIC_ASSERT((bmupmu::is_same<P::element_type, const int>::value));
157 }
158}
159
160} //namespace unique_ptr_element_type {
161
162////////////////////////////////
163// unique_ptr_construct_assign_traits
164////////////////////////////////
165
166namespace unique_ptr_construct_assign_traits {
167
168 void test()
169 {
170 typedef bml::unique_ptr<int> unique_ptr_t;
171 //Even if BOOST_MOVE_TT_CXX11_IS_COPY_CONSTRUCTIBLE is not defined
172 //boost::unique_ptr shall work with boost::movelib traits
173 BOOST_STATIC_ASSERT(!(boost::move_detail::is_copy_constructible<unique_ptr_t>::value));
174 //Even if BOOST_MOVE_TT_CXX11_IS_COPY_ASSIGNABLE is not defined
175 //boost::unique_ptr shall work with boost::movelib traits
176 BOOST_STATIC_ASSERT(!(boost::move_detail::is_copy_assignable<unique_ptr_t>::value));
177 //Important traits for containers like boost::vector
178 BOOST_STATIC_ASSERT(!(boost::move_detail::is_trivially_copy_constructible<unique_ptr_t>::value));
179 BOOST_STATIC_ASSERT(!(boost::move_detail::is_trivially_copy_assignable<unique_ptr_t>::value));
180 }
181
182} //namespace unique_ptr_construct_assign_traits {
183
184////////////////////////////////
185// main
186////////////////////////////////
187
188int main()
189{
190 //General
191 unique_ptr_pointer_type::test();
192 unique_ptr_deleter_type::test();
193 unique_ptr_element_type::test();
194 unique_ptr_construct_assign_traits::test();
195
196 //Test results
197 return boost::report_errors();
198}
199
200#include "unique_ptr_test_utils_end.hpp"