#include <boost/move/utility_core.hpp>
#include <boost/move/unique_ptr.hpp>
#include <boost/core/lightweight_test.hpp>
#include "unique_ptr_test_utils_beg.hpp"
namespace bml = ::boost::movelib;
namespace unique_ptr_observers_dereference{
void test()
{
{
bml::unique_ptr<int> p(new int(3));
BOOST_TEST(*p == 3);
}
{
int *pi = new int[2];
pi[0] = 3;
pi[1] = 4;
bml::unique_ptr<int[]> p(pi);
BOOST_TEST(p[0] == 3);
BOOST_TEST(p[1] == 4);
}
{
int *pi = new int[2];
pi[0] = 3;
pi[1] = 4;
bml::unique_ptr<int[2]> p(pi);
BOOST_TEST(p[0] == 3);
BOOST_TEST(p[1] == 4);
}
}
}
namespace unique_ptr_observers_explicit_bool{
void test()
{
{
bml::unique_ptr<int> p(new int(3));
if (p)
;
else
BOOST_TEST(false);
if (!p)
BOOST_TEST(false);
}
{
bml::unique_ptr<int> p;
if (!p)
;
else
BOOST_TEST(false);
if (p)
BOOST_TEST(false);
}
{
bml::unique_ptr<int[]> p(new int[2]);
if (p)
;
else
BOOST_TEST(false);
if (!p)
BOOST_TEST(false);
}
{
bml::unique_ptr<int[]> p;
if (!p)
;
else
BOOST_TEST(false);
if (p)
BOOST_TEST(false);
}
{
bml::unique_ptr<int[2]> p(new int[2]);
if (p)
;
else
BOOST_TEST(false);
if (!p)
BOOST_TEST(false);
}
{
bml::unique_ptr<int[2]> p;
if (!p)
;
else
BOOST_TEST(false);
if (p)
BOOST_TEST(false);
}
}
}
namespace unique_ptr_observers_get{
void test()
{
{
int* p = new int;
bml::unique_ptr<int> s(p);
BOOST_TEST(s.get() == p);
}
{
int* p = new int[2];
bml::unique_ptr<int[]> s(p);
BOOST_TEST(s.get() == p);
}
{
int* p = new int[2];
bml::unique_ptr<int[2]> s(p);
BOOST_TEST(s.get() == p);
}
{
int *pi = new int[2];
pi[0] = 3;
pi[1] = 4;
bml::unique_ptr<int[2]> p(pi);
BOOST_TEST(p[0] == 3);
BOOST_TEST(p[1] == 4);
}
}
}
namespace unique_ptr_observers_get_deleter{
struct Deleter
{
void operator()(void*) {}
int test() {return 5;}
int test() const {return 6;}
};
void test()
{
{
bml::unique_ptr<int, Deleter> p;
BOOST_TEST(p.get_deleter().test() == 5);
}
{
const bml::unique_ptr<int, Deleter> p;
BOOST_TEST(p.get_deleter().test() == 6);
}
{
bml::unique_ptr<int[], Deleter> p;
BOOST_TEST(p.get_deleter().test() == 5);
}
{
const bml::unique_ptr<int[], Deleter> p;
BOOST_TEST(p.get_deleter().test() == 6);
}
{
bml::unique_ptr<int[2], Deleter> p;
BOOST_TEST(p.get_deleter().test() == 5);
}
{
const bml::unique_ptr<int[2], Deleter> p;
BOOST_TEST(p.get_deleter().test() == 6);
}
}
}
namespace unique_ptr_observers_op_arrow{
void test()
{
{
bml::unique_ptr<A> p(new A);
BOOST_TEST(p->state_ == 999);
}
}
}
namespace unique_ptr_observers_op_index{
void test()
{
{
A *pa = new A[2];
pa[1].set(888);
bml::unique_ptr<A[]> p(pa);
BOOST_TEST(p[0].state_ == 999);
BOOST_TEST(p[1].state_ == 888);
}
{
A *pa = new A[2];
pa[1].set(888);
bml::unique_ptr<A[2]> p(pa);
BOOST_TEST(p[0].state_ == 999);
BOOST_TEST(p[1].state_ == 888);
}
}
}
int main()
{
unique_ptr_observers_dereference::test();
unique_ptr_observers_explicit_bool::test();
unique_ptr_observers_get::test();
unique_ptr_observers_get_deleter::test();
unique_ptr_observers_op_arrow::test();
unique_ptr_observers_op_index::test();
return boost::report_errors();
}
#include "unique_ptr_test_utils_end.hpp"