1// Boost.Container static_vector
2// Unit Test
3
4// Copyright (c) 2012-2013 Adam Wulkiewicz, Lodz, Poland.
5// Copyright (c) 2012-2013 Andrew Hundt.
6
7// Use, modification and distribution is subject to the Boost Software License,
8// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
9// http://www.boost.org/LICENSE_1_0.txt)
10
11#ifndef BOOST_CONTAINER_TEST_STATIC_VECTOR_TEST_HPP
12#define BOOST_CONTAINER_TEST_STATIC_VECTOR_TEST_HPP
13
14#include <boost/container/static_vector.hpp>
15
16#include "movable_int.hpp"
17
18using namespace boost::container;
19
20class value_ndc
21{
22public:
23 explicit value_ndc(int a) : aa(a) {}
24 ~value_ndc() {}
25 bool operator==(value_ndc const& v) const { return aa == v.aa; }
26 bool operator<(value_ndc const& v) const { return aa < v.aa; }
27private:
28 value_ndc(value_ndc const&) {}
29 value_ndc & operator=(value_ndc const&) { return *this; }
30 int aa;
31};
32
33class value_nd
34{
35public:
36 explicit value_nd(int a) : aa(a) {}
37 ~value_nd() {}
38 bool operator==(value_nd const& v) const { return aa == v.aa; }
39 bool operator<(value_nd const& v) const { return aa < v.aa; }
40private:
41 int aa;
42};
43
44class value_nc
45{
46public:
47 explicit value_nc(int a = 0) : aa(a) {}
48 ~value_nc() {}
49 value_nc & operator=(int a){ aa = a; return *this; }
50 bool operator==(value_nc const& v) const { return aa == v.aa; }
51 bool operator<(value_nc const& v) const { return aa < v.aa; }
52private:
53 value_nc(value_nc const&) {}
54 value_nc & operator=(value_nc const&) { return *this; }
55 int aa;
56};
57
58class counting_value
59{
60 BOOST_COPYABLE_AND_MOVABLE(counting_value)
61
62public:
63 explicit counting_value(int a = 0, int b = 0) : aa(a), bb(b) { ++c(); }
64 counting_value(counting_value const& v) : aa(v.aa), bb(v.bb) { ++c(); }
65 counting_value(BOOST_RV_REF(counting_value) p) : aa(p.aa), bb(p.bb) { p.aa = 0; p.bb = 0; ++c(); } // Move constructor
66 counting_value& operator=(BOOST_RV_REF(counting_value) p) { aa = p.aa; p.aa = 0; bb = p.bb; p.bb = 0; return *this; } // Move assignment
67 counting_value& operator=(BOOST_COPY_ASSIGN_REF(counting_value) p) { aa = p.aa; bb = p.bb; return *this; } // Copy assignment
68 counting_value& operator=(int a) { aa =a; return *this; } // Copy assignment
69 ~counting_value() { --c(); }
70 bool operator==(counting_value const& v) const { return aa == v.aa && bb == v.bb; }
71 bool operator<(counting_value const& v) const { return aa < v.aa || ( aa == v.aa && bb < v.bb ); }
72 static size_t count() { return c(); }
73
74private:
75 static size_t & c() { static size_t co = 0; return co; }
76 int aa, bb;
77};
78
79namespace boost {
80
81template <class T>
82struct has_nothrow_move;
83
84template <>
85struct has_nothrow_move<counting_value>
86{
87 static const bool value = true;
88};
89
90}
91
92#endif // BOOST_CONTAINER_TEST_STATIC_VECTOR_TEST_HPP
93

source code of boost/libs/container/test/static_vector_test.hpp