1/*
2Copyright 2014 Glen Joseph Fernandes
3(glenjofe@gmail.com)
4
5Distributed under the Boost Software License, Version 1.0.
6(http://www.boost.org/LICENSE_1_0.txt)
7*/
8#include <boost/config.hpp>
9#if !defined(BOOST_NO_CXX11_SMART_PTR)
10#include <boost/core/lightweight_test.hpp>
11#include <boost/smart_ptr/make_unique.hpp>
12
13class type {
14public:
15 static unsigned instances;
16
17 type(int v1 = 0,
18 int v2 = 0,
19 int v3 = 0,
20 int v4 = 0,
21 int v5 = 0,
22 int v6 = 0,
23 int v7 = 0,
24 int v8 = 0,
25 int v9 = 0)
26 : sum_(v1 + v2 + v3 + v4 + v5 + v6 + v7 + v8 + v9) {
27 ++instances;
28 }
29
30 ~type() {
31 --instances;
32 }
33
34 int sum() const {
35 return sum_;
36 }
37
38private:
39 int sum_;
40
41 type(const type&);
42 type& operator=(const type&);
43};
44
45unsigned type::instances = 0;
46
47int main()
48{
49 BOOST_TEST(type::instances == 0);
50 {
51 std::unique_ptr<type> result = boost::make_unique<type>();
52 BOOST_TEST(result.get() != 0);
53 BOOST_TEST(type::instances == 1);
54 BOOST_TEST(result->sum() == 0);
55 result.reset();
56 BOOST_TEST(type::instances == 0);
57 }
58
59#if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
60 {
61 std::unique_ptr<type> result = boost::make_unique<type>(args: 1);
62 BOOST_TEST(result.get() != 0);
63 BOOST_TEST(type::instances == 1);
64 BOOST_TEST(result->sum() == 1);
65 result.reset();
66 BOOST_TEST(type::instances == 0);
67 }
68
69 {
70 std::unique_ptr<type> result = boost::make_unique<type>(args: 1, args: 2);
71 BOOST_TEST(result.get() != 0);
72 BOOST_TEST(type::instances == 1);
73 BOOST_TEST(result->sum() == 1 + 2);
74 result.reset();
75 BOOST_TEST(type::instances == 0);
76 }
77
78 {
79 std::unique_ptr<type> result =
80 boost::make_unique<type>(args: 1, args: 2, args: 3);
81 BOOST_TEST(result.get() != 0);
82 BOOST_TEST(type::instances == 1);
83 BOOST_TEST(result->sum() == 1 + 2 + 3);
84 result.reset();
85 BOOST_TEST(type::instances == 0);
86 }
87
88 {
89 std::unique_ptr<type> result =
90 boost::make_unique<type>(args: 1, args: 2, args: 3, args: 4);
91 BOOST_TEST(result.get() != 0);
92 BOOST_TEST(type::instances == 1);
93 BOOST_TEST(result->sum() == 1 + 2 + 3 + 4);
94 result.reset();
95 BOOST_TEST(type::instances == 0);
96 }
97
98 {
99 std::unique_ptr<type> result =
100 boost::make_unique<type>(args: 1, args: 2, args: 3, args: 4, args: 5);
101 BOOST_TEST(result.get() != 0);
102 BOOST_TEST(type::instances == 1);
103 BOOST_TEST(result->sum() == 1 + 2 + 3 + 4 + 5);
104 result.reset();
105 BOOST_TEST(type::instances == 0);
106 }
107
108 {
109 std::unique_ptr<type> result =
110 boost::make_unique<type>(args: 1, args: 2, args: 3, args: 4, args: 5, args: 6);
111 BOOST_TEST(result.get() != 0);
112 BOOST_TEST(type::instances == 1);
113 BOOST_TEST(result->sum() == 1 + 2 + 3 + 4 + 5 + 6);
114 result.reset();
115 BOOST_TEST(type::instances == 0);
116 }
117
118 {
119 std::unique_ptr<type> result =
120 boost::make_unique<type>(args: 1, args: 2, args: 3, args: 4, args: 5, args: 6, args: 7);
121 BOOST_TEST(result.get() != 0);
122 BOOST_TEST(type::instances == 1);
123 BOOST_TEST(result->sum() == 1 + 2 + 3 + 4 + 5 + 6 + 7);
124 result.reset();
125 BOOST_TEST(type::instances == 0);
126 }
127
128 {
129 std::unique_ptr<type> result =
130 boost::make_unique<type>(args: 1, args: 2, args: 3, args: 4, args: 5, args: 6, args: 7, args: 8);
131 BOOST_TEST(result.get() != 0);
132 BOOST_TEST(type::instances == 1);
133 BOOST_TEST(result->sum() == 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8);
134 result.reset();
135 BOOST_TEST(type::instances == 0);
136 }
137
138 {
139 std::unique_ptr<type> result =
140 boost::make_unique<type>(args: 1, args: 2, args: 3, args: 4, args: 5, args: 6, args: 7, args: 8, args: 9);
141 BOOST_TEST(result.get() != 0);
142 BOOST_TEST(type::instances == 1);
143 BOOST_TEST(result->sum() == 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9);
144 result.reset();
145 BOOST_TEST(type::instances == 0);
146 }
147#endif
148 return boost::report_errors();
149}
150#else
151int main()
152{
153 return 0;
154}
155#endif
156

source code of boost/libs/smart_ptr/test/make_unique_args_test.cpp